Crea un'attestazione di Autorizzazione binaria in una pipeline di Cloud Build

Questo tutorial mostra come creare un'attestazione di Autorizzazione binaria in una pipeline Cloud Build. Questa configurazione garantisce che solo le immagini container e firmati come parte del processo di compilazione di Cloud Build, autorizzato a essere eseguito nell'ambiente di deployment.

Per scoprire come utilizzare l'analisi delle vulnerabilità di Artifact Analysis in Pipeline di build di Cloud Build, consulta Creare attestazioni con Voucher o Crea attestazioni con Kritis Signer.

Panoramica di Cloud Build

Cloud Build (panoramica) acquisisce il codice sorgente archiviati in Cloud Source Repositories o un altro repository ospitato, esegue le build e i test e archivia gli output software risultanti in Container Registry con un altro servizio di archiviazione sulla Google Cloud Platform.

Panoramica di Autorizzazione binaria

Autorizzazione binaria (panoramica) è un Prodotto Google Cloud che applica vincoli relativi al tempo di deployment nelle applicazioni. È L'integrazione di Google Kubernetes Engine (GKE) consente agli utenti applicare in modo forzato la crittografia dei container di cui è stato eseguito il deployment in un cluster Kubernetes firmato da un'autorità attendibile e verificata da un attestatore di Autorizzazione binaria.

Puoi configurare Autorizzazione binaria per richiedere attestazioni basate sulla località della fonte per impedire che le immagini container create da origini non autorizzate di cui è stato eseguito il deployment.

Per saperne di più:

Architettura

Il seguente diagramma mostra i componenti di un Configurazione di Autorizzazione binaria/Cloud Build:

Pipeline di attestazione di Autorizzazione binaria di Cloud Build.
. Figura 1. Pipeline di Cloud Build che crea un'Autorizzazione binaria l'attestazione.

In questa pipeline:

  1. Il codice per la creazione dell'immagine container viene inviato a un repository di codice sorgente, come Cloud Source Repositories.

  2. Uno strumento di integrazione continua (CI), Cloud Build crea e testa il container.

  3. La build esegue il push dell'immagine container a Container Registry o in un altro registro in cui sono archiviate le immagini create.

  4. Cloud Key Management Service, che fornisce la gestione delle chiavi per il coppia di chiavi crittografiche, firma la nell'immagine container. La firma risultante viene quindi archiviata in un nuovo l'attestazione.

  5. Al momento del deployment, l'attestatore verifica l'attestazione utilizzando chiave pubblica dalla coppia di chiavi. Autorizzazione binaria applica il criterio richiedendo la firma attestazioni per eseguire il deployment dell'immagine container.

Crea un'attestazione utilizzando Cloud Build con Cloud Key Management Service

Questa sezione mostra come implementare l'architettura descritta sopra. Utilizza un modello un passaggio di build personalizzato di origine dalla community di Cloud Build. La build personalizzata firma un'immagine container, crea l'attestazione e la carica Autorizzazione binaria.

Configura Identity and Access Management

Per utilizzare questo passaggio di build, l'account di servizio Cloud Build deve avere quanto segue Ruoli IAM:

  • Visualizzatore attestatori autorizzazione binaria
    • roles/binaryauthorization.attestorsViewer
  • Firmatario/verificatore CryptoKey Cloud KMS (se utilizzi la chiave in KMS per firmare) attestazione)
    • roles/cloudkms.signerVerifier
  • Strumento di collegamento note Artifact Analysis
    • roles/containeranalysis.notes.attacher

Puoi usare i comandi seguenti per aggiungere ruoli al prompt Account di servizio Cloud Build:

  1. Abilita Cloud Build:

    Abilita l'API Cloud Build nel progetto Google Cloud di destinazione.

  2. Salva l'ID progetto in una variabile di ambiente:

    PROJECT_ID=PROJECT_ID
    

    dove PROJECT_ID è l'ID progetto Google Cloud.

  3. Imposta il progetto Google Cloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Ottieni il numero del progetto:

    PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" --format="value(PROJECT_NUMBER)")
    
  5. Aggiungi il ruolo Visualizzatore attestatore autorizzazione binaria all'account di servizio Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/binaryauthorization.attestorsViewer
    
  6. Aggiungi il ruolo Firmatario/Verificatore CryptoKey Cloud KMS all'account di servizio Cloud Build (firma basata su KMS):

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/cloudkms.signerVerifier
    
  7. Aggiungi il ruolo Autore associazione note di Artifact Analysis all'account di servizio Cloud Build:

    gcloud projects add-iam-policy-binding ${PROJECT_ID} \
      --member serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
      --role roles/containeranalysis.notes.attacher
    

