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

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

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

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 Binary Authorization and Google Kubernetes Engine APIs:

    gcloud services enable container.googleapis.com binaryauthorization.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 Binary Authorization and Google Kubernetes Engine APIs:

    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 relativo alla piattaforma

Per configurare un criterio della piattaforma CV GKE, 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 criterio verifica le seguenti condizioni:

    • I pod vengono 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 giorno.

  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 attivare la CV su un cluster, puoi creare un nuovo cluster o aggiornarne uno esistente.

  • Per creare un cluster con il criterio della piattaforma basato su controllo abilitato, esegui seguente 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 il criterio viene archiviato
    • 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 il seguente 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 il criterio viene archiviato
    • 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. Ottieni 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
    

    Immagine us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 soddisfa il controllo di aggiornamento perché è stato caricato nel repository negli ultimi 30 giorni. ma l'immagine non soddisfa i requisiti controllo della directory perché non è in us-central1-docker.pkg.dev/my-project/my-directory. Di conseguenza, CV produce voci di log TrustedDirectoryCheck in Cloud Logging.

Visualizza 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 di 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 delle norme, tra cui seguenti campi:

  • policyName: una norma della piattaforma utilizzata da CV quando è stata identificata 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 set di controlli nel criterio
    • checkName: il 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é la verifica non è stata soddisfatta.

Alcuni controlli possono includere informazioni aggiuntive che possono aiutarti a capire perché. la verifica non è stata soddisfatta.

Poiché l'immagine ha soddisfatto il controllo dell'aggiornamento, questo non viene visualizzato nel log.

Esegui la pulizia

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

In questa sezione viene descritto come eseguire la pulizia del monitoraggio del CV configurate in precedenza in questa guida.

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

Disabilita Autorizzazione binaria in un cluster

Per disattivare l'applicazione sia di CV sia di Autorizzazione di binari 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

Disabilita il monitoraggio dei criteri basato su controlli in un cluster

a disabilitare la CV con criteri basati su controllo nel cluster riattiva 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 --enable-binauthz precedente.

Elimina il criterio

Per eliminare il criterio, esegui questo 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