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

Scopri come iniziare a utilizzare la convalida continua (CV) di Autorizzazione binaria con i criteri basati su check. In questa guida rapida, utilizzerai i seguenti controlli del CV per convalidare continuamente i pod in esecuzione in base alle condizioni seguenti:

  • Directory attendibile: controlla che le immagini associate al pod siano state create da una o più directory attendibili specificate nel criterio.
  • Aggiornamento delle immagini: controlla che le immagini del pod siano state caricate entro un numero di giorni specificato nel criterio.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Abilita le API Binary Authorization and Google Kubernetes Engine.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  7. Installa Google Cloud CLI.
  8. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  9. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  10. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  11. Abilita le API Binary Authorization and Google Kubernetes Engine.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  12. Installa lo strumento a riga di comando kubectl.
  13. 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.

Crea un criterio della piattaforma

Per configurare un criterio della piattaforma GKE CV, segui questi passaggi:

  1. Crea il file YAML dei criteri 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
    

    Questo controllo della directory attendibile verifica le 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 il criterio 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 del criterio

Crea o aggiorna un cluster

Per abilitare il CV su un cluster, puoi creare un nuovo cluster o aggiornarne uno esistente.

  • Per creare un cluster con il criterio della piattaforma basato su controlli 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 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

    Attendi il completamento della creazione del cluster.

  • Per aggiornare un cluster esistente con criteri basati sui 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 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

    Attendi che il cluster venga aggiornato.

Esegui il deployment di un'immagine

  1. Richiedi la credenziale per kubectl:

    gcloud container clusters get-credentials CLUSTER_NAME
    
  2. Esegui 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 soddisfa il controllo di aggiornamento perché è stata caricata nel repository negli ultimi 30 giorni. Tuttavia, l'immagine non soddisfa il controllo della directory attendibile perché non si trova in us-central1-docker.pkg.dev/my-project/my-directory. Di conseguenza, il CV genera TrustedDirectoryCheck voci di log in Cloud Logging.

Visualizza i log

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

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

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 dei criteri, inclusi i seguenti campi:

  • policyName: una norma della piattaforma che il 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 displayName per il set di controlli
    • checkSetIndex: l'indice del controllo impostato nel criterio
    • checkName: nome del controllo
    • checkIndex: l'indice del controllo nel set di controlli
    • verdict: l'esito 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 soddisfatto il controllo di aggiornamento, questo 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 ripulire il monitoraggio del CV configurato in precedenza in questa guida.

Puoi disabilitare il monitoraggio CV o sia Autorizzazione binaria sia CV nel cluster.

Disabilita Autorizzazione binaria in un cluster

Per disabilitare l'applicazione sia di CV che di Autorizzazione binaria nel 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 località del cluster
  • CLUSTER_PROJECT_ID: l'ID progetto del cluster

Disabilita il monitoraggio dei criteri basati su controlli in un cluster

Per disabilitare CV con criteri basati su controllo nel cluster e riabilitare l'applicazione forzata utilizzando il criterio di Autorizzazione binaria, esegui il comando seguente:

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 località 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 questo comando. Non è necessario eliminare il criterio della piattaforma basata su controlli per disabilitare il controllo dei criteri basati 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