Questa pagina mostra come utilizzare la convalida continua (CV) di Autorizzazione binaria del controllo della firma Sigstore. Il controllo verifica le firme generate da Sigstore delle immagini container associate ai pod in esecuzione in un cluster GKE in cui è abilitata la verifica della firma. La differenza principale tra questo controllo e il controllo semplice dell'attestazione della firma è che il flusso di lavoro di firma Sigstore non utilizza le note di Artifact Analysis per collegare le firme alle immagini. Tutte le firme vengono memorizzate insieme all'immagine che firmano.
Questo controllo supporta solo i repository Artifact Registry.
Costi
Questa guida utilizza i seguenti servizi Google Cloud :
- Autorizzazione binaria, ma CV è disponibile senza costi durante la fase di anteprima
- GKE
- Cloud Key Management Service
- Artifact Registry
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.
Prima di iniziare
- Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .
Abilita le API Autorizzazione binaria, Cloud Key Management Service, Google Kubernetes Engine e Artifact Registry:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com artifactregistry.googleapis.com -
Installa Google Cloud CLI.
-
Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.
-
Per inizializzare gcloud CLI, esegui questo comando:
gcloud init -
Crea o seleziona un Google Cloud progetto.
Ruoli richiesti per selezionare o creare un progetto
- Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per il quale ti è stato concesso un ruolo.
-
Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto
(
roles/resourcemanager.projectCreator), che contiene l'autorizzazioneresourcemanager.projects.create. Scopri come concedere i ruoli.
-
Creare un progetto Google Cloud :
gcloud projects create PROJECT_ID
Sostituisci
PROJECT_IDcon un nome per il progetto Google Cloud che stai creando. -
Seleziona il progetto Google Cloud che hai creato:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_IDcon il nome del progetto Google Cloud .
-
Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .
Abilita le API Autorizzazione binaria, Cloud Key Management Service, Google Kubernetes Engine e Artifact Registry:
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre dell'autorizzazione
serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.gcloud services enable binaryauthorization.googleapis.com
cloudkms.googleapis.com container.googleapis.com artifactregistry.googleapis.com - Assicurati che gcloud CLI sia aggiornata all'ultima versione.
- Installa lo strumento a riga di comando
kubectl. - Se i criteri di Autorizzazione binaria e i cluster GKE si trovano in progetti diversi, assicurati che Autorizzazione binaria sia abilitata in entrambi i progetti.
- Installa lo strumento a riga di comando
cosign.
Ruoli obbligatori
Questa sezione mostra come impostare i ruoli per questo controllo.
Panoramica
Se esegui tutti i prodotti menzionati in questa guida nello stesso progetto, non devi impostare alcuna autorizzazione. Autorizzazione binaria configura correttamente i ruoli quando lo abiliti. Se esegui i prodotti in progetti diversi, devi impostare i ruoli come descritto in questa sezione.
Per assicurarti che l'agente di servizio Binary Authorization in ogni progetto disponga delle autorizzazioni necessarie per valutare il controllo della firma CV Sigstore, chiedi all'amministratore di concedere i seguenti ruoli IAM all'agente di servizio Binary Authorization in ogni progetto:
-
Se il progetto del cluster è diverso dal progetto del criterio:
Valutatore criterio di autorizzazione binaria (
roles/binaryauthorization.policyEvaluator) nell'agente di servizio di autorizzazione binaria del progetto del cluster -
Se il progetto del repository di immagini è diverso dal progetto delle policy:
Lettore di Artifact Registry (
roles/artifactregistry.reader) sull'agente di servizio Autorizzazione binaria del progetto delle policy
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
L'amministratore potrebbe anche essere in grado di concedere all'agente di servizio Autorizzazione binaria in ogni progetto le autorizzazioni richieste tramite ruoli personalizzati o altri ruoli predefiniti.
Concedere ruoli utilizzando gcloud CLI
Per assicurarti che l'agente di servizio di autorizzazione binaria in ogni progetto disponga delle autorizzazioni necessarie per valutare il controllo della firma CV Sigstore, concedi all'agente di servizio di autorizzazione binaria in ogni progetto i seguenti ruoli IAM:
Concedi all'agente del servizio di autorizzazione binaria del progetto cluster l'autorizzazione ad accedere alla policy nel progetto policy.
Recupera il service agent di Autorizzazione binaria del progetto del cluster:
PROJECT_NUMBER=$(gcloud projects list --filter="projectId:CLUSTER_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") CLUSTER_SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"Sostituisci
CLUSTER_PROJECT_IDcon l'ID progetto del cluster.Consenti a CV di valutare la policy sul cluster:
gcloud projects add-iam-policy-binding POLICY_PROJECT_ID \ --member="serviceAccount:$CLUSTER_SERVICE_ACCOUNT" \ --role='roles/binaryauthorization.policyEvaluator'Sostituisci
POLICY_PROJECT_IDcon l'ID del progetto che contiene la tua policy.
Consenti all'agente di servizio di autorizzazione binaria del progetto di policy di accedere alle firme nel tuo repository:
Ottieni il service agent di Autorizzazione binaria del progetto della policy:
PROJECT_NUMBER=$(gcloud projects list \ --filter="projectId:POLICY_PROJECT_ID" \ --format="value(PROJECT_NUMBER)") SERVICE_ACCOUNT="service-$PROJECT_NUMBER@gcp-sa-binaryauthorization.iam.gserviceaccount.com"Sostituisci
POLICY_PROJECT_IDcon l'ID del progetto che contiene la tua policy.Concedi il ruolo:
gcloud projects add-iam-policy-binding REPOSITORY_PROJECT_ID \ --member="serviceAccount:$SERVICE_ACCOUNT" \ --role='roles/artifactregistry.reader'Sostituisci
REPOSITORY_PROJECT_IDcon l'ID del progetto che contiene il tuo repository.
Creare una coppia di chiavi
In questa sezione crei una coppia di chiavi asimmetriche Elliptic Curve Digital Signature Algorithm (ECDSA).
Utilizzi la chiave privata per firmare l'immagine, creando l'attestazione. Devi includere la chiave pubblica nelle norme della piattaforma. Quando CV controlla l'attestazione, utilizza la chiave pubblica per verificarla.
Puoi utilizzare Cloud Key Management Service (Cloud KMS) o chiavi locali, ma ti consigliamo di utilizzare le chiavi Cloud KMS per la produzione.
PKIX Cloud KMS Cosign
Configura le variabili di ambiente necessarie per creare la coppia di chiavi. Per farlo, ti consigliamo di compilare i segnaposto nel seguente comando e poi eseguirlo.
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID KMS_KEYRING_NAME=KMS_KEYRING_NAME KMS_KEY_NAME=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=1Sostituisci quanto segue:
KMS_KEY_PROJECT_ID: il tuo ID progettoKMS_KEYRING_NAME: un nome per le chiavi automatizzate Cloud KMSKMS_KEY_NAME: un nome per la chiave Cloud KMS
Genera la chiave con la CLI Cosign:
cosign generate-key-pair \ --kms gcpkms://projects/${KMS_KEY_PROJECT_ID}/locations/${KMS_KEY_LOCATION}/keyRings/${KMS_KEYRING_NAME}/cryptoKeys/${KMS_KEY_NAME}Registra la posizione della chiave pubblica:
Cosign salva automaticamente la chiave pubblica generata come
cosign.pubnella directory in cui è stato eseguito il comandogenerate-key-pair. Salva la posizione di questo file in una variabile per i comandi futuri.PUBLIC_KEY_FILE="$(pwd)/cosign.pub"
PKIX Cloud KMS gcloud
Per creare la coppia di chiavi in Cloud KMS:
Configura le variabili di ambiente necessarie per creare la coppia di chiavi. Per farlo, ti consigliamo di compilare i segnaposto nel seguente comando e poi eseguirlo.
KMS_KEY_PROJECT_ID=KMS_KEY_PROJECT_ID KMS_KEYRING_NAME=KMS_KEYRING_NAME KMS_KEY_NAME=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=1Sostituisci quanto segue:
KMS_KEY_PROJECT_ID: il tuo ID progettoKMS_KEYRING_NAME: un nome per le chiavi automatizzate Cloud KMSKMS_KEY_NAME: un nome per la chiave Cloud KMS