Utilizzare il controllo delle vulnerabilità

Questa pagina mostra come utilizzare il controllo delle vulnerabilità della convalida continua (CV) dell'Autorizzazione binaria per monitorare le vulnerabilità associate ai pod in esecuzione su cluster Google Kubernetes Engine (GKE) con CV abilitato.

Costi

Questa guida utilizza i seguenti servizi Google Cloud:

  • Artifact Analysis
  • Autorizzazione binaria, ma CV è disponibile senza costi durante la fase di anteprima
  • GKE

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi.

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Artifact Analysis, Binary Authorization, Google Kubernetes Engine APIs:

    gcloud services enable binaryauthorization.googleapis.com containeranalysis.googleapis.com container.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

    gcloud init
  9. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Artifact Analysis, Binary Authorization, Google Kubernetes Engine APIs:

    gcloud services enable binaryauthorization.googleapis.com containeranalysis.googleapis.com container.googleapis.com
  12. Assicurati che la gcloud CLI sia aggiornata all'ultima versione.
  13. Installa lo strumento a riga di comando kubectl.
  14. Se i criteri di Autorizzazione binaria e i cluster GKE si trovano in progetti diversi, assicurati che Autorizzazione binaria sia abilitata in entrambi i progetti.

Ruoli obbligatori

Questa sezione mostra come impostare i ruoli per questo controllo.

Panoramica

Se utilizzi tutti i prodotti menzionati in questa guida nello stesso progetto, non devi impostare alcuna autorizzazione. L'Autorizzazione binaria configura i ruoli correttamente quando la attivi. Se esegui i prodotti in progetti diversi, devi impostare i ruoli come descritto in questa sezione.

Per assicurarti che l'agente di servizio di autorizzazione binaria in ogni progetto disponga delle autorizzazioni necessarie per valutare il controllo delle vulnerabilità del CV, chiedi all'amministratore di concedere all'agente di servizio di autorizzazione binaria in ogni progetto i seguenti ruoli IAM:

  • Se il progetto del cluster è diverso dal progetto della policy: Valutatore criterio di autorizzazione binaria (roles/binaryauthorization.policyEvaluator) nell'agente di servizio di autorizzazione binaria del progetto del cluster, per consentirgli di accedere al progetto della policy
  • Se il progetto di artefatti è diverso dal progetto di criteri: Visualizzatore delle occorrenze di Container Analysis (roles/containeranalysis.occurrences.viewer) nell'agente di servizio di autorizzazione binaria del progetto di criteri, per consentire l'accesso alle informazioni sulle vulnerabilità

Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

L'amministratore potrebbe anche essere in grado di assegnare all'agente di servizio di autorizzazione binaria in ogni progetto le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.

Concedi i ruoli utilizzando gcloud CLI

Per assicurarti che gli account di servizio di ogni progetto dispongano delle autorizzazioni necessarie per valutare questo controllo, concedi agli account di servizio di ogni progetto i seguenti ruoli IAM:

  1. Se il progetto in cui esegui il cluster è diverso da quello in cui risiede il criterio, devi concedere all'agente di servizio di Autorizzazione binaria del progetto del cluster l'autorizzazione per accedere al criterio nel progetto del criterio.

    1. Recupera l'agente di servizio di Autorizzazione binaria del progetto del cluster:

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:CLUSTER_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
      

      Sostituisci CLUSTER_PROJECT_ID con l'ID del progetto del cluster.

    2. Consenti a CV di valutare il criterio nel cluster:

      gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \
          --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \
          --role='roles/binaryauthorization.policyEvaluator'
      

      Sostituisci POLICY_PROJECT_ID con l'ID del progetto che contiene il criterio.

  2. Se il progetto Artifact Analysis è diverso dal progetto delle norme di Autorizzazione binaria, svolgi i seguenti passaggi:

    1. Ottieni l'agente di servizio di Autorizzazione binaria del progetto di criteri:

      PROJECT_NUMBER=$(gcloud projects list \
        --filter="projectId:POLICY_PROJECT_ID" \
        --format="value(PROJECT_NUMBER)")
      SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
      

      Sostituisci POLICY_PROJECT_ID con l'ID del progetto che contiene il criterio.

    2. Concedi il ruolo:

      gcloud projects add-iam-policy-binding VULNERABILITY_PROJECT_ID \
          --member="serviceAccount:$SERVICE_ACCOUNT" \
          --role='roles/containeranalysis.occurrences.viewer'
      

      Sostituisci VULNERABILITY_PROJECT_ID con l'ID del progetto in cui esegui Artifact Analysis.

