Protezione dei deployment delle immagini in Cloud Run e Google Kubernetes Engine

Questa pagina fornisce istruzioni su come proteggere i deployment di immagini su Cloud Run e Google Kubernetes Engine utilizzando Cloud Build.

Scopri come configurare Autorizzazione binaria per verificare la presenza di attestazioni di build e bloccare i deployment di immagini non generate da Cloud Build. Questa procedura può ridurre il rischio di deployment di software non autorizzato.

Prima di iniziare

  1. Abilita le API Cloud Build, Autorizzazione binaria e Artifact Registry.

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazione serviceusage.services.enable. Scopri come concedere i ruoli.

    Abilita le API

  2. Per utilizzare gli esempi di riga di comando in questa guida, installa e configura il Google Cloud SDK.

  3. Configura Autorizzazione binaria per la tua piattaforma.

Controllare i deployment con Autorizzazione binaria

Una policy in Autorizzazione binaria è un insieme di regole che regolano il deployment delle immagini. Puoi configurare una regola per richiedere attestazioni con firma digitale .

Cloud Build genera e firma le attestazioni al tempo di compilazione. Con Autorizzazione binaria, puoi utilizzare l'built-by-cloud-build attestatore per verificare le attestazioni ed eseguire il deployment solo delle immagini create da Cloud Build.

Per creare l'attestatore built-by-cloud-build nel tuo progetto, esegui una build in quel progetto.

Per consentire il deployment solo delle immagini create da Cloud Build:

Console

  1. Vai alla pagina Autorizzazione binaria nella Google Cloud console:

    Vai ad Autorizzazione binaria

  2. Nella scheda Policy, fai clic su Modifica policy.

  3. Nella finestra di dialogo Modifica policy, seleziona Consenti solo le immagini approvate da tutti i seguenti attestatori.

  4. Fai clic su Aggiungi attestatori.

  5. Nella finestra di dialogo Aggiungi attestatori, procedi nel seguente modo:

    1. Seleziona Aggiungi in base a nome progetto e attestatore ed esegui i seguenti passaggi:
      1. Nel campo Nome progetto, inserisci il progetto in cui esegui Cloud Build.
      2. Fai clic sul campo Nome attestatore e tieni presente che l'attestatore built-by-cloud-build è disponibile.
      3. Fai clic su built-by-cloud-build.
    2. In alternativa, seleziona Aggiungi tramite ID risorsa attestatore. In ID risorsa attestatore, inserisci

      projects/PROJECT_ID/attestors/built-by-cloud-build
      

      Sostituendo PROJECT_ID con il progetto in cui esegui Cloud Build.

  6. Fai clic su Aggiungi 1 attestatore.

  7. Fai clic su Salva policy.

gcloud

  1. Esporta la policy esistente in un file utilizzando il seguente comando:

    gcloud container binauthz policy export > /tmp/policy.yaml
    
  2. Modifica il file di policy.

  3. Modifica una delle seguenti regole:

    • defaultAdmissionRule
    • clusterAdmissionRules
    • istioServiceIdentityAdmissionRules
    • kubernetesServiceAccountAdmissionRules
  4. Aggiungi un blocco requireAttestationsBy alla regola, se non ne esiste già uno.

  5. Nel blocco requireAttestationsBy, aggiungi

    projects/PROJECT_ID/attestors/built-by-cloud-build
    

    Sostituendo PROJECT_ID con il progetto in cui esegui Cloud Build.

  6. Salva il file di policy.

  7. Importa il file di policy.

    gcloud container binauthz policy import /tmp/policy.yaml
    

    Di seguito è riportato un esempio di file di policy che contiene il riferimento a built-by-cloud-build-attestor:

    defaultAdmissionRule:
      evaluationMode: REQUIRE_ATTESTATION
      enforcementMode: ENFORCED_BLOCK_AND_AUDIT_LOG
      requireAttestationsBy:
        - projects/PROJECT_ID/attestors/built-by-cloud-build
    name: projects/PROJECT_ID/policy
    

    Sostituisci PROJECT_ID con l'ID progetto in cui esegui Cloud Build.

Puoi visualizzare gli errori delle policy nei messaggi di log di Autorizzazione binaria per GKE o Cloud Run

Utilizzare la modalità dry run

In modalità dry run, Autorizzazione binaria verifica la conformità alle policy senza bloccare effettivamente il deployment. I messaggi di stato di conformità alle policy vengono invece registrati in Cloud Logging. Puoi utilizzare questi log per determinare se la policy di blocco funziona correttamente e per identificare i falsi positivi.