Crea e registra il passaggio di build personalizzato con Cloud Build

  1. Clona il repository della community di build di Google Cloud:

    git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
    
  2. Configura il firmatario di Autorizzazione binaria per Cloud Build:

    Prima dell'uso, il codice per il passaggio di build personalizzato deve essere integrato in container e il push su Cloud Build. Per farlo, esegui questo :

    cd cloud-builders-community/binauthz-attestation
    gcloud builds submit . --config cloudbuild.yaml
    

    Il passaggio di build personalizzato è stato inviato all'account Google Container Registry ed è ora pronto per l'uso.

Crea un attestatore in Autorizzazione binaria

Crea un attestatore che verrà utilizzato da Autorizzazione binaria in per verificare l'attestazione.

Configura un attestatore e una coppia di chiavi Cloud Key Management Service in Autorizzazione binaria:

Vedi Creare un attestatore utilizzando l'interfaccia a riga di comando

Verificare che l'attestatore sia stato creato

   gcloud --project="${ATTESTOR_PROJECT_ID}" container binauthz attestors list
   

Aggiungi un'"attestazione di creazione" passaggio al tuo cloudbuild.yaml

Per usare il passaggio binauthz-attestation, devi aggiornare cloudbuild.yaml aggiungendo il passaggio che firmerà la build di cui è stato eseguito il push e Container Registry.

Di seguito sono riportati due metodi:

  • Aggiorna manualmente cloudbuild.yaml.

  • Esegui una pipeline di esempio con le variabili di ambiente impostate in precedenza.

Aggiorna manualmente cloudbuild.yaml

  1. Aggiorna manualmente cloudbuild.yaml aggiungendo il passaggio di build di seguito il passaggio in cui il container viene caricato in Container Registry. Nota: devi sostituire ATTESTOR_NAME, KMS_KEY_LOCATION, KMS_KEYRING_NAME, KMS_KEY_NAME e KMS_KEY_VERSION con i tuoi valori manualmente:

    - id: 'create-attestation'
      name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
      args:
        - '--artifact-url'
        - 'gcr.io/${PROJECT_ID}/helloworld:latest'
        - '--attestor'
        - 'projects/${PROJECT_ID}/attestors/ATTESTOR_NAME'
        - '--keyversion'
        - 'projects/${PROJECT_ID}/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION'
    

    È valido anche quanto segue:

    - id: 'create-attestation'
      name: 'gcr.io/${PROJECT_ID}/binauthz-attestation:latest'
      args:
        - '--artifact-url'
        - 'gcr.io/${PROJECT_ID}/helloworld:latest'
        - '--attestor'
        - 'ATTESTOR_NAME'
        - '--attestor-project'
        - '${PROJECT_ID}'
        - '--keyversion'
        - 'KEY_VERSION'
        - '--keyversion-project'
        - '${PROJECT_ID}'
        - '--keyversion-location'
        - 'KEY_LOCATION'
        - '--keyversion-keyring'
        - 'KEYRING_NAME'
        - '--keyversion-key'
        - 'KEY_NAME'
    

(Facoltativo) Testare la pipeline

Per testare una pipeline di attestazione di Cloud Build di esempio, esegui segui questi passaggi:

  1. Crea un file cloudbuild.yaml con le variabili di ambiente che imposta prima:

    cd example
    cat <<EOM > cloudbuild_example.yaml
    steps:
      - id: 'build'
        name: 'gcr.io/cloud-builders/docker'
        args:
          - 'build'
          - '-t'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
          - '.'
      - id: 'publish'
        name: 'gcr.io/cloud-builders/docker'
        args:
          - 'push'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
      - id: 'create-attestation'
        name: 'gcr.io/$PROJECT_ID/binauthz-attestation:latest'
        args:
          - '--artifact-url'
          - 'gcr.io/$PROJECT_ID/helloworld:latest'
          - '--attestor'
          - 'projects/$PROJECT_ID/attestors/${ATTESTOR_NAME}'
          - '--keyversion'
          - 'projects/${PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}'
    tags: ['cloud-builders-community']
    
    EOM
    
  2. Esegui Cloud Build con l'esempio cloudbuild_example.yaml:

    Dalla directory cloud-builders-community/binauthz-attestation/example, esegui seguenti comandi:

    gcloud builds submit . --config cloudbuild_example.yaml
    

Passaggi successivi