Configurare un criterio utilizzando l'API REST

Questa pagina fornisce le istruzioni per configurare un criterio di autorizzazione binaria utilizzando l'API REST. In alternativa, puoi eseguire queste attività anche utilizzando Google Cloud CLI o la Google Cloud console. Questo passaggio fa parte della configurazione di Autorizzazione binaria.

Panoramica

Un criterio è un insieme di regole che regolano il deployment di una o più immagini container.

Quando configuri un criterio utilizzando l'API REST, inserisci i valori in un formato JSON la cui struttura è identica a quella YAML utilizzata nelle interazioni con il servizio.gcloud Per ulteriori informazioni, consulta il riferimento YAML per i criteri.

Per configurare un criterio devi:

  • Esportare un file JSON dei criteri
  • (Facoltativo) Aggiungi eventuali immagini esenti aggiuntive
  • Impostare la regola predefinita
  • Aggiungi eventuali regole specifiche per il cluster (facoltativo)
  • Importa il file JSON della policy

La maggior parte delle policy reali controlla se tutti gli attestatori richiesti hanno verificato che un'immagine container è pronta per il deployment. In questo caso, devi anche creare attestatori quando configuri il criterio.

Impostare il progetto predefinito

Imposta il progetto Google Cloud predefinito, se non l'hai ancora fatto:

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

dove PROJECT_ID è l'ID del tuo progetto.

Esportare la policy

Questa sezione si applica a GKE, Distributed Cloud, Cloud Run e Cloud Service Mesh.

Esporta il criterio in un file JSON sul sistema locale:

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" \
    -o "/tmp/policy.json"

Per impostazione predefinita, il file contiene quanto segue:

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

Gestire le immagini esenti

Questa sezione si applica a GKE, Distributed Cloud, Cloud Run e Cloud Service Mesh.

Un'immagine esente è un'immagine container esente dalle regole dei criteri. Autorizzazione binaria consente sempre il deployment delle immagini esenti.

Specifichi le immagini esenti elencando i relativi percorsi del registro in admissionWhitelistPatterns. Il percorso può fare riferimento a Container Registry o a un altro registro di immagini. Lo strumento di applicazione delle norme elabora le immagini esenti in admissionWhitelistPatterns dopo le immagini esentate dalla modalità di valutazione delle norme di sistema.

Per aggiungere un'immagine esente, aggiungi un nodo namePattern a un elenco admissionWhitelistPatterns nel file JSON dei criteri:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "MATCHING_PATTERN"
    }
  ],
  ...
}

dove MATCHING_PATTERN è il percorso di una singola immagine nel tuo registro per corrispondenza esatta o di qualsiasi immagine che corrisponda a un pattern utilizzando il simbolo jolly (*, **).

Cloud Run

Questa sezione si applica a Cloud Run.

Non puoi specificare direttamente i nomi delle immagini che contengono un tag. Ad esempio, non puoi specificare IMAGE_PATH:latest.

