Guida rapida: monitora la sicurezza dei pod con la convalida continua

Scopri come iniziare a utilizzare la convalida continua (CV) di Autorizzazione binaria con le policy basate su controlli. In questa guida rapida, utilizzi i seguenti controlli CV per convalidare continuamente i pod in esecuzione per le seguenti condizioni:

  • Directory attendibile: verifica che le immagini associate al pod si trovino in una o più directory attendibili che specifichi nella policy.
  • Aggiornamento delle immagini: verifica che le immagini del pod siano state caricate entro un numero di giorni specificato nella policy.

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. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. 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.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  8. Install the Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere alla gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. 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.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  14. Installa lo strumento a riga di comando kubectl.
  15. 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.
  16. Crea una policy della piattaforma

    Per configurare una policy della piattaforma GKE CV, procedi nel seguente modo:

    1. Crea il file YAML della policy della piattaforma:

      cat << EOF > /tmp/my-policy.yaml
      gkePolicy:
        checkSets:
        - checks:
          - trustedDirectoryCheck:
              trustedDirPatterns:
              - us-central1-docker.pkg.dev/my-project/my-directory
            displayName: My trusted directory check
          - imageFreshnessCheck:
              maxUploadAgeDays: 30
            displayName: My image freshness check
          displayName: My trusted directory and image freshness check set
      EOF
      

      Questa policy verifica la presenza delle seguenti condizioni:

      • Le immagini dei pod sono archiviate nel repository Artifact Registry denominato us-central1-docker.pkg.dev/my-project/my-directory.

      • Le immagini dei pod sono state caricate nei repository Artifact Registry o Container Registry negli ultimi 30 giorni.

    2. Crea la policy della piattaforma:

      gcloud beta container binauthz policy create POLICY_ID \
          --platform=gke \
          --policy-file=/tmp/my-policy.yaml \
          --project=POLICY_PROJECT_ID
      

      Sostituisci quanto segue:

      • POLICY_ID: un ID a tua scelta
      • POLICY_PROJECT_ID: l'ID progetto della policy

    Crea o aggiorna un cluster

    Per abilitare CV su un cluster, puoi creare un nuovo cluster o aggiornare un cluster esistente.

    • Per creare un cluster con il criterio della piattaforma basato sul controllo abilitato, esegui questo comando:

      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
      

      Sostituisci quanto segue:

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

      Attendi la creazione del cluster.

    • Per aggiornare un cluster esistente con i criteri basati su controlli abilitati, esegui questo comando.

      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
      

      Sostituisci quanto segue:

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

      Attendi l'aggiornamento del cluster.

    Esegui il deployment di un'immagine

    1. Recupera la credenziale per kubectl:

      gcloud container clusters get-credentials CLUSTER_NAME
      
    2. Eseguire il deployment di un'immagine:

      kubectl run hello-app \
          --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      

      L'immagine us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 supera il controllo di aggiornamento perché è stata caricata nel repository negli ultimi 30 giorni. Tuttavia, l'immagine non supera il controllo della directory attendibile perché non si trova in us-central1-docker.pkg.dev/my-project/my-directory. Di conseguenza, CV produce voci di log TrustedDirectoryCheck in Cloud Logging.

    Visualizzare i log

    La voce di log viene visualizzata in Cloud Logging entro 24 ore dal deployment del pod, ma può essere visualizzata anche in un paio d'ore.

    Per visualizzare il log in Cloud Logging, utilizza il seguente filtro:

    logName:"binaryauthorization.googleapis.com%2Fcontinuous_validation"
    "policyName"
    

    Il log del pod hello-app è simile a quello riportato di seguito. Alcuni campi potrebbero essere diversi a seconda dell'ID progetto, del nome del cluster e così via.

    {
      "insertId": "637c2de7-0000-2b64-b671-24058876bb74",
      "jsonPayload": {
        "podEvent": {
          "endTime": "2022-11-22T01:14:30.430151Z",
          "policyName": "projects/1234567890/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": "Default check set",
                  "checkSetIndex": "0",
                  "checkName": "My trusted directory check",
                  "verdict": "NON_CONFORMANT",
                  "checkType": "TrustedDirectoryCheck",
                  "checkIndex": "0"
                }
              ],
              "image": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
            }
          ],
          "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-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"
    }
    

    La voce di log mostra informazioni sulla violazione delle norme, inclusi i seguenti campi:

    • policyName: una norma della piattaforma che CV utilizzava quando ha identificato la violazione
    • checkResults: un blocco di risultati che include i seguenti campi:

      • explanation: un messaggio di errore
      • checkSetName: il valore di displayName per il set di controlli
      • checkSetIndex: l'indice del set di controlli nella policy
      • checkName: il nome del controllo
      • checkIndex: l'indice del controllo nel set di controlli
      • verdict: il verdetto che ha generato la voce di log, in questo caso NOT_CONFORMANT perché il controllo non è stato soddisfatto.

    Alcuni controlli possono includere informazioni aggiuntive che possono aiutarti a capire perché il controllo non è stato soddisfatto.

    Poiché l'immagine ha superato il controllo di aggiornamento, quest'ultimo non viene visualizzato nel log.

    Esegui la pulizia

    Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, elimina il progetto Google Cloud con le risorse.

    Questa sezione descrive come eseguire la pulizia del monitoraggio delle conversioni che hai configurato in precedenza in questa guida.

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

    Disabilitare Autorizzazione binaria in un cluster

    Per disattivare l'applicazione sia di CV che di Autorizzazione binaria nel tuo cluster, esegui questo 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

    Disabilita il monitoraggio delle policy basato sui controlli in un cluster

    Per disattivare CV 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 la policy

    Per eliminare la policy, esegui questo comando. Non è necessario eliminare la policy della piattaforma basata su controlli per disattivare il controllo delle policy basato su controlli.

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

    Sostituisci quanto segue:

    • POLICY_ID: l'ID della policy
    • POLICY_PROJECT_ID: l'ID progetto della policy

    Passaggi successivi