Crea una policy della piattaforma

Per creare un criterio della piattaforma CV con un controllo delle vulnerabilità:

  1. Crea il file YAML dei criteri della piattaforma:

    cat > /tmp/my-policy.yaml <<EOF
    
    gkePolicy:
      checkSets:
      - checks:
        - vulnerabilityCheck:
            maximumFixableSeverity: MEDIUM
            maximumUnfixableSeverity: HIGH
            allowedCves:
              - CVE_ALLOWED
            blockedCves:
              - CVE_BLOCKED
            containerAnalysisVulnerabilityProjects: projects/VULNERABILITY_PROJECT
          displayName: My vulnerability check
        displayName: My vulnerability check set
    EOF
    

Disclaimer per la classificazione dei dati:

  • I dati sulle vulnerabilità raccolti dai progetti specificati in containerAnalysisVulnerabilityProjects sono considerati Dati del cliente.
  • CV tratta i dati sulle vulnerabilità in memoria negli Stati Uniti quando sono soddisfatte le seguenti condizioni:
    • La CV è attivata su un cluster.
    • Un criterio associato al cluster contiene un controllo vulnerabilityCheck.
    • Gli account di servizio appropriati dispongono dell'autorizzazione IAM per accedere ai dati sulle vulnerabilità in containerAnalysisVulnerabilityProjects.
  • I dettagli sulla conformità ai criteri risultanti dalla valutazione dei criteri vengono archiviati ed elaborati come dati di servizio.

Per ulteriori informazioni, consulta l'[Addendum per il trattamento dei dati Cloud (clienti)] (https://cloud.google.com/terms/data-processing-addendum)

  1. Crea il criterio della piattaforma:

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • POLICY_ID: un ID criteri della piattaforma scelto da te. Se il criterio si trova in un altro progetto, puoi utilizzare il nome completo della risorsa: projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID.
  • POLICY_PATH: un percorso al file delle norme.
  • POLICY_PROJECT_ID: l'ID del progetto di norme.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud beta container binauthz policy create POLICY_ID \
    --platform=gke \
    --policy-file=POLICY_PATH \
    --project=POLICY_PROJECT_ID

Windows (PowerShell)

