Crea attestatori utilizzando la console Google Cloud

Questa pagina spiega come creare un attestatore personalizzato in Autorizzazione binaria utilizzando la console Google Cloud . In alternativa, puoi eseguire questi passaggi anche utilizzando Google Cloud CLI o l'API REST. Questa attività fa parte della configurazione di Autorizzazione binaria.

In qualità di utente di Cloud Build, puoi utilizzare l'attestatore built-by-cloud-build per eseguire il deployment solo delle immagini create da Cloud Build.

Prima di iniziare

Prima di creare gli attestatori, segui questi passaggi:

  1. Attiva Autorizzazione binaria.

  2. Configura Autorizzazione binaria per la tua piattaforma.

Panoramica

Un attestatore è una risorsa Google Cloud utilizzata da Autorizzazione binaria per verificare un'attestazione. Per scoprire di più su Autorizzazione binaria, consulta la panoramica di Autorizzazione binaria.

Per creare un attestatore, segui questi passaggi:

  • Configura una coppia di chiavi che può essere utilizzata prima per firmare un'immagine, creando un'attestazione, e poi per verificare l'immagine durante il deployment. Le coppie di chiavi PKIX sono coppie di chiavi generate da Cloud Key Management Service (Cloud KMS) in formato compatibile con PKIX.
  • Creare l'attestatore in Autorizzazione binaria e associare la chiave pubblica che hai creato

In una configurazione con un singolo progetto, crei l'attestatore nello stesso progetto in cui configuri la policy di Autorizzazione binaria. In una configurazione multiprogetto, è molto probabile che tu abbia un progetto di deployment in cui è configurata la policy e un progetto attestatore separato in cui sono archiviati gli attestatori.

Configura le chiavi di crittografia

Autorizzazione binaria ti consente di utilizzare le chiavi PKIX per firmare in modo sicuro un'immagine e poi verificarla in un secondo momento. In questo modo, solo le parti verificate possono autorizzare un'immagine container. Per utilizzare l'attestazione, devi configurare chiavi asimmetriche, come le chiavi PKIX (Public-Key Infrastructure X.509), per verificare in modo sicuro l'identità degli attestatori. Quando viene eseguito il deployment di un'immagine, Autorizzazione binaria controlla l'attestazione dell'immagine firmata con la chiave privata utilizzando la chiave pubblica nell'attestatore.

In questa guida, per generare una coppia di chiavi PKIX viene utilizzato l'algoritmo Digital Signature Algorithm a curva ellittica (ECDSA) consigliato. Puoi anche utilizzare le chiavi RSA o PGP per la firma. Per saperne di più sugli algoritmi di firma, consulta Scopi e algoritmi delle chiavi.

Crea una coppia di chiavi PKIX

Autorizzazione binaria ti consente di utilizzare coppie di chiavi PKIX asimmetriche per firmare e verificare un'immagine.

Una coppia di chiavi PKIX è composta da una chiave privata, che il signer utilizza per firmare digitalmente le attestazioni, e da una chiave pubblica, che aggiungi all'attestatore. Al momento del deployment, Autorizzazione binaria utilizza questa chiave pubblica per verificare l'attestazione firmata dalla chiave privata.

Le coppie di chiavi asimmetriche generate e archiviate in Cloud KMS sono conformi al formato PKIX. Per creare una chiave Cloud KMS da utilizzare con Autorizzazione binaria, consulta Creazione di chiavi asimmetriche. Assicurati di scegliere Firma asimmetrica come scopo della chiave quando la crei.

PKIX (Cloud KMS)

Per creare la coppia di chiavi in Cloud KMS, segui questi passaggi:

  1. Configura le variabili di ambiente necessarie per creare la coppia di chiavi.

    KMS_KEY_PROJECT_ID=${PROJECT_ID}
    KMS_KEYRING_NAME=my-binauthz-keyring
    KMS_KEY_NAME=my-binauthz-kms-key-name
    KMS_KEY_LOCATION=global
    KMS_KEY_PURPOSE=asymmetric-signing
    KMS_KEY_ALGORITHM=ec-sign-p256-sha256
    KMS_PROTECTION_LEVEL=software
    KMS_KEY_VERSION=1
    
  2. Crea il keyring.

    gcloud kms keyrings create ${KMS_KEYRING_NAME} \
      --location ${KMS_KEY_LOCATION}
    
  3. Crea la chiave:

    gcloud kms keys create ${KMS_KEY_NAME} \
      --location ${KMS_KEY_LOCATION} \
      --keyring ${KMS_KEYRING_NAME}  \
      --purpose ${KMS_KEY_PURPOSE} \
      --default-algorithm ${KMS_KEY_ALGORITHM} \
      --protection-level ${KMS_PROTECTION_LEVEL}
    

PKIX (chiave locale)

Per generare una nuova coppia di chiavi PKIX asimmetriche locali e archiviarla in un file, segui questi passaggi:

  1. Genera la chiave:

    PRIVATE_KEY_FILE="/tmp/ec_private.pem"
    openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
    
  2. Poiché questo file contiene sia una chiave pubblica che una chiave privata, devi estrarre la chiave pubblica in un file separato per poterla aggiungere all'attestatore:

    PUBLIC_KEY_FILE="/tmp/ec_public.pem"
    openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
    

Crea l'attestatore

Il passaggio successivo consiste nel creare l'attestatore e nell'associare una nota di Artifact Analysis e una chiave pubblica.

Autorizzazione binaria utilizza Artifact Analysis per archiviare i metadati attendibili utilizzati nel processo di autorizzazione. Per ogni attestatore che crei, devi creare una nota Artifact Analysis. Ogni attestazione viene archiviata come occorrenza di questa nota.

