Aggiorna una policy di Autorizzazione binaria

Questo documento descrive come esentare le immagini nelle policy di Autorizzazione binaria.

In questo documento, aggiorni la policy per esentare le immagini container in Artifact Registry dall'applicazione dell'Autorizzazione binaria e imposti la regola predefinita in modo da impedire il deployment di tutti gli altri container.

Prima di iniziare

  1. Accedi al tuo Google Cloud account. 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 senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  4. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. Installa 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

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

  10. Enable the Artifact Registry, Binary Authorization APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  11. Installa 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. Se non utilizzi Cloud Shell, installa kubectl.

Crea un cluster con Autorizzazione binaria abilitata

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.

Google Cloud Console

  1. Vai alla pagina Cluster di GKE nella Google Cloud console.

    Vai a GKE

    La console mostra un elenco di cluster GKE nel tuo Google Cloud progetto.

  2. Fai clic su Crea cluster.

  3. Inserisci test-cluster nel campo Nome.

    Campo Nome nel modello di cluster standard

  4. Seleziona A livello di zona nelle opzioni Tipo di località.

  5. Seleziona us-central1-a dall'elenco a discesa Zona.

  6. Fai clic sul link Sicurezza per visualizzare il riquadro Sicurezza.

  7. Nel riquadro Sicurezza, seleziona Attiva Autorizzazione binaria.

    Attiva l'opzione Autorizzazione binaria

  8. Seleziona Solo applicazione.

  9. Fai clic su Crea.

gcloud

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

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

Visualizza la policy predefinita

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

Google Cloud Console

Per visualizzare la policy predefinita:

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

    Vai ad Autorizzazione binaria

    La console mostra i dettagli della policy.

  2. Fai clic su Modifica policy.

  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:

gcloud container binauthz policy export

Per impostazione predefinita, il file ha i seguenti contenuti:

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

API REST

Per visualizzare la policy predefinita, recuperala in formato JSON come segue:

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"

L'API REST restituisce quanto segue:

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

Consenti solo le immagini esentate

Questa sezione descrive come modificare la policy per esentare le immagini e impedire il deployment di tutte le altre immagini.

Google Cloud Console

Per modificare la policy:

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

    Vai ad Autorizzazione binaria

  2. Fai clic su Modifica policy.

  3. Seleziona Non consentire tutte le immagini.

  4. In Immagini esentate dalle regole di deployment, espandi Percorsi delle immagini.

  5. Fai clic su Aggiungi percorsi delle immagini.

    Artifact Registry

    In Nuovo percorso dell'immagine, incolla il seguente percorso da un repository di Artifact Registry:

    us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    
  6. Fai clic su Fine per salvare il percorso dell'immagine.

  7. Fai clic su Salva policy.

gcloud

Per modificare la policy in modo da consentire le immagini di esempio da Artifact Registry:

  1. Esporta il file YAML della policy:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. In un editor di testo, modifica evaluationMode da ALWAYS_ALLOW a ALWAYS_DENY e aggiungi le immagini esentate a admissionWhitelistPatterns.

    Per esentare le seguenti immagini di esempio da Artifact Registry, modifica il file YAML della policy come segue:

    admissionWhitelistPatterns:
    - namePattern: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/<var>PROJECT_ID</var>/policy
    
  3. Importa di nuovo il file YAML della policy in Autorizzazione binaria:

    gcloud container binauthz policy import /tmp/policy.yaml
    

API REST

Per modificare la policy:

  1. Crea un file di testo con la policy aggiornata in formato JSON:

    cat > /tmp/policy.json << EOM
    {
      "name": "projects/${PROJECT_ID}/policy",
      "admissionWhitelistPatterns": [
        {
          "namePattern": "us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0"
        }
      ],
      "globalPolicyEvaluationMode": "ENABLE",
      "defaultAdmissionRule": {
        "evaluationMode": "ALWAYS_DENY",
        "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
      }
    }
    EOM
    
  2. Invia la policy aggiornata 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"
    

Testa la policy

Per testare la policy eseguendo il deployment dell'immagine che hai aggiunto all'elenco consentito Exempt image:

  1. Esegui il deployment di un'immagine esentata nel cluster.

    Google Cloud Console

    Esegui il deployment di un'immagine esentata:

    1. Vai alla pagina Cluster di GKE nella Google Cloud console.

      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 il percorso dell'immagine container.

      Artifact Registry

      Per eseguire il deployment di un'immagine da Artifact Registry, inserisci quanto segue:

      us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
      
    5. Fai clic su Continua.

    6. Inserisci hello-server nel campo Nome applicazione.

    7. Fai clic su Esegui il deployment.

    kubectl

    Artifact Registry

    Esegui il deployment dell'immagine da Artifact Registry:

    kubectl run hello-server --image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 --port 8080
    
  2. Verifica che il deployment dell'immagine sia stato consentito:

    Google Cloud Console

    Per verificare che l'immagine sia stata sottoposta a deployment:

    1. Vai alla pagina GKE.

    Vai a GKE

    1. Vai alla pagina Workload.

    Il workload hello-server viene visualizzato con un'icona verde, a indicare che è in esecuzione.

    kubectl

    Per verificare che il deployment dell'immagine sia stato consentito, inserisci il seguente comando:

    kubectl get pods
    

    Vedi l'immagine in esecuzione.

  3. Elimina il pod.

    Google Cloud Console

    Nella pagina Workload di GKE:

    1. Seleziona il workload hello-server.

    2. Fai clic su Elimina.

    3. Quando ti viene chiesto di eliminare le risorse, fai clic su Elimina.

    kubectl

    kubectl delete pod hello-server
    

Libera spazio

Per evitare che al tuo Google Cloud account 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 Google Cloud console.

    Vai a GKE

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

gcloud

Per eliminare il cluster, inserisci il seguente comando:

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

Passaggi successivi