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

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

Scopri come configurare Autorizzazione binaria per controllare la build e bloccare i deployment di immagini che non vengono generate in Cloud Build. Questo processo può ridurre il rischio di deployment software non autorizzato.

Prima di iniziare

  1. Abilita le API Cloud Build, Binary Authorization, and Artifact Registry.

    Abilita le API

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

  3. Configura Autorizzazione binaria per la piattaforma.

Controlla i deployment con Autorizzazione binaria

Un criterio in Autorizzazione binaria è un insieme di regole che regolano il il deployment delle immagini. Puoi configurare una regola in modo che richieda una firma digitale attestati.

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

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

Per consentire il deployment solo delle immagini create da Cloud Build, esegui la seguenti passaggi:

Console

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

    Vai ad Autorizzazione binaria

  2. Nella scheda Norme, fai clic su Modifica criterio.

  3. Nella finestra di dialogo Modifica criterio, seleziona Consenti solo le immagini che sono state approvati 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 per nome progetto e attestatore ed esegui le seguenti operazioni passaggi:
        .
      1. Nel campo Nome progetto, inserisci il progetto in cui esegui in 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
      

      Sostituzione di PROJECT_ID con il progetto in cui esegui in Cloud Build.

  6. Fai clic su Aggiungi 1 attestatore.

  7. Fai clic su Save Policy (Salva criterio).

gcloud

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

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

  3. Modifica una delle seguenti regole:

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

  5. Nel blocco requireAttestationsBy, aggiungi

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

    Sostituzione di PROJECT_ID con il progetto in cui esegui Cloud Build.

  6. Salva il file del criterio.

  7. Importa il file dei criteri.

    gcloud container binauthz policy import /tmp/policy.yaml
    

    Di seguito è riportato un esempio di file di criteri che contiene il riferimento alla 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 in Cloud Build.

Puoi visualizzare gli errori relativi ai criteri nei messaggi del log di Autorizzazione binaria per GKE o Cloud Run

Utilizzo della modalità dry run

In modalità dry run, Autorizzazione binaria controlla la conformità ai criteri senza bloccare effettivamente il deployment. I messaggi sullo stato della conformità alle norme registrato in Cloud Logging. Puoi utilizzare questi log per determinare se le tue che la norma di blocco funzioni correttamente e per identificare i falsi positivi.

Per abilitare la modalità di prova, procedi nel seguente modo:

Console

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

    Vai ad Autorizzazione binaria.

  2. Fai clic su Modifica criterio.

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

  4. Fai clic su Save Policy (Salva criterio).

gcloud

  1. Esporta il criterio 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 salvare il file.

  3. Per aggiornare il criterio, importa il file eseguendo questo comando:

    gcloud container binauthz policy import /tmp/policy.yaml
    

Puoi visualizzare gli errori relativi ai criteri nei messaggi dei log di Autorizzazione binaria per GKE o Cloud Run

Limitazioni

  • Cloud Build e Autorizzazione binaria devono essere nello stesso progetto. Se esegui la piattaforma di deployment in un altro configurare i ruoli IAM per una configurazione con più progetti e fai riferimento al progetto Cloud Build quando aggiungi attestatore built-by-cloud-build in Autorizzazione binaria.

  • Cloud Build non genera attestazioni quando esegui il push delle immagini ad Artifact Registry utilizzando un passaggio di build docker push esplicito. Assicurati di premere ad Artifact Registry utilizzando il campo images nel passaggio di build docker build. Per Per saperne di più su images, consulta Diversi modi di archiviare le immagini in Artifact Registry.

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

Abilita attestazioni nei pool privati

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

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 delle attestazioni e dei metadati di provenienza per i tuoi dell'immagine.

Visualizza i metadati dell'attestatore

La prima volta che esegui una build in un progetto viene creato un attestatore. La l'ID attestatore è nel 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 in Cloud Build.

L'output contiene informazioni sull'attestatore e sul pubblico corrispondente chiave. 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