Questa pagina spiega come creare un attestatore in Autorizzazione binaria utilizzando Google Cloud CLI. In alternativa, puoi eseguire questi passaggi utilizzando la console Google Cloud o l'API REST. Questa attività fa parte della configurazione di Autorizzazione binaria.
Utenti di Cloud Build: potete utilizzare l'attestatore built-by-cloud-build
per eseguire il deployment solo delle immagini create da Cloud Build.
Un attestatore è una risorsa Google Cloud utilizzata da Autorizzazione binaria per verificare un'attestazione. Per scoprire di più sulle attestazioni, consulta la Panoramica di Autorizzazione binaria.
Per creare un attestatore:
- Crea una nota in Analisi degli elementi per archiviare i metadati attendibili utilizzati nella procedura di attestazione.
- Configura una coppia di chiavi dell'infrastruttura a chiave pubblica (X.509) (PKIX) che possa essere utilizzata per verificare l'identità dell'attestatore. Le coppie di chiavi asimmetriche generate da Cloud Key Management Service (Cloud KMS) sono in formato PKIX.
- Crea l'attestatore stesso in Autorizzazione binaria e associa la nota e la chiave pubblica che hai creato.
In una configurazione di un singolo progetto, crei l'attestatore nello stesso progetto Google Cloud in cui configuri il criterio di autorizzazione binaria. Per un tutorial end-to-end su un singolo progetto che include questi passaggi, consulta Iniziare a utilizzare Google Cloud CLI o Iniziare a utilizzare la console Google Cloud.
In una configurazione multi-progetto, ti consigliamo di avere progetti separati: un progetto di deployment, in cui è configurato il criterio, un progetto di attestatore, in cui sono archiviati gli attestatori, e un progetto di attestazione per le attestazioni. Per un tutorial end-to-end multi-project che include questi passaggi, consulta la configurazione multi-project.
Prima di iniziare
Prima di creare gli attestatori, segui questi passaggi:
Configurare l'ambiente del progetto
In questa sezione, configuri le variabili di ambiente.
Configura le variabili di ambiente per archiviare i nomi e i numeri dei progetti. Se i progetti di attestatore e di implementatore sono lo stesso progetto, utilizza lo stesso ID progetto per entrambe le variabili.
DEPLOYER_PROJECT_ID=DEPLOYER_PROJECT_ID= DEPLOYER_PROJECT_NUMBER="$( gcloud projects describe "${DEPLOYER_PROJECT_ID}" \ --format="value(projectNumber)" )" ATTESTOR_PROJECT_ID=ATTESTOR_PROJECT_ID ATTESTOR_PROJECT_NUMBER="$( gcloud projects describe "${ATTESTOR_PROJECT_ID}" \ --format="value(projectNumber)" )"
Devi anche recuperare i nomi degli account di servizio per i progetti:
DEPLOYER_SERVICE_ACCOUNT="service-${DEPLOYER_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com" ATTESTOR_SERVICE_ACCOUNT="service-${ATTESTOR_PROJECT_NUMBER}@gcp-sa-binaryauthorization.iam.gserviceaccount.com"
Creare una nota di Artifact Analysis
Autorizzazione binaria utilizza Artifact Analysis per archiviare i metadati attendibili utilizzati nella procedura di autorizzazione. Per ogni attestatore che crei, devi creare una nota di Artifact Analysis. Ogni attestazione viene memorizzata come un'occorrenza di questa nota.
Per creare la nota:
Configura le variabili di ambiente per archiviare l'ID nota e una descrizione leggibile da un essere umano:
NOTE_ID=NOTE_ID NOTE_URI="projects/${ATTESTOR_PROJECT_ID}/notes/${NOTE_ID}" DESCRIPTION=DESCRIPTION
Sostituisci quanto segue:
NOTE_ID
: il nome interno della nota in caratteri alfanumerici senza spazi, ad esempiotest-attestor-note
NOTE_URI
: il percorso completo della risorsa della notaDESCRIPTION
: un nome visualizzato leggibile per la nota, ad esempioTest Attestor Note
In un editor di testo, crea un file JSON che descriva la nota:
cat > /tmp/note_payload.json << EOM { "name": "${NOTE_URI}", "attestation": { "hint": { "human_readable_name": "${DESCRIPTION}" } } } EOM
Crea la nota inviando una richiesta HTTP all'API REST Artifact Analysis:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${ATTESTOR_PROJECT_ID}" \ --data-binary @/tmp/note_payload.json \ "https://containeranalysis.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/notes/?noteId=${NOTE_ID}"
Per verificare che la nota sia stata creata correttamente, esegui il seguente comando:
curl \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${ATTESTOR_PROJECT_ID}" \ "https://containeranalysis.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/notes/"
Imposta le autorizzazioni IAM sulla nota
Devi concedere un ruolo Identity and Access Management (IAM) all'account di servizio del progetto di attestazione nella risorsa Nota di Artifact Analysis. Aggiungi l'account di servizio del progetto di attestazione al ruolo containeranalysis.notes.occurrences.viewer
nel criterio IAM della nota.
Per aggiungere il ruolo:
Genera un file JSON contenente le informazioni necessarie per impostare il ruolo IAM nella nota:
cat > /tmp/iam_request.json << EOM { "resource": "${NOTE_URI}", "policy": { "bindings": [ { "role": "roles/containeranalysis.notes.occurrences.viewer", "members": [ "serviceAccount:${ATTESTOR_SERVICE_ACCOUNT}" ] } ] } } EOM
Aggiungi l'account di servizio e i ruoli di accesso richiesti al criterio IAM per la nota che hai creato:
curl -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "x-goog-user-project: ${ATTESTOR_PROJECT_ID}" \ --data-binary @/tmp/iam_request.json \ "https://containeranalysis.googleapis.com/v1/projects/${ATTESTOR_PROJECT_ID}/notes/${NOTE_ID}:setIamPolicy"
Utilizzo per più progetti
Se memorizzi l'attestatore in un progetto e esegui il deployment in un progetto separato,
devi concedere il ruolo roles/binaryauthorization.attestorsVerifier
all'account di servizio associato al progetto di deployment sull'attestatore.
Configurare le chiavi crittografiche
Autorizzazione binaria ti consente di utilizzare chiavi PKIX per verificare le attestazioni.
Genera una coppia di chiavi
In questa guida utilizzerai l'algoritmo di firma digitale con curva ellittica (ECDSA) consigliato per generare una coppia di chiavi PKIX. Puoi anche utilizzare coppie di chiavi RSA o PGP. Per ulteriori informazioni sugli algoritmi di firma, consulta la sezione Finalità e algoritmi delle chiavi.
Una coppia di chiavi PKIX comprende una chiave privata utilizzata dai firmatari per firmare le attestazioni e una chiave pubblica che aggiungi all'attestatore. Al momento del deployment, Autorizzazione binaria utilizza questa chiave pubblica per verificare la attestazione.
PKIX (Cloud KMS)
Per creare la coppia di chiavi in Cloud KMS:
Per configurare le variabili di ambiente necessarie per creare la coppia di chiavi, esegui i seguenti comandi:
KMS_KEY_PROJECT_ID=
KMS_KEY_PROJECT_ID
KMS_KEY_LOCATION=KMS_KEY_LOCATION
KMS_KEYRING_NAME=KMS_KEYRING_NAME
KMS_KEY_NAME=KMS_KEY_NAME
KMS_KEY_VERSION=KMS_KEY_VERSION
KMS_KEY_PURPOSE=asymmetric-signing KMS_KEY_ALGORITHM=KMS_KEY_ALGORITHM
KMS_PROTECTION_LEVEL=KMS_PROTECTION_LEVEL
Sostituisci quanto segue:
KMS_KEY_PROJECT_ID
: l'ID del progetto dove sono archiviate le chiaviKMS_KEY_LOCATION
: la posizione della chiaveKMS_KEYRING_NAME
: il nome della chiave automatizzataKMS_KEY_NAME
: il nome della chiaveKMS_KEY_VERSION
: la versione chiaveKMS_KEY_ALGORITHM
: l'algoritmo.ec-sign-p256-sha256
è consigliatoKMS_PROTECTION_LEVEL
: il livello di protezione, ad esempiosoftware
Per creare il portachiavi, esegui il seguente comando:
gcloud kms keyrings create ${KMS_KEYRING_NAME} \ --location ${KMS_KEY_LOCATION}
Per creare la chiave, esegui il seguente comando:
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}
Sostituisci quanto segue:
KMS_KEY_NAME
: il nome della chiaveKMS_KEY_LOCATION
: la posizione della chiaveKMS_KEYRING_NAME
: il nome della chiave automatizzataKMS_KEY_PURPOSE
: lo scopo della chiave, impostato suASYMMETRIC_SIGN
KMS_KEY_ALGORITHM
: l'algoritmo,ec-sign-p256-sha256
è consigliatoKMS_PROTECTION_LEVEL
: il livello di protezione, ad esempiosoftware
PKIX (chiave locale)
Per generare una nuova coppia di chiavi PKIX asimmetrica locale e memorizzarla in un file:
Genera la chiave privata:
PRIVATE_KEY_FILE è il nome del file contenente la chiave privata utilizzata per la firma del payload dell'attestazione.
PRIVATE_KEY_FILE="/tmp/ec_private.pem" openssl ecparam -genkey -name prime256v1 -noout -out ${PRIVATE_KEY_FILE}
Estrai la chiave pubblica dalla chiave privata e memorizzala in un file:
PUBLIC_KEY_FILE è il nome del file contenente la chiave pubblica memorizzata nell'attestatore.
PUBLIC_KEY_FILE="/tmp/ec_public.pem" openssl ec -in ${PRIVATE_KEY_FILE} -pubout -out ${PUBLIC_KEY_FILE}
Crea l'attestatore
Per creare l'attestatore:
Configura una variabile di ambiente per archiviare il nome dell'attestatore come definito in Autorizzazione binaria:
ATTESTOR_NAME=ATTESTOR_NAME
dove ATTESTOR_NAME è il nome dell'attestatore che vuoi creare (ad esempio
build-secure
oprod-qa
).Crea la risorsa attestatore in Autorizzazione binaria:
gcloud --project="${ATTESTOR_PROJECT_ID}" \ container binauthz attestors create "${ATTESTOR_NAME}" \ --attestation-authority-note="${NOTE_ID}" \ --attestation-authority-note-project="${ATTESTOR_PROJECT_ID}"
Aggiungi un'associazione di ruolo IAM per il progetto di deployment all'attestatore. Questo valore viene utilizzato da Autorizzazione binaria quando valuta un criterio per determinare se il progetto dispone delle autorizzazioni per accedere alle attestazioni associate.
gcloud container binauthz attestors add-iam-policy-binding \ "projects/${ATTESTOR_PROJECT_ID}/attestors/${ATTESTOR_NAME}" \ --member="serviceAccount:${DEPLOYER_SERVICE_ACCOUNT}" \ --role=roles/binaryauthorization.attestorsVerifier
Per aggiungere la chiave pubblica all'attestatore:
PKIX (Cloud KMS)
Per aggiungere la chiave pubblica di una coppia di chiavi Cloud KMS all'attestatore, esegui il seguente comando:
gcloud --project="${ATTESTOR_PROJECT_ID}" \ container binauthz attestors public-keys add \ --attestor="${ATTESTOR_NAME}" \ --keyversion-project="${KMS_KEY_PROJECT_ID}" \ --keyversion-location="${KMS_KEY_LOCATION}" \ --keyversion-keyring="${KMS_KEYRING_NAME}" \ --keyversion-key="${KMS_KEY_NAME}" \ --keyversion="${KMS_KEY_VERSION}"
PKIX (chiave locale)
Per aggiungere una chiave pubblica PKIX archiviata localmente a un attestatore, esegui il seguente comando:
gcloud --project="${ATTESTOR_PROJECT_ID}" \ container binauthz attestors public-keys add \ --attestor="${ATTESTOR_NAME}" \ --pkix-public-key-file=${PUBLIC_KEY_FILE} \ --pkix-public-key-algorithm=ecdsa-p256-sha256
Se aggiungi una chiave pubblica a un attestatore e non specifichi un ID chiave (che può essere una stringa qualsiasi), ne viene generato automaticamente uno nel formato RFC 6920:
ni:///sha-256;...
, dove...
è un hash codificato della chiave pubblica. Questo valore viene restituito nel campoid
dell'output del comando. L'ID restituito può essere salvato inPUBLIC_KEY_ID
e utilizzato per creare un'attestazione.
Salva l'ID chiave pubblica
Per creare un'attestazione, devi disporre dell'ID chiave pubblica.
Per salvare l'ID chiave pubblica, puoi copiarlo dall'output del comando binauthz attestors public-keys add
riportato sopra.
In alternativa, puoi visualizzare l'ID della chiave pubblica del tuo attestatore in qualsiasi momento utilizzando il seguente comando:
gcloud container binauthz attestors describe ${ATTESTOR}
.
Per salvare l'ID chiave pubblica in una variabile di ambiente, inserisci il seguente comando:
PUBLIC_KEY_ID=$(gcloud container binauthz attestors describe ${ATTESTOR_NAME} \
--format='value(userOwnedGrafeasNote.publicKeys[0].id)')
Verifica che l'attestatore sia stato creato
Per verificare che l'attestatore sia stato creato, esegui il seguente comando:
gcloud container binauthz attestors list \ --project="${ATTESTOR_PROJECT_ID}"
Passaggi successivi
- Scopri come creare attestazioni per il tuo attestatore.
- Aggiorna il criterio di autorizzazione binaria in modo da richiedere le attestazioni utilizzando la console Google Cloud, Google Cloud CLI e l'API REST.