gcloud beta container binauthz policy create POLICY_ID `
    --platform=gke `
    --policy-file=POLICY_PATH `
    --project=POLICY_PROJECT_ID

Windows (cmd.exe)

gcloud beta container binauthz policy create POLICY_ID ^
    --platform=gke ^
    --policy-file=POLICY_PATH ^
    --project=POLICY_PROJECT_ID

Attiva CV

Puoi creare un nuovo cluster o aggiornarne uno esistente per utilizzare il monitoraggio dei CV con i criteri della piattaforma basati su controlli.

Crea un cluster che utilizza il monitoraggio CV

In questa sezione crei un cluster che utilizza solo il monitoraggio dei CV con criteri della piattaforma basati su controlli.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • CLUSTER_NAME: un nome di cluster.
  • LOCATION: la località, ad esempio us-central1 o asia-south1.
  • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviato il criterio.
  • POLICY_ID: l'ID criterio.
  • CLUSTER_PROJECT_ID: l'ID progetto del cluster.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Crea un cluster che utilizza il monitoraggio dell'applicazione e del CV

In questa sezione crei un cluster che utilizza sia l'applicazione dei criteri project-singleton sia il monitoraggio dei CV con criteri della piattaforma basati su controlli:

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • CLUSTER_NAME: un nome di cluster.
  • LOCATION: la località, ad esempio us-central1 o asia-south1.
  • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviato il criterio.
  • POLICY_ID: l'ID criterio.
  • CLUSTER_PROJECT_ID: l'ID progetto del cluster.

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters create CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters create CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters create CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Aggiorna un cluster per utilizzare il monitoraggio CV

In questa sezione aggiorni un cluster in modo da utilizzare il monitoraggio dei video con solo criteri della piattaforma basati su controlli. Se nel cluster è già attivata l'applicazione dei criteri relativi ai progetti singoli, l'esecuzione di questo comando la disattiva. Ti consigliamo invece di aggiornare il cluster con l'applicazione forzata e il monitoraggio dei CV abilitati.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • CLUSTER_NAME: il nome del cluster
  • LOCATION: la località, ad esempio us-central1 o asia-south1
  • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviato il criterio
  • POLICY_ID: l'ID criterio
  • CLUSTER_PROJECT_ID: l'ID progetto del cluster

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Aggiornare un cluster per utilizzare il monitoraggio dell'applicazione e del CV

In questa sezione, aggiorni un cluster in modo da utilizzare sia l'applicazione dei criteri per progetti singoli sia il monitoraggio dei CV con criteri della piattaforma basati su controlli.

Prima di utilizzare i dati dei comandi riportati di seguito, effettua le seguenti sostituzioni:

  • CLUSTER_NAME: un nome di cluster
  • LOCATION: la località, ad esempio us-central1 o asia-south1
  • POLICY_PROJECT_ID: l'ID del progetto in cui è archiviato il criterio
  • POLICY_ID: l'ID criterio
  • CLUSTER_PROJECT_ID: l'ID progetto del cluster

Esegui il seguente comando:

Linux, macOS o Cloud Shell

gcloud beta container clusters update CLUSTER_NAME \
    --location=LOCATION \
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE \
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID \
    --project=CLUSTER_PROJECT_ID

Windows (PowerShell)

gcloud beta container clusters update CLUSTER_NAME `
    --location=LOCATION `
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE `
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID `
    --project=CLUSTER_PROJECT_ID

Windows (cmd.exe)

gcloud beta container clusters update CLUSTER_NAME ^
    --location=LOCATION ^
    --binauthz-evaluation-mode=POLICY_BINDINGS_AND_PROJECT_SINGLETON_POLICY_ENFORCE ^
    --binauthz-policy-bindings=name=projects/POLICY_PROJECT_ID/platforms/gke/policies/POLICY_ID ^
    --project=CLUSTER_PROJECT_ID

Testa il controllo delle vulnerabilità

Per verificare che il controllo sia configurato correttamente, aggiorna il criterio e modifica i parametri di controllo per forzare una violazione. Ad esempio, puoi aggiungere una CVE specifica a blockedCves e poi implementare un'immagine con la vulnerabilità.

Visualizza i log per le voci del CV

Puoi cercare le voci di Cloud Logging per trovare errori di configurazione del CV e violazioni della convalida dei criteri della piattaforma CV.

CV registra gli errori e le violazioni in Cloud Logging entro 24 ore. Di solito puoi visualizzare le voci entro poche ore.

Visualizzare i log degli errori di configurazione del CV

Per visualizzare i log degli errori di configurazione del CV, esegui il seguente comando:

gcloud logging read \
     --order="desc" \
     --freshness=7d \
     --project=CLUSTER_PROJECT_ID \
    'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "configErrorEvent"'

Il seguente output mostra un errore di configurazione in cui non viene trovato un criterio della piattaforma CV:

{
  "insertId": "141d4f10-72ea-4a43-b3ec-a03da623de42",
  "jsonPayload": {
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent",
    "configErrorEvent": {
      "description": "Cannot monitor cluster 'us-central1-c.my-cluster': Resource projects/123456789/platforms/gke/policies/my-policy does not exist."
    }
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "cluster_name": "my-cluster",
      "location": "us-central1-c",
      "project_id": "my-project"
    }
  },
  "timestamp": "2024-05-28T15:31:03.999566Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2024-05-28T16:30:56.304108670Z"
}

Visualizzare le violazioni della convalida delle norme della piattaforma CV

Se nessuna immagine viola i criteri della piattaforma che hai attivato, non vengono visualizzate voci nei log.

Per visualizzare le voci di log del CV degli ultimi sette giorni, esegui il seguente comando:

gcloud logging read \
     --order="desc" \
     --freshness=7d \
     --project=CLUSTER_PROJECT_ID \
    'logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation" "policyName"'

Sostituisci CLUSTER_PROJECT_ID con l'ID del progetto del cluster.

Tipi di controlli

I log CV controllano le informazioni sulle violazioni in checkResults. Nella voce, il valore checkType indica il controllo. I valori per ogni controllo sono come segue:

  • ImageFreshnessCheck
  • SigstoreSignatureCheck
  • SimpleSigningAttestationCheck
  • SlsaCheck
  • TrustedDirectoryCheck
  • VulnerabilityCheck

Log di esempio

L'esempio seguente di voce di log CV descrive un'immagine non conforme che viola un controllo della directory attendibile:

{
  "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
  "jsonPayload": {
    "podEvent": {
      "endTime": "2022-11-22T01:14:30.430151Z",
      "policyName": "projects/123456789/platforms/gke/policies/my-policy",
      "images": [
        {
          "result": "DENY",
          "checkResults": [
            {
              "explanation": "TrustedDirectoryCheck at index 0 with display name \"My trusted directory check\" has verdict NOT_CONFORMANT. Image is not in a trusted directory",
              "checkSetName": "My check set",
              "checkSetIndex": "0",
              "checkName": "My trusted directory check",
              "verdict": "NON_CONFORMANT",
              "checkType": "TrustedDirectoryCheck",
              "checkIndex": "0"
            }
          ],
          "image": "gcr.io/my-project/hello-app:latest"
        }
      ],
      "verdict": "VIOLATES_POLICY",
      "podNamespace": "default",
      "deployTime": "2022-11-22T01:06:53Z",
      "pod": "hello-app"
    },
    "@type": "type.googleapis.com/google.cloud.binaryauthorization.v1beta1.ContinuousValidationEvent"
  },
  "resource": {
    "type": "k8s_cluster",
    "labels": {
      "project_id": "my-project",
      "location": "us-central1-a",
      "cluster_name": "my-test-cluster"
    }
  },
  "timestamp": "2022-11-22T01:44:28.729881832Z",
  "severity": "WARNING",
  "logName": "projects/my-project/logs/binaryauthorization.googleapis.com%2Fcontinuous_validation",
  "receiveTimestamp": "2022-11-22T03:35:47.171905337Z"
}

Esegui la pulizia

Questa sezione descrive come ripulire il monitoraggio dei CV configurato in precedenza in questa guida.

Puoi disattivare il monitoraggio CV o sia l'Autorizzazione binaria sia il monitoraggio CV nel tuo cluster.

Disattivare Autorizzazione binaria in un cluster

Per disattivare l'applicazione sia di CV sia di Autorizzazione binaria nel tuo cluster, esegui il seguente comando:

gcloud beta container clusters update CLUSTER_NAME \
    --binauthz-evaluation-mode=DISABLED \
    --location=LOCATION \
    --project=CLUSTER_PROJECT_ID

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster
  • LOCATION: la posizione del cluster
  • CLUSTER_PROJECT_ID: l'ID progetto del cluster

Disattivare il monitoraggio dei criteri basato su controlli in un cluster

Per disattivare la verifica con criteri basati su controlli nel cluster e riattivare l'applicazione utilizzando il criterio di applicazione di Autorizzazione binaria, esegui il seguente comando:

gcloud beta container clusters update CLUSTER_NAME  \
    --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
    --location=LOCATION \
    --project="CLUSTER_PROJECT_ID"

Sostituisci quanto segue:

  • CLUSTER_NAME: il nome del cluster
  • LOCATION: la posizione del cluster
  • CLUSTER_PROJECT_ID: l'ID progetto del cluster

Tieni presente che --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE è equivalente al flag precedente --enable-binauthz.

Elimina il criterio

Per eliminare il criterio, esegui il seguente comando. Non è necessario eliminare il criterio della piattaforma basato su controlli per disattivare il controllo dei criteri basato su controlli.

gcloud beta container binauthz policy delete POLICY_ID \
    --platform=gke \
    --project="POLICY_PROJECT_ID"

Sostituisci quanto segue:

  • POLICY_ID: l'ID del criterio
  • POLICY_PROJECT_ID: l'ID progetto del criterio

Passaggi successivi