Per creare l'attestatore:

  1. Vai alla pagina Autorizzazione binaria del progetto attestatore.

    Vai ad Autorizzazione binaria

  2. Nella scheda Attestatori, fai clic su Crea.

  3. Fai clic su Crea nuovo attestatore.

  4. In Nome attestatore, inserisci un nome per l'attestatore (ad esempio, build-secure o prod-qa).

  5. Per aggiungere la chiave pubblica all'attestatore, segui questi passaggi:

    PKIX (chiave locale)

    1. Fai clic su Aggiungi una chiave PKIX.
    2. Fai clic su Importa da file.
    3. Vai al file della chiave PKIX salvato in precedenza e selezionalo. Nota: puoi anche incollare una chiave pubblica in formato PEM.
    4. Seleziona l'algoritmo di firma. La chiave di esempio in questa guida viene generata con l'algoritmo Elliptic Curve P256 - SHA Digest.

    PKIX (Cloud KMS)

    1. Fai clic su Aggiungi una chiave PKIX.
    2. Fai clic su Importa da Cloud KMS.
    3. Nella finestra che si apre, inserisci l'ID risorsa della versione della chiave. Il formato dell'ID risorsa è:

      projects/KMS_KEY_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/KMS_KEYRING_NAME/cryptoKeys/KMS_KEY_NAME/cryptoKeyVersions/KMS_KEY_VERSION
      

      dove:

      • KMS_KEY_PROJECT_ID è l'ID del progetto in cui sono archiviate le chiavi
      • KMS_KEY_LOCATION è la località della chiave (global è il valore predefinito)
      • KMS_KEYRING_NAME è il nome delle chiavi automatizzate
      • KMS_KEY_NAME è il nome della chiave
      • KMS_KEY_VERSION è la versione della chiave

      Se hai creato una coppia di chiavi Cloud KMS utilizzando le variabili di ambiente di esempio in questa pagina, puoi visualizzare l'ID risorsa con il seguente comando:

      echo projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}/cryptoKeyVersions/${KMS_KEY_VERSION}
      
    4. Fai clic su Invia.

  6. Se vuoi utilizzare una nota esistente che hai creato in precedenza, espandi la sezione Impostazioni avanzate.

    1. Deseleziona Genera automaticamente una nota Artifact Analysis.

    2. Inserisci il nome completo nel campo ID nota Artifact Analysis. Il nome ha il formato projects/PROJECT_ID/notes/NOTE_ID.

  7. Fai clic su Crea.

Verifica che l'attestatore sia stato creato

Per verificare che l'attestatore sia stato creato:

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

  2. Apri la scheda Attestatori.

Configurazione con più progetti

Se utilizzi una configurazione multiprogetto, in cui hai progetti di deployment e attestatore separati, devi impostare autorizzazioni aggiuntive sulla risorsa attestatore per consentire al progetto di deployment di utilizzare le attestazioni create da quest'ultimo durante il deployment.

Aggiungi un'associazione di ruoli IAM per il progetto del deployer

Devi aggiungere un'associazione di ruoli IAM per il account di servizio del progetto del deployer all'attestatore. Questo ruolo viene utilizzato da Autorizzazione binaria quando valuta una policy per determinare se l'account dispone delle autorizzazioni per accedere all'attestatore.

Devi aggiungere l'associazione del ruolo IAM dalla riga di comando, poiché questo passaggio non è supportato nella console Google Cloud .

Per aggiungere l'associazione di ruoli IAM:

  1. Configura le variabili di ambiente per archiviare i nomi e i numeri dei progetti.

    DEPLOYER_PROJECT_ID=PROJECT_ID
    DEPLOYER_PROJECT_NUMBER="$(
        gcloud projects describe "${DEPLOYER_PROJECT_ID}" \
          --format="value(projectNumber)"
    )"
    
  2. Configura le variabili di ambiente per archiviare i nomi dei account di servizio per i progetti:

    DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization."
    
  3. Aggiungi l'associazione di ruoli IAM:

    gcloud --project ATTESTOR_PROJECT_ID \
        beta container binauthz attestors add-iam-policy-binding \
        "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
        --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \
        --role=roles/binaryauthorization.attestorsVerifier
    

Se ricevi un errore service account not found quando concedi il ruolo IAM, potresti dover creare manualmente l'agente di servizio.

Aggiungi un'associazione di ruoli IAM per l'utente che configura Autorizzazione binaria

Devi aggiungere un'associazione di ruoli IAM per l'utente che aggiunge un attestatore alla policy di Autorizzazione binaria nel progetto del deployer, poiché l'utente deve disporre dell'autorizzazione per visualizzare l'attestatore da aggiungere. Se vuoi, puoi revocare questa autorizzazione in tutta sicurezza dopo aver aggiunto l'attestatore.

Devi anche aggiungere l'associazione del ruolo IAM dalla riga di comando, poiché questo passaggio non è supportato nella console Google Cloud .

Per aggiungere l'associazione di ruoli IAM:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors add-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

Per rimuovere l'associazione del ruolo IAM dopo l'aggiunta dell'attestatore:

gcloud --project ATTESTOR_PROJECT_ID \
    beta container binauthz attestors remove-iam-policy-binding \
    "projects/ATTESTOR_PROJECT_ID/attestors/ATTESTOR" \
    --member=ADMIN_EMAIL_ACCOUNT \
    --role=roles/binaryauthorization.attestorsViewer

Passaggi successivi