Aggiorna un criterio di autorizzazione binaria

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

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

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

    Console Google Cloud

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

      Vai a GKE

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

    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 pannello Sicurezza.

    7. Nel pannello Sicurezza, seleziona Attiva Autorizzazione binaria.

      Attiva 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 attivato.

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

    Visualizzare la 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:

    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/<var>PROJECT_ID</var>/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"
    

    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 esenti

    Questa sezione descrive come modificare il criterio per esentare le immagini e impedire la distribuzione di tutte le altre 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. Nella sezione Immagini esentate dalle regole di deployment, espandi Percorsi delle immagini.

    5. Fai clic su Aggiungi percorsi delle immagini.

      Artifact Registry

      In Nuovo percorso immagine, incolla il seguente percorso da un repository 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 le immagini di esempio da Artifact Registry, segui questi passaggi:

    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 e aggiungi le immagini esenti 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 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",
        "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 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 la policy

    Per testare la policy eseguendo il deployment dell'immagine che hai aggiunto alla lista consentita Exempt image, svolgi le seguenti operazioni:

    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 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 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:

      Console Google Cloud

      Per verificare che l'immagine sia stata implementata:

      1. Vai alla pagina GKE.

      Vai a GKE

      1. Vai alla pagina Workload.

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

      kubectl

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

      kubectl get pods
      

      Vedi l'immagine in esecuzione.

    3. Elimina il pod.

      Console Google Cloud

      Nella pagina Workload 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 consoleGoogle 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