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, utilizzerai i seguenti CV controlli per convalidare continuamente i pod in esecuzione per le seguenti condizioni:

  • Directory attendibile: verifica che le immagini associate al pod risiedano in una o più directory attendibili specificate 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. Accedi al tuo Google Cloud account. Se non hai mai utilizzato Google Cloud, crea un account per valutare il rendimento dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. Installa Google Cloud CLI.

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

  4. Per inizializzare gcloud CLI, esegui questo comando:

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

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

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

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  6. Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.

  7. Abilita le API Autorizzazione binaria e Google Kubernetes Engine:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

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

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

  10. Per inizializzare gcloud CLI, esegui questo comando:

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

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico: puoi selezionare qualsiasi progetto su cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l' resourcemanager.projects.create autorizzazione. Scopri come concedere i ruoli.
    • Crea un Google Cloud progetto:

      gcloud projects create PROJECT_ID

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

    • Seleziona il Google Cloud progetto che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del Google Cloud progetto.

  12. Verifica che la fatturazione sia abilitata per il tuo Google Cloud progetto.

  13. Abilita le API Autorizzazione binaria e Google Kubernetes Engine:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l' serviceusage.services.enable autorizzazione. Scopri come concedere i ruoli.

    gcloud services enable container.googleapis.com binaryauthorization.googleapis.com
  14. Installa lo strumento a riga di comando kubectl.
  15. Se le policy di Autorizzazione binaria e i cluster GKE si trovano in progetti diversi, assicurati che Autorizzazione binaria sia abilitata in entrambi i progetti.

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

  • Per creare un cluster con la policy della piattaforma basata su controlli abilitata, 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 è archiviata la policy
    • POLICY_ID: l'ID della policy
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster

    Attendi la creazione del cluster.

  • Per aggiornare un cluster esistente con le policy basate su controlli abilitate, 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 è archiviata la policy
    • POLICY_ID: l'ID della policy
    • CLUSTER_PROJECT_ID: l'ID progetto del cluster

    Attendi l'aggiornamento del cluster.

Esegui il deployment di un'immagine

  1. Recupera le credenziali 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, la 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 poche ore.

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

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

Il log per il 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 della policy, inclusi i seguenti campi:

  • policyName: una policy della piattaforma che la 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 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 soddisfatto il controllo di aggiornamento, quest'ultimo non viene visualizzato nel log.

Libera spazio

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

In questa sezione viene descritto come liberare spazio dal monitoraggio della CV configurato in precedenza in questa guida.

Puoi disabilitare il monitoraggio della CV o sia l'Autorizzazione binaria sia la CV nel cluster.

Disabilita Autorizzazione binaria in un cluster

Per disabilitare sia la CV sia l'applicazione 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 delle policy basate su controlli in un cluster

Per disabilitare la CV con le policy basate su controlli nel cluster e riabilitare l'applicazione utilizzando la policy di applicazione di Autorizzazione binaria, esegui questo 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 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 la policy

Per eliminare la policy, esegui questo comando. Non è necessario eliminare la policy della piattaforma basata su controlli per disabilitare il controllo delle policy basate 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