Per abilitare la modalità dry run:

Console

  1. Vai alla pagina Autorizzazione binaria nella Google Cloud console.

    Vai ad Autorizzazione binaria.

  2. Fai clic su Modifica policy.

  3. In Regola predefinita o in una regola specifica, seleziona Modalità dry run.

  4. Fai clic su Salva policy.

gcloud

  1. Esporta la policy di Autorizzazione binaria in un file YAML:

    gcloud container binauthz policy export  > /tmp/policy.yaml
    
  2. In un editor di testo, imposta enforcementMode su DRYRUN_AUDIT_LOG_ONLY e salva il file.

  3. Per aggiornare la policy, importa il file eseguendo il comando seguente:

    gcloud container binauthz policy import /tmp/policy.yaml
    

Puoi visualizzare gli errori delle policy nei messaggi di log di Autorizzazione binaria per GKE o Cloud Run

Limitazioni

  • Cloud Build e Autorizzazione binaria devono trovarsi nello stesso progetto. Se esegui la piattaforma di deployment in un altro progetto, configura i ruoli IAM per una configurazione multi-progetto, e fai riferimento al progetto Cloud Build quando aggiungi l'attestatore built-by-cloud-build in Autorizzazione binaria.

  • Cloud Build non genera attestazioni quando esegui il push delle immagini in Artifact Registry utilizzando un passaggio di build docker push esplicito. Assicurati di eseguire il push in Artifact Registry utilizzando il campo images nel passaggio di build docker build. Per ulteriori informazioni su images, consulta Diversi modi per archiviare le immagini in Artifact Registry.

  • Devi utilizzare file di configurazione della build separati per la pipeline di build e la pipeline di deployment. Questo perché Cloud Build produce attestazioni solo dopo il completamento della pipeline di build. Autorizzazione binaria controllerà quindi l'attestazione prima di eseguire il deployment dell'immagine.

Abilitare le attestazioni nei pool privati

Per impostazione predefinita, Cloud Build non genera attestazioni di Autorizzazione binaria per le build nei pool privati. Per generare attestazioni, aggiungi l'opzione requestedVerifyOption: VERIFIED al tuo file di configurazione della compilazione:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1', '.' ]
images:
- 'us-central1-docker.pkg.dev/$PROJECT_ID/quickstart-docker-repo/quickstart-image:tag1'
options:
  requestedVerifyOption: VERIFIED

Dopo aver aggiunto requestedVerifyOption, Cloud Build abilita la generazione di attestazioni e i metadati di provenienza per l' immagine.

Visualizzare i metadati dell'attestatore

Un attestatore viene creato la prima volta che esegui una build in un progetto. L' ID attestatore ha il formato projects/PROJECT_ID/attestors/built-by-cloud-build, dove PROJECT_ID è l'ID progetto.

Puoi controllare i metadati dell'attestatore di build utilizzando il seguente comando:

curl -X GET -H "Content-Type: application/json" \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    https://binaryauthorization.googleapis.com/v1beta1/projects/PROJECT_ID/attestors/built-by-cloud-build

Sostituisci PROJECT_ID con il progetto in cui esegui Cloud Build.

L'output contiene informazioni sull'attestatore e sulle chiavi pubbliche corrispondenti. Ad esempio:

name": "projects/PROJECT_ID/attestors/built-by-cloud-build",
  "userOwnedDrydockNote": {
    "noteReference": "projects/PROJECT_ID/notes/built-by-cloud-build",
    "publicKeys": [
      {
        "id": "//cloudkms.googleapis.com/v1/projects/verified-builder/locations/asia/keyRings/attestor/cryptoKeys/builtByGCB/cryptoKeyVersions/1",
        "pkixPublicKey": {
          "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMMvFxZLgIiWOLIXsaTkjTmOKcaK7\neIZrgpWHpHziTFGg8qyEI4S8O2/2wh1Eru7+sj0Sh1QxytN/KE5j3mTvYA==\n-----END PUBLIC KEY-----\n",
          "signatureAlgorithm": "ECDSA_P256_SHA256"
        }
      },
...
      }
    ],
    "delegationServiceAccountEmail": "service-942118413832@gcp-binaryauthorization.iam.gserviceaccount.com"
  },
  "updateTime": "2021-09-24T15:26:44.808914Z",
  "description": "Attestor autogenerated by build ID fab07092-30f4-4f70-caf7-4545cbc404d6"

Passaggi successivi