Configurare 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, visualizzerai e configurerai la regola predefinita nel criterio. La regola predefinita consente il deployment di tutte le immagini. Per testarla, esegui il deployment di un'immagine container su un cluster Google Kubernetes Engine (GKE). Poi imposti la regola predefinita in modo da impedire il deployment di tutte le immagini e tenti di eseguire il deployment di un'immagine.

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. 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. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

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

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

  6. Installa Google Cloud CLI.

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

  8. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  9. 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

  10. If you're using an existing project for this guide, verify that you have the permissions required to complete this guide. If you created a new project, then you already have the required permissions.

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

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

  13. Installa Google Cloud CLI.

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

  15. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  16. Installa kubectl.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per configurare un criterio di Autorizzazione binaria con GKE, chiedi all'amministratore di concederti i seguenti ruoli IAM sul progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

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

L'Autorizzazione binaria funziona con i cluster Autopilot o Standard.

Google Cloud Console

I seguenti passaggi configurano un cluster Autopilot.

  1. Nella Google Cloud console, 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 riquadro Sicurezza.

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

    6. Seleziona Applica solo.

    7. Fai clic su Avanti e poi su Avanti:esamina 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 abilitato.

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.

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

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

Il comando produce il seguente output:

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

Testare la policy di applicazione

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

Per questa guida rapida, utilizzerai 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!".

Google Cloud Console

Per testare la policy:

  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. Inserisci hello-server nel campo Nome deployment.

  4. Fai clic su Avanti: dettagli del container.

  5. Seleziona Immagine container esistente.

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

  7. Fai clic su Esegui il deployment.

kubectl

Per testare la policy:

  1. Aggiorna il file kubeconfig locale:

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

    In questo modo 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.

Google Cloud Console

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

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 sottoposta a deployment:

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 continuare con il passaggio successivo:

Google Cloud Console

Per eliminare il deployment:

  1. Torna alla pagina Workload di GKE in Google Cloud console.

    Vai a GKE

  2. Seleziona il workload hello-server.

  3. Fai clic su Elimina.

kubectl

Per eliminare il deployment:

kubectl delete deployment hello-server

Configurare la policy di applicazione in modo da non consentire tutte le immagini

Ora modifica la policy in modo da bloccare anziché consentire il deployment di tutte le 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. Fai clic su Salva policy.

gcloud

Per modificare la policy:

  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.

    Il file YAML della policy dovrebbe essere simile al seguente:

    globalPolicyEvaluationMode: ENABLE
    defaultAdmissionRule:
      evaluationMode: ALWAYS_DENY
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
    name: projects/PROJECT_ID/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",
      "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"
    

Riapprova la policy

Esegui di nuovo il test della policy eseguendo il deployment di un'immagine container di esempio nel cluster. Questa volta, l'Autorizzazione binaria blocca il deployment dell'immagine.

Google Cloud Console

Esegui il deployment dell'immagine:

  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. Inserisci hello-server nel campo Nome deployment.

  4. Fai clic su Avanti: dettagli del container.

  5. Seleziona Immagine container esistente.

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

  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 la policy sia stata bloccata:

Google Cloud Console

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

Torna alla pagina Workload di GKE in Google Cloud console.

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 il seguente 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.

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:

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

Passaggi successivi