Configura un criterio utilizzando l'API REST

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

Panoramica

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

Quando configuri un criterio utilizzando l'API REST, i valori vengono inseriti in un formato JSON la cui struttura è identica alla struttura YAML utilizzata nelle interazioni gcloud con il servizio. Per maggiori informazioni, consulta Riferimento YAML per i criteri.

Per configurare un criterio devi:

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

La maggior parte dei criteri 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.

Imposta il progetto predefinito

Se non lo hai già fatto, imposta il progetto Google Cloud predefinito:

PROJECT_ID=PROJECT_ID
gcloud config set project ${PROJECT_ID}

dove PROJECT_ID è l'ID del progetto.

Esporta il criterio

Questa sezione riguarda GKE, cluster GKE, Cloud Run e Anthos Service Mesh.

Esporta il criterio in un file JSON sul tuo 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 ha i seguenti contenuti:

{
  "name": "projects/PROJECT_ID/policy",
  "admissionWhitelistPatterns": [
    {
      "namePattern": "gcr.io/google_containers/*"
    },
    {
      "namePattern": "gcr.io/google-containers/*"
    },
    {
      "namePattern": "k8s.gcr.io/**"
    },
    {
      "namePattern": "gcr.io/stackdriver-agents/*"
    }
  ],
  "globalPolicyEvaluationMode": "ENABLE",
  "defaultAdmissionRule": {
    "evaluationMode": "ALWAYS_ALLOW",
    "enforcementMode": "ENFORCED_BLOCK_AND_AUDIT_LOG"
  }
}

L'elenco admissionWhitelistPatterns predefinito nell'esportazione dei criteri potrebbe visualizzare percorsi delle immagini diversi da quelli mostrati in questa guida.

Gestisci le immagini esenti

Questa sezione riguarda GKE, cluster GKE, Cloud Run e Anthos Service Mesh.

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

Puoi specificare le immagini esenti elencando i relativi percorsi del Registro di sistema in admissionWhitelistPatterns. Il percorso può fare riferimento a Container Registry o a un altro registro di immagini. L'enforcer elabora le immagini esenti in admissionWhitelistPatterns dopo che le immagini sono esenti dalla modalità di valutazione dei criteri di sistema.

Per aggiungere un'immagine esente, aggiungi un nodo namePattern in 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 registro per corrispondenza esatta o di qualsiasi immagine corrispondente a un pattern utilizzando il carattere jolly (*, **).

Cloud Run

Questa sezione riguarda Cloud Run.

Non puoi specificare direttamente nomi di 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 come segue:

  • * per tutte le versioni di una singola immagine; ad esempio, us-docker.pkg.dev/myproject/container/hello@*
  • ** per tutte le immagini in 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 dei criteri di sistema

Questa sezione riguarda i cluster GKE e GKE.

La modalità di valutazione dei criteri di sistema è un'impostazione di criteri che consente ad Autorizzazione binaria di valutare un criterio di sistema prima di valutare quello che configuri. Google gestisce il criterio di sistema, che esenta un elenco di immagini di sistema gestite da Google utilizzate da GKE. Le immagini elencate nel criterio di sistema non vengono bloccate dall'applicazione del criterio. Se non abiliti l'impostazione, devi gestire autonomamente l'elenco delle immagini esenti. Scopri come gestire le immagini esenti.

Puoi visualizzare i contenuti del criterio di sistema utilizzando il seguente comando:

gcloud alpha container binauthz policy export-system-policy

Per abilitare la modalità di valutazione dei criteri di sistema, aggiungi il seguente nodo di primo livello al file JSON dei criteri:

"globalPolicyEvaluationMode": "ENABLE"

Per disabilitare la modalità di valutazione dei criteri di sistema, aggiungi quanto segue:

"globalPolicyEvaluationMode": "DISABLE"

Puoi esportare il criterio di sistema associato a una regione specifica, come segue:

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 "globale"). Esempi: asia-east1, europe-west1, us-central1.

Se ometti --location o specifichi --location=global, il comando genera un criterio di sistema da una regione nell'ultimo gruppo di regioni per ricevere gli aggiornamenti. Poiché la maggior parte delle modifiche ai criteri 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 riguarda GKE, cluster GKE, Cloud Run e Anthos Service Mesh.

Una regola è la parte di un criterio che definisce i vincoli che le immagini container devono rispettare prima di poterne eseguire il deployment. A ogni richiesta di ammissione è associato un cluster GKE. Se una richiesta non corrisponde a una regola specifica per il cluster, viene utilizzata la regola predefinita.

La regola predefinita è definita nel nodo defaultAdmissionRule del criterio. Per ulteriori informazioni sulle parti di questa regola, consulta ADMISSION_RULE nel riferimento YAML dei criteri. Per esempi di regole predefinite, consulta la sezione Criteri di esempio.

Per impostare la regola predefinita, modifica il nodo defaultAdmissionRule nel file JSON dei criteri come richiesto:

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

dove:

  • EVAL_MODE specifica il tipo di vincolo valutato da Autorizzazione binaria prima di consentire il deployment di un'immagine container.
  • ENFORCEMENT_MODE specifica l'azione che viene eseguita se un'immagine container non è conforme ai vincoli definiti nella regola.
  • ATTESTOR specifica gli attestatori (se richiesti) che devono firmare un'immagine container prima di poterne eseguire il deployment. Utilizza il percorso completo dell'attestatore nel formato projects/PROJECT_ID/attestors/ATTESTOR_NAME.

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

Imposta regole specifiche per il cluster (facoltativo)

Questa sezione riguarda i cluster GKE e GKE.

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 regola specifica, viene utilizzata la regola predefinita. Le regole specifiche del cluster sono una parte facoltativa di un criterio.

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

Per aggiungere una regola specifica per il cluster:

Nel file JSON del criterio, 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 GKE su Bare Metal e GKE su VMware, 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 i criteri di esempio per un esempio di regola specifica per il cluster.

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

Importa il file JSON dei criteri

Questa sezione riguarda GKE, cluster GKE, Cloud Run e Anthos Service Mesh.

Importa di nuovo il file JSON del criterio 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