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, vedrai e configurerai la regola predefinita nel criterio. La regola predefinita consente il deployment di tutte le immagini. Per eseguire il test, esegui il deployment di un'immagine container in un cluster Google Kubernetes Engine (GKE). Successivamente, imposterai la regola predefinita per non consentire il deployment di tutte le immagini e tentare di eseguire il deployment di un'immagine.

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. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  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. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

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

Crea un cluster con l'applicazione forzata di Autorizzazione binaria abilitata

Ora creerai 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 cluster Autopilot o Standard.

Console Google Cloud

I passaggi seguenti 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, segui questi passaggi:

    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 Enforce-only (Solo applicazione forzata).

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

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, è selezionata l'opzione Consenti tutte le immagini.

gcloud

Per visualizzare il criterio predefinito, esporta il file YAML del criterio 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 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"

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, utilizzerai l'immagine container di esempio che si trova nel percorso gcr.io/google-samples/hello-app in Container Registry. Questa è un'immagine container pubblica creata da Google che contiene un'applicazione di esempio "Hello World!".

Console Google Cloud

Per testare il criterio:

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

    Vai a GKE

  2. Fai clic su Esegui il deployment.

    La console richiede di inserire i dettagli del deployment.

  3. Seleziona Immagine container esistente.

  4. Inserisci gcr.io/google-samples/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 il criterio:

  1. Aggiorna il file kubeconfig locale:

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

    Fornisce le credenziali e le informazioni sugli endpoint necessari per accedere al cluster in GKE.

  2. Esegui il deployment dell'immagine:

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

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

Console Google Cloud

Per verificare di aver eseguito il deployment dell'immagine, vai alla pagina Carichi di lavoro di GKE nella console Google Cloud.

Vai a GKE

Viene visualizzato un carico di lavoro per il deployment con un'icona verde che indica che il deployment dell'immagine è stato eseguito correttamente.

kubectl

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

kubectl get pods

Il comando stampa un messaggio simile al seguente, che indica che il deployment è riuscito:

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:

Console Google Cloud

Per eliminare il deployment:

  1. Torna alla pagina Carichi di lavoro di GKE nella console Google Cloud.

    Vai a GKE

  2. Seleziona il carico di lavoro hello-server.

  3. Fai clic su Elimina.

kubectl

Per eliminare il deployment:

kubectl delete deployment hello-server

Configura il criterio di applicazione per non consentire tutte le immagini

Ora modifica il criterio in blocco anziché consentire il deployment di tutte le 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. Fai clic su Save Policy (Salva criterio).

gcloud

Per modificare il criterio:

  1. Esporta il file YAML del criterio:

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

    Il file YAML del criterio dovrebbe avere questo 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 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",
      "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"
    

Ripeti il test delle norme.

Verifica di nuovo il criterio eseguendo il deployment di un'immagine container di esempio nel cluster. Questa volta, Autorizzazione binaria blocca il deployment dell'immagine.

Console Google Cloud

Esegui il deployment dell'immagine:

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

    Vai a GKE

  2. Fai clic su Esegui il deployment.

    La console richiede di inserire i dettagli del deployment.

  3. Seleziona Immagine container esistente.

  4. Inserisci gcr.io/google-samples/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 gcr.io/google-samples/hello-app:1.0 --port 8080

Ora puoi verificare che il criterio sia stato bloccato:

Console Google Cloud

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

Torna alla pagina Carichi di lavoro di GKE nella console Google Cloud.

Vai a GKE

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

kubectl

Per verificare che il deployment dell'immagine non sia stato eseguito, esegui questo comando:

kubectl get pods

Il comando visualizza il seguente messaggio, che indica che il deployment dell'immagine non è stato eseguito:

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