Aggiorna un criterio di Autorizzazione binaria

Questo documento descrive come escludere le immagini nei Criteri di Autorizzazione binaria.

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

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

    Go to project selector

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

  4. Abilita le API Artifact Registry, Binary Authorization.

    Abilita le API

  5. Installa Google Cloud CLI.
  6. Per initialize gcloud CLI, esegui questo comando:

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

    Go to project selector

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

  9. Abilita le API Artifact Registry, Binary Authorization.

    Abilita le API

  10. Installa Google Cloud CLI.
  11. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  12. Se non utilizzi Cloud Shell, installa kubectl.

Crea un cluster con Autorizzazione binaria abilitata

Creare 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.

Console Google Cloud

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

    Vai a GKE

    Nella console viene visualizzato un elenco dei cluster GKE nel progetto Google Cloud.

  2. Fai clic su Crea cluster.

  3. Inserisci test-cluster nel campo Nome.

    Campo del 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 Abilita Autorizzazione binaria.

    Abilita l'opzione Autorizzazione binaria

  8. Seleziona Solo applicazione forzata.

  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 il criterio predefinito

Per impostazione predefinita, il criterio di Autorizzazione binaria è configurato in modo da consentire il deployment di tutte le immagini container.

Console Google Cloud

Per visualizzare il criterio predefinito:

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

    Vai ad Autorizzazione binaria

    Nella console vengono visualizzati i dettagli del criterio.

  2. Fai clic su Modifica criterio.

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

gcloud

Per visualizzare il criterio predefinito, esporta il file YAML del criterio:

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 il criterio predefinito, recuperalo 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 immagini esenti

Questa sezione descrive come modificare il criterio per escludere le immagini e impedire il deployment di tutte le altre immagini.

Console Google Cloud

Per modificare il criterio:

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

    Vai ad Autorizzazione binaria

  2. Fai clic su Modifica criterio.

  3. Seleziona Non consentire tutte le immagini.

  4. In Immagini esenti dalle regole di deployment, espandi Percorsi immagine.

  5. Fai clic su Aggiungi percorsi immagine.

    Container Registry

    In Nuovo percorso immagine, incolla il percorso seguente da un repository di Container Registry:

    gcr.io/google-samples/hello-app:1.0
    

    Artifact Registry

    In Nuovo percorso 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 Save Policy (Salva criterio).

gcloud

Per modificare il criterio in modo da consentire immagini di esempio da Container Registry e Artifact Registry, procedi nel seguente modo:

  1. Esporta il file YAML del criterio:

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

    Per escludere le seguenti immagini di esempio da Container Registry e Artifact Registry, modifica il file YAML del criterio come segue:

    admissionWhitelistPatterns:
    - namePattern: gcr.io/google-samples/hello-app:1.0
    - 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 del criterio in Autorizzazione binaria:

    gcloud container binauthz policy import /tmp/policy.yaml
    

API REST

Per modificare il criterio:

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

    cat > /tmp/policy.json << EOM
    {
      "name": "projects/${PROJECT_ID}/policy",
      "admissionWhitelistPatterns": [
        {
          "namePattern": "gcr.io/google-samples/hello-app:1.0"
        },
        {
          "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 il criterio aggiornato 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 il criterio

Per testare il criterio eseguendo il deployment dell'immagine che hai aggiunto alla lista consentita di Exempt image, segui questi passaggi:

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

    Console Google Cloud

    Esegui il deployment di un'immagine esente:

    1. Vai alla pagina Cluster di GKE nella console Google 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 il percorso dell'immagine container.

      Container Registry

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

      gcr.io/google-samples/hello-app:1.0
      

      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

    Container Registry

    Esegui il deployment dell'immagine da Container Registry:

    kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
    

    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 sia stato consentito il deployment dell'immagine:

    Console Google Cloud

    Per verificare che sia stato eseguito il deployment dell'immagine:

    1. Vai alla pagina GKE.

    Vai a GKE

    1. Vai alla pagina Carichi di lavoro.

    Il carico di lavoro hello-server viene visualizzato con un'icona verde, che indica che è in esecuzione.

    kubectl

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

    kubectl get pods
    

    Vedi l'immagine in esecuzione.

  3. Elimina il pod.

    Console Google Cloud

    Nella pagina Carichi di lavoro di GKE:

    1. Seleziona il carico di lavoro 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
    

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 console Google Cloud.

    Vai a GKE

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

gcloud

Per eliminare il cluster, inserisci questo comando:

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

Passaggi successivi