Se vuoi specificare nomi di immagini che contengono tag, devi specificare il nome dell'immagine utilizzando un carattere jolly nel seguente modo:

  • * per tutte le versioni di una singola immagine, ad esempio us-docker.pkg.dev/myproject/container/hello@*
  • ** per tutte le immagini di un progetto, ad esempio us-docker.pkg.dev/myproject/**

Puoi utilizzare i nomi dei percorsi per specificare un digest nel formato IMAGE_PATH@DIGEST.

Modalità di valutazione delle policy di sistema

Questa sezione si applica a GKE e Distributed Cloud.

La modalità di valutazione delle norme di sistema è un'impostazione delle norme che fa sì che Autorizzazione binaria valuti un criterio di sistema prima di valutare il criterio che configuri. Google gestisce i criteri di sistema, che esentano un elenco di immagini di sistema gestite da Google utilizzate da GKE. Le immagini elencate nelle norme di sistema non sono bloccate dall'applicazione delle norme. Se non abiliti l'impostazione, devi gestire autonomamente l'elenco delle immagini esenti. Scopri come gestire le immagini esenti.

Puoi visualizzare i contenuti della policy di sistema utilizzando il seguente comando:

gcloud alpha container binauthz policy export-system-policy

Per attivare la modalità di valutazione delle policy di sistema, aggiungi il seguente nodo di primo livello al file JSON delle policy:

"globalPolicyEvaluationMode": "ENABLE"

Per disattivare la modalità di valutazione delle policy di sistema, aggiungi quanto segue:

"globalPolicyEvaluationMode": "DISABLE"

Puoi esportare la norma di sistema associata a una regione specifica nel seguente modo:

gcloud alpha container binauthz policy export-system-policy \
  --location=REGION > /tmp/policy.yaml

Sostituisci REGION con la regione associata al criterio di sistema che vuoi esportare (o "global"). Esempi: asia-east1, europe-west1, us-central1.

Se ometti --location o specifichi --location=global, il comando restituisce un criterio di sistema di una regione dell'ultimo gruppo di regioni a ricevere aggiornamenti. Poiché la maggior parte delle modifiche alla norma di sistema sono aggiunte, l'output mostra l'insieme di immagini di sistema attualmente consentite in tutte le regioni.

Impostare la regola predefinita

Questa sezione si applica a GKE, Distributed Cloud, Cloud Run e Cloud Service Mesh.

Una regola è la parte di un criterio che definisce i vincoli che le immagini container devono superare prima di poter essere sottoposte a deployment. Ogni richiesta di ammissione ha un cluster GKE associato. Se una richiesta non corrisponde a una regola specifica del cluster, viene utilizzata la regola predefinita.

La regola predefinita è definita nel nodo defaultAdmissionRule nel criterio. Per ulteriori informazioni sulle parti di questa regola, consulta ADMISSION_RULE nel riferimento YAML delle norme. Per esempi di regole predefinite, vedi Norme di esempio.

Per impostare la regola predefinita, modifica il nodo defaultAdmissionRule nel file JSON dei criteri in base alle tue esigenze:

  "defaultAdmissionRule": {
    "evaluationMode": "EVAL_MODE",
    "enforcementMode": "ENFORCEMENT_MODE"
    requireAttestationsBy: [
      ATTESTOR,
      ...
    ]
  }

dove:

  • EVAL_MODE specifica il tipo di vincolo cheAutorizzazione binarian valuta prima di consentire il deployment di un'immagine container.
  • ENFORCEMENT_MODE specifica l'azione intrapresa se un'immagine container non è conforme ai vincoli definiti nella regola.
  • ATTESTOR specifica gli attestatori (se richiesti) che devono firmare un'immagine container prima che possa essere sottoposta a deployment. Utilizza il percorso completo dell'attestatore nel formato projects/PROJECT_ID/attestors/ATTESTOR_NAME.

Se la regola verifica se tutti gli attestatori richiesti hanno firmato un'immagine container, devi creare gli attestatori prima di completare questo passaggio.

Imposta regole specifiche per il cluster (facoltativo)

Questa sezione si applica a GKE e Distributed Cloud.

Un cluster può anche avere una o più regole specifiche del cluster. Questo tipo di regola si applica solo al cluster GKE specificato. Se un cluster non ha una propria regola, viene utilizzata la regola predefinita. Le regole specifiche per il cluster sono una parte facoltativa di una policy.

Le regole specifiche per il cluster sono definite nei nodi clusterAdmissionRules nel file JSON della policy. Per ulteriori informazioni sulle parti di questa regola, consulta ADMISSION_RULE nel riferimento YAML delle norme. Per un esempio, vedi Utilizzare una regola specifica per il cluster in Criteri di esempio.

Per aggiungere una regola specifica per il cluster:

Nel file JSON dei criteri, aggiungi un nodo clusterAdmissionRules:

"clusterAdmissionRules": {
    "us-central1-a.test-cluster": {
      "evaluationMode": "REQUIRE_ATTESTATION",
      "requireAttestationsBy": [
        "ATTESTOR",
        ...
      ],
      "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
    }
  },

dove CLUSTER_SPECIFIER è l'ID risorsa del cluster a cui si applica la regola.

  • Per GKE, i cluster collegati a GKE e GKE su AWS, il formato è CLUSTER_LOCATION.CLUSTER_NAME, ad esempio us-central1-a.test-cluster.
  • Per Google Distributed Cloud e Google Distributed Cloud, il formato è FLEET_MEMBERSHIP_LOCATION.FLEET_MEMBERSHIP_ID, ad esempio global.test-membership.

Le altre proprietà sono descritte in Impostare la regola predefinita , in precedenza in questa guida. Consulta Esempi di criteri per un esempio di regola specifica per il cluster.

Se la regola verifica se tutti gli attestatori richiesti hanno firmato un'immagine container, devi creare gli attestatori prima di completare questo passaggio.

Importa il file JSON della policy

Questa sezione si applica a GKE, Distributed Cloud, Cloud Run e Cloud Service Mesh.

Importa di nuovo il file JSON dei criteri in Autorizzazione binaria inserendo quanto segue:

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"

Passaggi successivi