Configura un criterio di autorizzazione binaria con GKE

Questa guida rapida mostra come configurare e testare una regola di base in un criterio di Autorizzazione binaria.

In questa guida rapida, visualizzi e configuri la regola predefinita nel criterio. La regola predefinita consente il deployment di tutte le immagini. Per testare questa funzionalità, esegui il deployment di un'immagine container su un cluster Google Kubernetes Engine (GKE). Quindi imposta la regola predefinita per impedire il deployment di tutte le immagini e tenta di eseguire il deployment di un'immagine.

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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

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

  7. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

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

  13. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  14. Installa kubectl.
  15. Crea un cluster con l'applicazione di Autorizzazione binaria abilitata

    Ora crea un cluster GKE con Autorizzazione binaria abilitata. Questo è il cluster in cui vuoi che vengano eseguite le immagini container di cui hai eseguito il deployment.

    Autorizzazione binaria funziona con i cluster Autopilot o Standard.

    Console Google Cloud

    I seguenti passaggi configurano un cluster Autopilot.

    1. Nella console Google Cloud , vai alla pagina Cluster Kubernetes di GKE:

      Vai a GKE

    2. Fai clic su Crea.

    3. In Crea un cluster Autopilot, procedi nel seguente modo:

      1. Nel campo Nome, inserisci test-cluster.

      2. Nel menu Regione, seleziona us-central1.

      3. Espandi la sezione Impostazioni avanzate.

      4. Fai clic sul link Sicurezza per visualizzare il pannello Sicurezza.

      5. Nel riquadro Sicurezza, seleziona la casella di controllo Attiva Autorizzazione binaria.

      6. Seleziona Solo applicazione forzata.

      7. Fai clic su Avanti e poi su Avanti:rivedi e crea.

      8. Per iniziare a creare il cluster, fai clic su Crea.

    gcloud

    Esegui gcloud container clusters create con il flag --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE attivato.

    gcloud container clusters create \
        --binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
        --zone us-central1-a \
        test-cluster
    

    La creazione di un cluster può richiedere diversi minuti.

    Policy predefinita

    Per impostazione predefinita, la policy di Autorizzazione binaria è configurata per consentire il deployment di tutte le immagini container.

    Console Google Cloud

    Per visualizzare la policy predefinita, segui questi passaggi:

    1. Vai alla pagina Autorizzazione binaria nella console Google Cloud .

      Vai all'autorizzazione binaria

      La console mostra i dettagli della policy.

    2. Fai clic su Modifica criterio.

    3. In Regola predefinita del progetto, l'opzione Consenti tutte le immagini è selezionata.

    gcloud

    Per visualizzare la policy predefinita, esporta il file YAML della policy nel seguente modo:

    gcloud container binauthz policy export
    

    Per impostazione predefinita, il file contiene quanto segue:

    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_ALLOW
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/PROJECT_ID/policy
    

    API REST

    Per visualizzare la norma predefinita, recuperala in formato JSON nel seguente modo:

    curl \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "x-goog-user-project: ${PROJECT_ID}" \
        "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
    

    Il comando produce il seguente output:

    {
      "name": "projects/PROJECT_ID/policy",
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_ALLOW",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    

    Testa il criterio di applicazione

    Puoi testare il criterio di applicazione provando a eseguire il deployment di un'immagine container di esempio nel cluster.

    Per questa guida rapida, utilizzi l'immagine container di esempio che si trova nel percorso us-docker.pkg.dev/google-samples/containers/gke/hello-app in Artifact Registry. Si tratta di un'immagine container pubblica creata da Google che contiene un'applicazione di esempio "Hello, World!".

    Console Google Cloud

    Per testare la policy:

    1. Vai alla pagina Cluster di GKE nella consoleGoogle Cloud .

      Vai a GKE

    2. Fai clic su Esegui il deployment.

      La console ti chiede di inserire i dettagli del deployment.

    3. Seleziona Immagine container esistente.

    4. Inserisci us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 come percorso dell'immagine container.

    5. Fai clic su Continua.

    6. Inserisci hello-server nel campo Nome applicazione.

    7. Fai clic su Esegui il deployment.

    kubectl

    Per testare la policy:

    1. Aggiorna il file locale kubeconfig:

      gcloud container clusters get-credentials \
          --zone us-central1-a \
          test-cluster
      

      Vengono fornite le credenziali e le informazioni sull'endpoint necessarie per accedere al cluster in GKE.

    2. Esegui il deployment dell'immagine:

      kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
      

    Ora verifica che il deployment sia stato consentito da Autorizzazione binaria.

    Console Google Cloud

    Per verificare che l'immagine sia stata implementata, vai alla pagina Workload di GKE nella console Google Cloud .

    Vai a GKE

    Viene visualizzato un workload per il deployment con un'icona verde che indica che l'immagine è stata sottoposta a deployment correttamente.

    kubectl

    Per verificare che l'immagine sia stata implementata:

    kubectl get pods
    

    Il comando stampa un messaggio simile al seguente, che indica che il deployment è andato a buon fine:

    NAME                            READY     STATUS    RESTARTS   AGE
    hello-server-579859fb5b-h2k8s   1/1       Running   0          1m
    

    Assicurati di eliminare il deployment per poter procedere al passaggio successivo:

    Console Google Cloud

    Per eliminare il deployment:

    1. Torna alla pagina Workload di GKE nella consoleGoogle Cloud .

      Vai a GKE

    2. Seleziona il workload hello-server.

    3. Fai clic su Elimina.

    kubectl

    Per eliminare il deployment:

    kubectl delete deployment hello-server
    

    Configura il criterio di applicazione in modo da non consentire tutte le immagini

    Ora modifica la policy per bloccare anziché consentire il deployment di tutte le immagini.

    Console Google Cloud

    Per modificare la policy:

    1. Torna alla pagina Autorizzazione binaria nella console Google Cloud .

      Vai all'autorizzazione binaria

    2. Fai clic su Modifica criterio.

    3. Seleziona Non consentire alcuna immagine.

    4. Fai clic su Save Policy (Salva criterio).

    gcloud

    Per modificare la policy:

    1. Esporta il file YAML dei criteri:

      gcloud container binauthz policy export  > /tmp/policy.yaml
      
    2. In un editor di testo, modifica evaluationMode da ALWAYS_ALLOW a ALWAYS_DENY.

      Il file YAML della policy dovrebbe avere il seguente aspetto:

      globalPolicyEvaluationMode: ENABLE
      defaultAdmissionRule:
        evaluationMode: ALWAYS_DENY
        enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      name: projects/PROJECT_ID/policy
      
    3. Importa di nuovo il file YAML dei criteri in Autorizzazione binaria:

      gcloud container binauthz policy import /tmp/policy.yaml
      

    API REST

    Per modificare la policy:

    1. Crea un file di testo con il criterio aggiornato in formato JSON:

      cat > /tmp/policy.json << EOM
      {
        "name": "projects/${PROJECT_ID}/policy",
        "globalPolicyEvaluationMode": "ENABLE",
        "defaultAdmissionRule": {
          "evaluationMode": "ALWAYS_DENY",
          "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
        }
      }
      EOM
      
    2. Invia le norme aggiornate all'API REST:

      curl -X PUT \
          -H "Content-Type: application/json" \
          -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
          -H "x-goog-user-project: ${PROJECT_ID}" \
          --data-binary @/tmp/policy.json  \
          "https://binaryauthorization.googleapis.com/v1/projects/${PROJECT_ID}/policy"
      

    Testare di nuovo la policy

    Ancora una volta, testa il criterio eseguendo il deployment di un'immagine container di esempio nel cluster. Questa volta, Autorizzazione binaria impedisce il deployment dell'immagine.

    Console Google Cloud

    Esegui il deployment dell'immagine:

    1. Vai alla pagina Cluster di GKE nella consoleGoogle Cloud .

      Vai a GKE

    2. Fai clic su Esegui il deployment.

      La console ti chiede di inserire i dettagli del deployment.

    3. Seleziona Immagine container esistente.

    4. Inserisci us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 come percorso dell'immagine container.

    5. Fai clic su Continua.

    6. Inserisci hello-server nel campo Nome applicazione.

    7. Fai clic su Esegui il deployment.

    kubectl

    Esegui il deployment dell'immagine:

    kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
    

    Ora puoi verificare che il criterio sia stato bloccato:

    Console Google Cloud

    Per verificare che l'immagine non sia stata eseguita il deployment:

    Torna alla pagina Workload di GKE nella consoleGoogle Cloud .

    Vai a GKE

    Il workload per l'immagine container viene visualizzato con un'icona rossa che indica che il deployment dell'immagine non è riuscito.

    kubectl

    Per verificare che l'immagine non sia stata sottoposta a deployment, esegui questo comando:

    kubectl get pods
    

    Il comando stampa il seguente messaggio, che indica che l'immagine non è stata sottoposta a deployment:

    No resources found.
    

    Puoi ottenere ulteriori dettagli sul deployment:

    kubectl get event --template \
    '{{range.items}}{{"\033[0;36m"}}{{.reason}}:{{"\033[0m"}}{{.message}}{{"\n"}}{{end}}'
    

    Viene visualizzata una risposta simile alla seguente:

    FailedCreate: Error creating: pods POD_NAME is forbidden: admission webhook "imagepolicywebhook.image-policy.k8s.io" denied the request: Image IMAGE_NAME denied by Binary Authorization default admission rule. Denied by always_deny admission rule
    

    In questo output:

    • POD_NAME: il nome del pod.
    • IMAGE_NAME: il nome dell'immagine.
    • ATTESTOR_NAME: il nome dell'attestatore.

    Esegui la pulizia

    Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questa pagina, segui questi passaggi.

    Elimina il cluster che hai creato in GKE:

    Console

    Per eliminare il cluster:

    1. Vai alla pagina Cluster di GKE nella consoleGoogle Cloud .

      Vai a GKE

    2. Seleziona il cluster test-cluster e fai clic su Elimina.

    gcloud

    Per eliminare il cluster:

    gcloud container clusters delete \
        --zone=us-central1-a \
        test-cluster
    

    Passaggi successivi