In questa pagina viene spiegato come caricare una chiave pubblica per un account di servizio. Dopo aver caricato la chiave pubblica, puoi utilizzare la chiave privata della coppia di chiavi per eseguire l'autenticazione come account di servizio.
Prima di iniziare
Abilita l'API IAM.
Ruoli richiesti per abilitare le API
Per abilitare le API, devi disporre del ruolo IAM Amministratore utilizzo servizi (
roles/serviceusage.serviceUsageAdmin), che contiene l'autorizzazioneserviceusage.services.enable. Scopri come concedere i ruoli.Informazioni sulle credenziali dei service account.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per caricare le chiavi dei account di servizio, chiedi all'amministratore di concederti il ruolo IAM Amministratore chiavi service account (roles/iam.serviceAccountKeyAdmin) nel progetto o nel account di servizio di cui vuoi gestire le chiavi.
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.
A seconda della configurazione della policy dell'organizzazione, prima di caricare una chiave potrebbe essere necessario consentire il caricamento delle chiavi dei service account nel progetto.
Per ottenere le autorizzazioni necessarie per consentire il caricamento delle chiavi dei account di servizio in un progetto, chiedi all'amministratore di concederti i seguenti ruoli IAM nella tua organizzazione:
- Amministratore delle policy dell'organizzazione (
roles/orgpolicy.policyAdmin) - Visualizzatore dell'organizzazione (
roles/resourcemanager.organizationViewer) - Amministratore dei tag (
roles/resourcemanager.tagAdmin)
Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.
Questi ruoli predefiniti contengono le autorizzazioni necessarie per consentire il caricamento delle chiavi dei account di servizio in un progetto. Per vedere quali sono esattamente le autorizzazioni richieste, espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
Per consentire il caricamento delle chiavi dei account di servizio in un progetto sono necessarie le seguenti autorizzazioni:
-
orgpolicy.constraints.list -
orgpolicy.customConstraints.create -
orgpolicy.customConstraints.delete -
orgpolicy.customConstraints.get -
orgpolicy.customConstraints.list -
orgpolicy.customConstraints.update -
orgpolicy.policies.create -
orgpolicy.policies.delete -
orgpolicy.policies.list -
orgpolicy.policies.update -
orgpolicy.policy.get -
orgpolicy.policy.set -
resourcemanager.organizations.get -
resourcemanager.projects.listTagBindings -
resourcemanager.projects.listEffectiveTags -
resourcemanager.tagKeys.get -
resourcemanager.tagKeys.list -
resourcemanager.tagValues.list -
resourcemanager.tagValues.get
Potresti anche ottenere queste autorizzazioni con ruoli personalizzati o altri ruoli predefiniti.
Consenti il caricamento delle chiavi dei account di servizio
Prima di creare una chiave account di servizio, assicurati che il vincolo della policy dell'organizzazione iam.disableServiceAccountKeyUpload non sia applicato al tuo progetto. Se questo vincolo è applicato al tuo progetto, non puoi caricare le chiavi dei account di servizio in quel progetto.
Ti consigliamo di applicare questo vincolo alla maggior parte dei progetti e di esentare solo i progetti che richiedono effettivamente le chiavi dei account di servizio. Per saperne di più sui metodi di autenticazione alternativi, consulta Scegliere il metodo di autenticazione giusto per il tuo caso d'uso.
Per esentare un progetto dal vincolo della policy dell'organizzazione iam.disableServiceAccountKeyUpload, chiedi a un amministratore delle policy dell'organizzazione di eseguire le seguenti operazioni:
-
A livello di organizzazione, crea una chiave e un valore tag che utilizzerai per definire se una risorsa deve essere esentata dalla policy dell'organizzazione. Ti consigliamo di creare un tag con la chiave
disableServiceAccountKeyUploade i valorienforcedenot_enforced.Per scoprire come creare chiavi e valori dei tag, consulta Creare e definire un nuovo tag.
-
Collega il tag
disableServiceAccountKeyUploadall'organizzazione e imposta il relativo valore suenforced. Tutte le risorse dell'organizzazione ereditano questo valore del tag, a meno che non venga sovrascritto con un valore del tag diverso.Per scoprire come collegare i tag alle risorse, consulta Collegare i tag alle risorse.
-
Per ogni progetto o cartella che vuoi esentare dalla policy dell'organizzazione, collega il
disableServiceAccountKeyUploadtag e imposta il relativo valore sunot_enforced. L'impostazione di un valore del tag per un progetto o una cartella in questo modo sostituisce il valore del tag ereditato dall' organizzazione. -
Crea o aggiorna la policy dell'organizzazione che impedisce il caricamento delle chiavi dei account di servizio in modo che non applichi il vincolo alle risorse esentate. Questa policy deve avere le seguenti regole:
-
Configura il vincolo
iam.disableServiceAccountKeyUploadin modo che non venga applicato a nessuna risorsa con il tagdisableServiceAccountKeyUpload: not_enforced. La condizione in questa regola dovrebbe essere simile alla seguente:"resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyUpload', 'not_enforced')" -
Configura il vincolo
iam.disableServiceAccountKeyUploadin modo che venga applicato a tutte le altre risorse.
-
Carica una chiave pubblica per un account di servizio
Puoi caricare la parte di chiave pubblica di una coppia di chiavi gestita dall'utente per associarla a un service account. Dopo aver caricato la chiave pubblica, puoi utilizzare la chiave privata della coppia di chiavi come chiave del service account.
La chiave che carichi deve essere una chiave pubblica RSA inserita in un certificato X.509 v3 e codificata in base64. Puoi utilizzare strumenti come OpenSSL per generare una chiave e un certificato in questo formato.
Non includere informazioni private nel certificato X.509. In particolare, utilizza un argomento generico e non aggiungere attributi facoltativi. I certificati sono visibili pubblicamente; le informazioni private contenute nel certificato sono visibili a chiunque lo recuperi. Per ulteriori informazioni, consulta Evitare di divulgare informazioni riservate nei certificati X.509 caricati.
Se il vincolo della policy dell'organizzazione iam.serviceAccountKeyExpiryHours è applicato al tuo progetto, la chiave che carichi deve scadere entro il periodo di tempo specificato nel vincolo.
Per impostare la data e l'ora di scadenza della chiave, utilizza il valore -days nel comando utilizzato per generare il certificato X.509. Se il valore -days è maggiore del periodo di tempo specificato nel vincolo, il comando non riuscirà.
Ad esempio, il seguente comando genera una coppia di chiave RSA a 2048 bit e inserisce la chiave pubblica in un certificato autofirmato valido per 365 giorni:
openssl req -x509 -nodes -newkey rsa:2048 -days 365 \
-keyout /path/to/private_key.pem \
-out /path/to/public_key.pem \
-subj "/CN=unused"
Puoi quindi caricare il file public_key.pem come chiave pubblica per un service account.
Console
- Nellaconsole, vai alla pagina Service account. Cloud de Confiance
- Seleziona un progetto.
- Nella pagina Service account, fai clic sull'indirizzo email del account di servizio per cui vuoi caricare una chiave.
- Fai clic sulla scheda Chiavi.
- Fai clic sul menu a discesa Aggiungi chiave, quindi seleziona Carica chiave esistente.
- Fai clic su Sfoglia, quindi trova e seleziona il file della chiave pubblica. In alternativa, puoi copiare e incollare il contenuto del file della chiave pubblica nella casella Incolla una chiave esistente.
- Fai clic su Carica.
gcloud
Esegui il
gcloud iam service-accounts keys upload
comando per caricare una chiave pubblica per la firma delle chiavi dei account di servizio.
Sostituisci i seguenti valori:
KEY_FILE: il percorso del file contenente i dati della chiave da caricare, ad esempio./public_key.pem.SA_NAME: il nome del account di servizio per cui caricare una chiave.PROJECT_ID: il tuo Cloud de Confiance ID progetto.
gcloud iam service-accounts keys upload KEY_FILE \
--iam-account=SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com
L'output contiene un identificatore univoco per la chiave caricata:
Name: projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0
Per determinare se il comando è stato eseguito correttamente, esegui il
gcloud iam service-accounts keys list
comando:
gcloud iam service-accounts keys list \
--iam-account=SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com
L'output conterrà lo stesso identificatore univoco restituito dopo la creazione della chiave:
| KEY_ID | CREATED_AT | EXPIRES_AT | DISABLED |
| c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0 | 2019-06-26T21:01:42Z | 9999-12-31T23:59:59Z |
REST
Il
projects.serviceAccounts.keys.upload
metodo carica la chiave pubblica da una coppia di chiavi gestita dall'utente e la aggiunge al
account di servizio.
Prima di utilizzare i dati della richiesta, apporta le sostituzioni seguenti:
PROJECT_ID: il tuo Cloud de Confiance progetto ID. Gli ID progetto sono stringhe alfanumeriche, ad esempiomy-project.SA_NAME: il nome del account di servizio a cui associare la chiave.PUBLIC_KEY_DATA: i dati della chiave pubblica per la coppia di chiavi. Deve essere una chiave pubblica RSA inserita in un certificato X.509 v3. Codifica i dati della chiave pubblica in base64, inclusa la prima riga,-----BEGIN CERTIFICATE-----, e l'ultima riga,-----END CERTIFICATE-----.
Metodo HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_NAME@PROJECT_ID.s3ns.iam.gserviceaccount.com/keys:upload
Corpo JSON della richiesta:
{
"publicKeyData": "PUBLIC_KEY_DATA"
}
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
{
"name": "projects/my-project/serviceAccounts/my-service-account@my-project.s3ns.iam.gserviceaccount.com/keys/c7b74879da78e4cdcbe7e1bf5e129375c0bfa8d0",
"validAfterTime": "2020-05-17T19:31:19Z",
"validBeforeTime": "2021-05-17T19:31:19Z",
"keyAlgorithm": "KEY_ALG_RSA_2048",
"keyOrigin": "USER_PROVIDED",
"keyType": "USER_MANAGED"
}
Disabilita i caricamenti delle chiavi pubbliche
Per disabilitare la possibilità di caricare le chiavi per il tuo progetto, consulta Limitare il caricamento account di servizio account.
Passaggi successivi
- Scopri come creare ed eliminare le account di servizio account.
- Scopri come elencare e ottenere le account di servizio account.
- Scopri le alternative alle chiavi dei account di servizio per l'autenticazione.
- Scopri come utilizzare le chiavi dei account di servizio per eseguire l'autenticazione come service account.
- Scopri le best practice per la gestione delle chiavi account di servizio keys.