Emissione di certificati che attestano l'identità di terze parti
Questo tutorial mostra come emettere certificati che attestino un l'identità di terze parti riflesso dell'identità e i pool di identità per i carichi di lavoro.
Puoi utilizzare la riflessione dell'identità per creare certificati che corrispondano ai dati verificati l'identità di un richiedente del certificato. Utilizzando la riflessione sull'identità, puoi limitare una che il richiedente dei certificati senza privilegi richiede solo di richiedere certificati con un il nome alternativo del soggetto (SAN) corrispondente all'identità nel proprio la credenziale.
Obiettivi
Questo tutorial fornisce informazioni su come utilizzare CA Service con i pool di identità per i carichi di lavoro per federare un'identità di terze parti e ottenere che attesti questa identità.
Prima di iniziare
Prima di iniziare, assicurati di aver compreso i seguenti concetti:
- Pool di identità per il carico di lavoro: i pool di identità per i carichi di lavoro consentono di gestire i carichi di lavoro di terze parti e i provider di identità. Per ulteriori informazioni, vedi Gestire i provider e i pool di identità per i carichi di lavoro.
- Federazione delle identità per i carichi di lavoro: la federazione delle identità per i carichi di lavoro sfrutta pool di identità per i carichi di lavoro per consentire alle identità di terze parti di accedere a Google Cloud i servizi di machine learning. Per ulteriori informazioni, vedi Identità carico di lavoro dell'AI.
- Servizio token di sicurezza (STS): consente di scambiare e credenziali di terze parti per i token proprietari (Google Cloud). Per ulteriori informazioni consulta Servizio token di sicurezza.
- Riflessione dell'identità: la funzionalità di riflessione dell'identità consente alla persona verificata l'identità di un richiedente del certificato passa al certificato richiesto. Per per ulteriori informazioni, consulta riflessione.
Assicurati di disporre dei seguenti IAM ruoli:
- Per gestire le autorità di certificazione (CA) e i pool di CA e richiedere
devi avere CA Service Operation Manager
(
privateca.caManager
). Per ulteriori informazioni su IAM ruoli per CA Service, consulta Controllo dell'accesso con IAM. - Per gestire i provider e i pool di identità per i carichi di lavoro, devi disporre del
Ruolo Amministratore pool Workload Identity (
iam.workloadIdentityPoolAdmin
). - Per creare un account di servizio, devi avere l'Amministratore account di servizio
(
iam.serviceAccountAdmin
).
Per informazioni sulla concessione dei ruoli IAM, consulta Gestire l'accesso a progetti, cartelle per le organizzazioni. Puoi concedere ai ruoli IAM richiesti a un Account Google, un account di servizio, Un gruppo Google, un account Google Workspace o un dominio Cloud Identity.
Configura un provider e un pool di identità per i carichi di lavoro
Questo tutorial spiega come utilizzare Google OpenID Connect (OIDC). combinato con un account di servizio per agire come un'identità di terze parti. La Il provider OIDC degli account Google agisce come provider di identità di terze parti (IdP) e L'account di servizio Google Cloud è un'identità di terze parti di esempio dichiarata da questo IdP.
I pool di identità per i carichi di lavoro supportano vari provider di identità, tra cui Microsoft Azure/Active Directory on-premise, AWS e soluzioni basate su SAML e i provider di identità.
Per configurare un pool di identità per i carichi di lavoro e un provider, segui questi passaggi: 1. Per rappresentare un insieme attendibile di identità federate, crea un carico di lavoro pool di identità:
```
gcloud iam workload-identity-pools create IDENTITY_POOL_ID --location global --display-name "tutorial-wip"
```
Replace the following:
- <var>IDENTITY_POOL_ID</var>: The unique identifier of the new workload
identity pool.
Crea un provider di pool di identità per i carichi di lavoro per la tua identità di terze parti fornitore:
gcloud iam workload-identity-pools providers create-oidc PROVIDER_ID --location global --workload-identity-pool IDENTITY_POOL_ID --display-name "tutorial-oidc" --attribute-mapping "google.subject=assertion.sub" --issuer-uri="https://accounts.google.com"
Sostituisci quanto segue:
- PROVIDER_ID: l'identificatore univoco del provider di identità che vuoi creare nel pool di identità per i carichi di lavoro.
Puoi personalizzare i seguenti flag in base al tuo caso d'uso:
attribute-mapping
: questo flag imposta la mappatura tra il gruppo di terze parti rivendicazioni alla rivendicazione principale di Google,google.subject
.google.subject
è una mappatura obbligatoria che puoi impostare su qualsiasi rivendicazione o combinazione di che utilizzano un modello CEL un'espressione di base. Per ulteriori informazioni, vedi Definire una mappatura degli attributi e .issuer-uri
: per i provider OIDC, questo flag è un accesso pubblico endpoint che Google contatta per la verifica di terze parti di token. Per saperne di più, consulta Preparazione di un'identità esterna dell'utente.
Per ulteriori informazioni sulla configurazione di un'identità per i carichi di lavoro come provider di identità, consulta Configurazione di Workload Identity dell'AI.
Crea un pool di CA e una CA emittente
Questa sezione spiega come creare un pool di CA e aggiungere un pool di CA CA. Puoi utilizzare questo pool di CA per emettere con riferimento all'identità certificati. Se vuoi utilizzare un pool di CA e una CA esistenti, puoi saltare .
Anziché una CA radice, puoi anche scegliere di creare una CA subordinata. Creazione in corso... una CA radice consente di abbreviare la procedura.
Crea un pool di CA nel livello DevOps:
gcloud privateca pools create CA_POOL_ID --location LOCATION --tier devops
Sostituisci quanto segue:
- CA_POOL_ID: l'ID del pool di CA del servizio di CA che emette i certificati.
- LOCATION: la località del pool di CA.
Per saperne di più sulla creazione di pool di CA, consulta Crea un pool di CA.
Crea una CA radice:
gcloud privateca roots create CA_ID --pool CA_POOL_ID --location LOCATION --subject "CN=test,O=test-org"
Sostituisci quanto segue:
- CA_ID: l'ID dell'autorità di certificazione che emette i certificati.
- CA_POOL_ID: l'ID del pool di CA del servizio di CA che emette i certificati.
- LOCATION: la località del pool di CA.
Per ulteriori informazioni sulla creazione di una CA radice, consulta Crea una CA radice.
Abilita le identità federate dal pool di identità per i carichi di lavoro per emettere i problemi dal pool di CA. La riflessione sull'identità richiede Richiedente certificato carichi di lavoro servizio CA (
roles/privateca.workloadCertificateRequester
) ruolo IAM per i richiedenti diCreateCertificate
.Puoi rappresentare le entità del pool di identità per i carichi di lavoro in vari livelli di granularità, che vanno da un singolo soggetto a tutte le identità nel pool tra i provider. Per saperne di più, consulta le entità o i set di entità disponibili (utilizza la scheda Google Cloud CLI) più adatti al tuo caso d'uso.
gcloud privateca pools add-iam-policy-binding CA_POOL_ID --location LOCATION --role roles/privateca.workloadCertificateRequester --member "principalSet://iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/*"
Sostituisci quanto segue:
- PROJECT_NUMBER: il numero del progetto in cui hai ha creato il pool di identità per i carichi di lavoro.
Crea un account di servizio che rappresenti un'identità di terze parti
La procedura seguente presuppone che un account di servizio rappresenti un
di terze parti. Questa sezione illustra come utilizzare
GenerateIdToken
Endpoint IAM per recuperare un'identità di terze parti sotto forma di
un token OIDC. A seconda del caso d'uso, potrebbero essere necessari passaggi diversi
ottenere il token di identità di terze parti di tua scelta.
gcloud iam service-accounts create SERVICE_ACCOUNT
Sostituisci quanto segue:
- SERVICE_ACCOUNT: l'ID dell'account di servizio che rappresenta l' e l'identità di terze parti.
Emetti un certificato che attesti un'identità di terze parti
Prima di iniziare, assicurati di disporre del Creatore token account di servizio
(roles/iam.serviceAccountTokenCreator
) Ruolo IAM. Ti serve
ruolo IAM per chiamare l'API GenerateIdToken
.
Per ottenere un certificato che attesti un'identità di terze parti, procedi come descritto di seguito: seguenti:
Ottieni un token di identità di terze parti dal tuo provider di identità di terze parti.
curl
export ID_TOKEN=`curl -d '{"audience":"//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID"}' -H 'Content-Type: application/json' -H "Authorization: Bearer $(gcloud auth print-access-token)" https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:generateIdToken | python3 -c "import sys;import json;print(json.load(sys.stdin)['token'])"`
Sostituisci quanto segue:
- PROJECT_ID: l'ID del progetto Google Cloud del progetto che in cui si desidera creare le risorse.
Librerie client
Per accedere al token di terze parti in modo programmatico, puoi ottenere un token da un credenziale proveniente da file o creata da un URL. Per ulteriori informazioni, consulta Autenticazione mediante librerie client, gcloud CLI, o Terraform. In questo tutorial, seguiamo un flusso di lavoro per le credenziali dell'origine file.
Carica la credenziale in un percorso leggibile dal tuo certificato richiedente:
curl -d '{"audience":"//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID"}' -H 'Content-Type: application/json' -H "Authorization: Bearer $(gcloud auth print-access-token)" https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com:generateIdToken | python3 -c "import sys;import json; print(json.load(sys.stdin)['token']) > /tmp/oidc_token.txt
Sostituisci quanto segue:
- PROJECT_ID: l'ID del progetto che in cui si desidera creare le risorse.
Scambiare il token di terze parti con un token OAuth federato utilizzando STS Endpoint
token
:curl
export STS_TOKEN=`curl -L -X POST 'https://sts.googleapis.com/v1/token' -H 'Content-Type: application/json' \ -d '{ "grant_type": "urn:ietf:params:oauth:grant-type:token-exchange", "audience": "//iam.googleapis.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID/providers/PROVIDER_ID", "requested_token_type": "urn:ietf:params:oauth:token-type:access_token", "scope": "https://www.googleapis.com/auth/cloud-platform", "subject_token": "'$ID_TOKEN'", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt" }' | python3 -c "import sys;import json; print(json.load(sys.stdin)['access_token'])"`
Librerie client
- Crea una credenziale
di configurazione predefinito denominato
oidc_token.txt
che il certificato il codice di richiesta può essere letto per eseguire uno scambio di token.
gcloud iam workload-identity-pools create-cred-config projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/IDENTITY_POOL_ID --output-file=/tmp/cred_config.json --credential-source-file=/tmp/oidc_token.txt
- Leggi il file
oidc_token.txt
per impostare il meccanismo di autorizzazione nel client libreria:
Python
import json from google.auth import identity_pool with open('/tmp/cred_config.json', 'r') as f: json_config_info = json.loads(f.read()) credentials = identity_pool.Credentials.from_info(json_config_info) scoped_credentials = credentials.with_scopes( ['https://www.googleapis.com/auth/cloud-platform'])
- Crea una credenziale
di configurazione predefinito denominato
Invia una richiesta al servizio CA tramite
REFLECTED_SPIFFE
Modalità di richiesta dell'oggetto:curl
(Facoltativo) Se non disponi di una richiesta di firma del certificato, creane una eseguendo la .
export TUTORIAL_CSR=$(openssl req -newkey rsa:2048 -nodes -subj / -keyout tutorial_do_not_use.key)
Richiedi un certificato con CSR, una durata modalità di richiesta del soggetto:
curl -H "Authorization: Bearer $(echo $STS_TOKEN)" https://privateca.googleapis.com/v1/projects/PROJECT_NUMBER/locations/LOCATION/caPools/CA_POOL_ID/certificates\?alt\=json -X POST -H "Content-Type: application/json" -H 'Accept: application/json' --data '{"lifetime": "100s", "pemCsr": "'$TUTORIAL_CSR'", "subjectMode": "REFLECTED_SPIFFE"}'
Librerie client
Per inoltrare il token proprietario a CA Service, è necessario per creare un client con credenziali. Puoi quindi utilizzare questo client con credenziali per effettuare richieste di certificato:
Avvia un client CA Service con credenziali:
Python
caServiceClient = privateca_v1.CertificateAuthorityServiceClient(credentials=scoped_credentials)
Richiedi un certificato.
Python
Per eseguire l'autenticazione con CA Service, configura le credenziali predefinite dell'applicazione. Per ulteriori informazioni, vedi Configura l'autenticazione per un ambiente di sviluppo locale.
Verifica il certificato. Il certificato deve avere un oggetto contenente un singolo URI SAN. Il SAN che attesta l'identità è nel seguente formato:
spiffe://IDENTITY_POOL_ID.PROJECT_NUMBER.global.workload.id.goog/subject/<oidc_subject_number>
Sostituisci:
- IDENTITY_POOL_ID: l'identificatore univoco del nel pool di identità per i carichi di lavoro.
- PROJECT_NUMBER: il numero del progetto in in cui hai creato il pool di identità per i carichi di lavoro.
Esegui la pulizia
Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alla Le risorse di CA Service create dopo questo documento le seguenti operazioni utilizzando Google Cloud CLI:
Elimina la CA che hai creato.
Disattiva la CA:
gcloud privateca roots disable CA_ID --pool CA_POOL_ID --location LOCATION
Sostituisci:
- CA_ID: l'identificatore univoco della CA.
- CA_POOL_ID: l'identificatore univoco del pool di CA.
- LOCATION: la località del pool di CA.
Elimina la CA:
gcloud privateca roots delete CA_ID --pool CA_POOL_ID --location LOCATION --ignore-active-certificates
Sostituisci:
- CA_ID: l'identificatore univoco della CA.
- CA_POOL_ID: l'identificatore univoco del pool di CA.
- LOCATION: la località del pool di CA.
Elimina il pool di CA che hai creato.
gcloud privateca pools delete CA_POOL_ID --location LOCATION
Sostituisci:
- CA_POOL_ID: l'identificatore univoco del pool di CA.
- LOCATION: la località del pool di CA.
Per ulteriori informazioni sul comando
gcloud privateca pools delete
, consulta gcloud privateca pool delete.Elimina il pool di identità per i carichi di lavoro che hai creato:
gcloud iam workload-identity-pools delete IDENTITY_POOL_ID --location global
Sostituisci:
- IDENTITY_POOL_ID: l'identificatore univoco del carico di lavoro pool di identità.
Elimina l'account di servizio che hai creato:
gcloud iam service-accounts delete SERVICE_ACCOUNT@PROJECT_ID.iam.gserviceaccount.com
Sostituisci:
- SERVICE_ACCOUNT: l'identificatore univoco del carico di lavoro pool di identità.
- PROJECT_ID: il progetto proprietario dell'account di servizio.
Carico di lavoro del servizio CA
Richiedente del certificato (privateca.workloadCertificateRequester
)
Il ruolo IAM limita l'oggetto del certificato emesso solo
e l'identità del richiedente. Assicurati che gli utenti o i carichi di lavoro che utilizzano l'identità
di riflessione viene concesso
solo al servizio CA
Richiedente certificato carico di lavoro (privateca.workloadCertificateRequester
)
ruolo IAM. Per rispettare il principio del privilegio minimo, puoi:
evitare di concedere al richiedente del certificato di servizio CA
(privateca.certificateRequester
) Ruolo IAM.
Passaggi successivi
- Informazioni sui vari controlli delle norme che ti consentono di controllare le proprietà del certificato richiesto oltre che riflette l'identità.
- Leggi come configurare e gestire vari criteri Google Cloud.