Il servizio Policy dell'organizzazione fornisce vincoli che possono essere utilizzati nelle policy dell'organizzazione per limitare l'utilizzo degli account di servizio Identity and Access Management (IAM).
Molti di questi vincoli determinano se i service account e altre risorse possono essere creati o configurati in modi specifici. Questi vincoli non sono retroattivi; non influiscono sui service account creati e configurati in precedenza.
Prima di iniziare
Per impostare i
vincoli, devi disporre dell'autorizzazione per modificare le
policy dell'organizzazione. Ad esempio, il
orgpolicy.policyAdmin
ruolo ha l'autorizzazione per impostare i vincoli delle policy dell'organizzazione. Per saperne di più sulla gestione delle policy a livello di organizzazione, consulta la pagina
Creare policy dell'organizzazione.
Vincoli gestiti
I seguenti vincoli sono tipi di vincoli gestiti , impostati su true o false. I vincoli gestiti sono basati sulla piattaforma di policy dell'organizzazione personalizzata.
Per scoprire come creare policy dell'organizzazione che applichino i vincoli gestiti, consulta Creare policy dell'organizzazione.
Impedire che i ruoli Proprietario ed Editor vengano concessi ai service account predefiniti
Alcuni Google Cloud servizi creano automaticamente service account predefiniti. Quando viene creato un service account predefinito, gli viene concesso automaticamente il ruolo Editor (roles/editor) nel progetto. Qualcuno potrebbe anche scegliere di concedere un ruolo con privilegi elevati, come il ruolo Editor o Proprietario (roles/owner), a un account di servizio predefinito in un secondo momento.
I ruoli Editor e Proprietario sono ruoli di base con privilegi elevati. Non devi concederli a nessuna entità in produzione, inclusi i service account predefiniti.
Per impedire che ai service account predefiniti vengano concessi i ruoli Editor o Proprietario, utilizza il vincolo gestito iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts. Questo vincolo impedisce che ai service account predefiniti vengano concessi i ruoli Editor o Proprietario, automaticamente o manualmente.
Disattivare la creazione di account di servizio
Puoi utilizzare il vincolo gestito iam.managed.disableServiceAccountCreation per disattivare la creazione di nuovi service account. In questo modo puoi centralizzare la gestione dei service account senza limitare le altre autorizzazioni che gli sviluppatori hanno sui progetti.
Se applichi questo vincolo in un progetto, alcuni Google Cloud servizi non possono creare automaticamente service account predefiniti. Di conseguenza, se il progetto esegue carichi di lavoro che devono simulare l'identità di un service account, il progetto potrebbe non contenere un account di servizio che il carico di lavoro può utilizzare. Per risolvere questo problema, puoi abilitare la simulazione dell'identità dei account di servizio tra progetti. Quando abiliti questa funzionalità, puoi creare service account in un progetto centralizzato, quindi collegarli alle risorse in altri progetti.
Per saperne di più sull'organizzazione dei service account, consulta Dove creare i service account.
Disattivare la creazione di chiavi API associate ai service account
Puoi utilizzare il vin0/}colo gestito iam.managed.disableServiceAccountApiKeyCreationper
disattivare la creazione di chiavi API associate ai service account.
Quando questo vincolo è impostato, gli utenti non possono creare chiavi API associate ai service account nei progetti interessati dal vincolo.
Questo vincolo viene applicato per impostazione predefinita.
Disattivare la creazione di chiavi dei account di servizio
Puoi utilizzare il vincolo gestito iam.managed.disableServiceAccountKeyCreation per disattivare la creazione di nuove chiavi esterne dei account di servizio e chiavi HMAC di Cloud Storage. In questo modo puoi controllare l'utilizzo delle credenziali a lungo termine non gestite per i service account. Quando questo vincolo è impostato, non è possibile creare credenziali gestite dall'utente per i service account nei progetti interessati dal vincolo.
Disattivare il caricamento delle chiavi dei account di servizio
Puoi utilizzare il vincolo gestito iam.managed.disableServiceAccountKeyUpload per disattivare il caricamento delle chiavi pubbliche esterne nei service account. Quando questo vincolo è impostato, gli utenti non possono caricare chiavi pubbliche nei service account nei progetti interessati dal vincolo.
Vincoli gestiti (legacy) con regole booleane
I seguenti vincoli sono tipi di vincoli gestiti legacy con regole booleane, impostati su true o false.
Disattivare la concessione automatica dei ruoli ai service account predefiniti
Alcuni Google Cloud servizi creano automaticamente
service account predefiniti. Quando viene creato un account di servizio predefinito, gli viene concesso automaticamente il ruolo Editor (roles/editor) nel progetto.
Per migliorare la sicurezza, ti consigliamo vivamente di disattivare la concessione automatica dei ruoli. Utilizza il vincolo gestito legacy iam.automaticIamGrantsForDefaultServiceAccounts per disattivare la concessione automatica dei ruoli.
Disattivare la creazione di account di servizio
Puoi utilizzare il vincolo gestito legacy iam.disableServiceAccountCreation per disattivare la creazione di nuovi service account. In questo modo puoi centralizzare la gestione dei service account senza limitare le altre autorizzazioni che gli sviluppatori hanno sui progetti.
Se applichi questo vincolo in un progetto, alcuni Google Cloud servizi non possono creare automaticamente service account predefiniti. Di conseguenza, se il progetto esegue carichi di lavoro che devono simulare l'identità di un service account, il progetto potrebbe non contenere un account di servizio che il carico di lavoro può utilizzare. Per risolvere questo problema, puoi abilitare la simulazione dell'identità dei account di servizio tra progetti. Quando abiliti questa funzionalità, puoi creare service account in un progetto centralizzato, quindi collegarli alle risorse in altri progetti.
Per saperne di più sull'organizzazione dei service account, consulta Dove creare i service account.
Disattivare la creazione di chiavi dei account di servizio
Puoi utilizzare il vincolo gestito legacy iam.disableServiceAccountKeyCreationper disattivare la creazione di nuove chiavi esterne dei account di servizio e
chiavi HMAC di Cloud Storage. In questo modo puoi controllare l'utilizzo delle credenziali a lungo termine non gestite per i service account. Quando questo vincolo è impostato, non è possibile creare credenziali gestite dall'utente per i service account nei progetti interessati dal vincolo.
Disattivare il caricamento delle chiavi dei account di servizio
Puoi utilizzare il vincolo gestito legacy iam.disableServiceAccountKeyUpload per disattivare il caricamento delle chiavi pubbliche esterne nei service account. Quando questo vincolo è impostato, gli utenti non possono caricare chiavi pubbliche nei service account nei progetti interessati dal vincolo.
Disattivare il collegamento dei service account alle risorse in altri progetti
Ogni account di servizio si trova in un progetto. Puoi utilizzare il vincolo gestito legacy iam.disableCrossProjectServiceAccountUsage per impedire che i service account di un progetto vengano collegati alle risorse in altri progetti.
Se vuoi consentire l'utilizzo dei service account tra progetti, consulta Abilitare la simulazione dell'identità dei account di servizio tra progetti.
Limitare la rimozione dei blocchi dei progetti quando i service account vengono utilizzati tra progetti
Quando consenti il collegamento dei service account di un progetto alle risorse in altri
progetti, IAM aggiunge un
blocco del progetto che impedisce l'
eliminazione del progetto. Per impostazione predefinita, chiunque disponga dell'autorizzazione resourcemanager.projects.updateLiens sul progetto può eliminare il blocco.
Se applichi il vincolo gestito legacy iam.restrictCrossProjectServiceAccountLienRemoval, le entità possono eliminare il blocco solo se dispongono dell'autorizzazione resourcemanager.projects.updateLiens sull'organizzazione.
Ti consigliamo di applicare questo vincolo se uno dei tuoi progetti consente la simulazione dell'identità dei service account tra progetti.
Disattivare la creazione di cluster Workload Identity
Puoi utilizzare il vincolo gestito legacy iam.disableWorkloadIdentityClusterCreation per richiedere che la funzionalità Workload Identity sia disattivata al momento della creazione di tutti i nuovi cluster Google Kubernetes Engine. Se vuoi controllare attentamente l'accesso ai service account nella tua organizzazione, ti consigliamo di disattivare Workload Identity oltre alla creazione di account di servizio e alla creazione di chiavi dei account di servizio.
I cluster GKE esistenti con Workload Identity Federation for GKE abilitata non saranno interessati e continueranno a funzionare normalmente.
Impostare un vincolo gestito (legacy) con regole booleane
Console
Per impostare una policy dell'organizzazione che applichi un vincolo per limitare l'utilizzo dei service account:
Nella Google Cloud console, vai alla pagina Policy dell'organizzazione.
Nel selettore di progetti, seleziona l'organizzazione per cui vuoi limitare l'utilizzo account di servizio.
Fai clic su uno dei vincoli di utilizzo dei account di servizio elencati in questa pagina.
Fai clic su Gestisci policy.
In Si applica a, seleziona Esegui override della policy dell'unità organizzativa principale.
Fai clic su Aggiungi una regola.
In Applicazione forzata, seleziona On.
Per applicare la policy, fai clic su Imposta policy.
gcloud
Le policy possono essere impostate tramite Google Cloud CLI.
Per limitare l'utilizzo dei account di servizio, esegui il seguente comando:
gcloud resource-manager org-policies enable-enforce \
--organization 'ORGANIZATION_ID' \
CONSTRAINT_NAME
Dove CONSTRAINT_NAME è il vincolo che vuoi applicare.
Per disattivare l'applicazione forzata, puoi eseguire lo stesso comando con il flag
disable-enforce
Per scoprire di più sull'utilizzo dei vincoli nelle policy dell'organizzazione, consulta Creare policy dell'organizzazione.
Esempio di vincolo gestito (legacy) con regole booleane
Il seguente snippet di codice mostra una policy dell'organizzazione che applica il vincolo gestito legacy iam.disableServiceAccountCreation, che impedisce la creazione di service account:
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
Vincoli gestiti (legacy) con regole di elenco
I seguenti vincoli sono tipi di vincoli gestiti legacy con regole di elenco, impostati su un elenco di valori.
Estendere la durata dei token di accesso OAuth 2.0
Puoi creare un token di accesso OAuth 2.0 che fornisca credenziali di breve durata per un account di servizio.
Per impostazione predefinita, la durata massima di un token di accesso è di 1 ora (3600 secondi).
Tuttavia, puoi estendere la durata massima a 12 ore. A tale scopo, identifica i service account i cui token di accesso necessitano di una durata estesa, quindi aggiungi questi service account a una policy dell'organizzazione che includa il vincolo gestito legacy constraints/iam.allowServiceAccountCredentialLifetimeExtension.
Limitare la durata delle chiavi dei account di servizio
Una chiave del service account ti consente di autenticare una richiesta come account di servizio. Per impostazione predefinita, le chiavi dei account di servizio non scadono mai. Puoi modificare questa impostazione predefinita impostando una data di scadenza per tutte le chiavi appena create nel progetto, nella cartella o nell'organizzazione.
Per impostare una data di scadenza, utilizza il vincolo gestito legacy constraints/iam.serviceAccountKeyExpiryHours per specificare il numero di ore per cui una chiave appena creata è valida. Trascorso questo periodo di tempo, la chiave del account di servizio scade e non puoi più utilizzarla.
Questo vincolo gestito legacy accetta i seguenti valori ALLOW; non accetta valori DENY. Come best practice, utilizza la data di scadenza più breve che soddisfi le tue esigenze:
1h: 1 ora8h: 8 ore24h: 24 ore (1 giorno)168h: 168 ore (7 giorni)336h: 336 ore (14 giorni)720h: 720 ore (30 giorni)1440h: 1440 ore (60 giorni)2160h: 2160 ore (90 giorni)
Il vincolo constraints/iam.serviceAccountKeyExpiryHours non può essere unito a una policy padre. Per applicare questo vincolo, devi sostituire o ereditare la policy padre.
Specificare i provider di identità esterni consentiti
Se utilizzi
la federazione delle identità per i workload, che
consente alle identità esterne di accedere alle Google Cloud risorse, puoi specificare
quali provider di identità esterni sono consentiti. Per impostazione predefinita, sono consentiti tutti i provider. Per impostare un limite, utilizza il vincolo gestito legacy constraints/iam.workloadIdentityPoolProviders per specificare gli URI dei provider consentiti, utilizzando i seguenti formati:
Amazon Web Services (AWS):
https://sts.amazonaws.comPer limitare gli account AWS consentiti, utilizza il
constraints/iam.workloadIdentityPoolAwsAccountsvincolo gestito legacy come descritto in questa pagina.Microsoft Azure:
https://sts.windows.net/azure-tenant-idAltri provider di identità che supportano OpenID Connect (OIDC): utilizza l'URI dell'emittente del tuo provider di identità.
Specificare gli account AWS consentiti
Se utilizzi
la federazione delle identità per i workload, che
consente alle identità esterne di accedere alle Google Cloud risorse, puoi specificare
quali account AWS sono autorizzati ad accedere alle tue risorse. Per impostazione predefinita, i carichi di lavoro
di qualsiasi account AWS sono autorizzati ad accedere alle tue Google Cloud risorse. Per limitare gli account AWS consentiti, utilizza il vincolo gestito legacy constraints/iam.workloadIdentityPoolAwsAccounts per specificare un elenco di ID account consentiti.
Disattivare automaticamente le chiavi account di servizio esposte
Google Cloud di tanto in tanto rileva che una determinata chiave del account di servizio è stata esposta, ad esempio potrebbe rilevare una chiave in un repository pubblico. Per
specificare cosa Google Cloud fa con queste chiavi, utilizza il
iam.serviceAccountKeyExposureResponse vincolo gestito legacy. Le chiavi monitorate includono le chiavi dei account di servizio di lunga durata e le chiavi API associate a un account di servizio.
Questo vincolo gestito legacy accetta i seguenti valori ALLOW; non accetta valori DENY.
DISABLE_KEY: se Google Cloud rileva una chiave esposta, la disattiverà automaticamente. Crea anche un evento di Cloud Audit Logs e invia una notifica relativa alla chiave esposta ai proprietari del progetto e ai contatti per la sicurezza.WAIT_FOR_ABUSE: Google Cloud non disattiverà in modo proattivo le chiavi esposte. Tuttavia, Google Cloud potrebbe comunque disattivare le chiavi esposte se vengono utilizzate in modi che influiscono negativamente sulla piattaforma. Indipendentemente dal fatto che la chiave esposta sia disattivata o meno, Google Cloud crea un evento di Cloud Audit Logs e invia una notifica relativa alla chiave esposta ai proprietari del progetto e ai contatti per la sicurezza.
Quando Google Cloud rileva una chiave esposta o disattiva una chiave esposta, esegue anche le seguenti operazioni:
Genera eventi di audit log di Cloud.
Quando Google Cloud rileva che una chiave è stata compromessa, viene creato un provvedimento per comportamento illecito nei log degli eventi di abuso.
Quando Google Cloud disattiva una chiave, gli audit log contengono l'azione di disattivazione dell'entità
gcp-compromised-key-response@system.gserviceaccount.com.
Imposta il campo
extendedStatus.valuedella chiave esposta o disattivata. Il campo dello stato esteso include la località in cui è stata rilevata la perdita.
Ti consigliamo vivamente di impostare questo vincolo su DISABLE_KEY. L'impostazione di questo vincolo su WAIT_FOR_ABUSE aumenta il rischio che le chiavi esposte vengano utilizzate in modo improprio.
Se decidi di impostare il vincolo su WAIT_FOR_ABUSE, ti consigliamo di
abbonarti agli eventi di Cloud Audit Logs, di rivedere le informazioni di contatto per la sicurezza
nei contatti fondamentali,
e di assicurarti che i contatti per la sicurezza rispondano alle notifiche in modo tempestivo.
Il vincolo iam.serviceAccountKeyExposureResponse non può essere unito a una policy padre. Per applicare questo vincolo, devi sostituire la policy padre.
Impostare un vincolo gestito (legacy) con regole di elenco
Console
Per impostare una policy dell'organizzazione che contenga un vincolo gestito legacy:
Nella Google Cloud console, vai alla pagina Policy dell'organizzazione.
Nel selettore di progetti, seleziona la risorsa per cui vuoi impostare la policy dell'organizzazione.
Nella pagina Policy dell'organizzazione, seleziona un vincolo dall'elenco. Viene visualizzata la pagina Dettagli policy per il vincolo.
Per aggiornare la policy dell'organizzazione per questa risorsa, fai clic su Gestisci policy.
In Applicazione policy, seleziona un'opzione di applicazione:
- Per unire e valutare insieme le policy dell'organizzazione, seleziona Unisci con la risorsa padre. Per saperne di più sull'ereditarietà e sulla gerarchia delle risorse, consulta Valutazione della gerarchia.
- Per sostituire le policy ereditate da una risorsa padre, seleziona Sostituisci.
Fai clic su Aggiungi una regola.
In Valori policy, seleziona Personalizzato.
In Tipo di policy, seleziona Consenti.
In Valori personalizzati, inserisci il primo valore per il vincolo gestito legacy.
- Se vuoi aggiungere altri valori, fai clic su Aggiungi valore per creare altre righe e aggiungi un valore a ogni riga.
Al termine dell'aggiunta dei valori, fai clic su Fine.
Per applicare la policy, fai clic su Imposta policy.
gcloud
Le policy possono essere impostate tramite Google Cloud CLI:
gcloud resource-manager org-policies allow \ CONSTRAINT_NAME \ VALUE_1 [VALUE_N ...] \ --organization=ORGANIZATION_ID \
Sostituisci i seguenti valori:
CONSTRAINT_NAME: il nome del vincolo gestito legacy. Ad esempio,constraints/iam.allowServiceAccountCredentialLifetimeExtension.VALUE_1,VALUE_N...: Valori per il vincolo gestito legacy.
Per scoprire di più sull'utilizzo dei vincoli nelle policy dell'organizzazione, consulta Creare policy dell'organizzazione.
Esempio di vincolo gestito (legacy) con regole di elenco
Il seguente snippet di codice mostra una policy dell'organizzazione che applica il vincolo gestito legacy iam.allowServiceAccountCredentialLifetimeExtension, che estende la durata massima dei token di accesso OAuth 2.0 per i service account elencati:
name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
rules:
- values:
allowedValues:
- SERVICE_ACCOUNT_ADDRESS
Applicare i vincoli in modo condizionale utilizzando i tag
I tag possono essere utilizzati per includere o escludere le risorse con tag dall'applicazione forzata delle policy dell'organizzazione. Dopo aver creato un tag e averlo collegato a un service account, puoi aggiungere una condizione alla policy per includere o escludere in modo condizionale i service account con tag dall'applicazione forzata.
Per maggiori dettagli sull'utilizzo dei tag con le policy dell'organizzazione, consulta Definire l'ambito delle policy dell'organizzazione con i tag.
Messaggi di errore
Disattivare la creazione di account di servizio
Se iam.disableServiceAccountCreation è applicato, la creazione di un account di servizio non riuscirà e verrà visualizzato il seguente errore:
FAILED_PRECONDITION: Service account creation is not allowed on this project.
Disattivare la creazione di chiavi API associate ai service account
Se iam.managed.disableServiceAccountApiKeyCreation è applicato, la creazione di una chiave API associata a un account di servizio non riuscirà e verrà visualizzato il seguente errore:
FAILED_PRECONDITION: Operation denied by org policy: ["constraints/iam.managed.disableServiceAccountApiKeyCreation": "When enforced, disables creation of API Keys bound to service accounts."]
Disattivare la creazione di chiavi dei account di servizio
Se iam.disableServiceAccountKeyCreation è applicato, la creazione di un account di servizio non riuscirà e verrà visualizzato il seguente errore:
FAILED_PRECONDITION: Key creation is not allowed on this service account.
Disattivare la creazione di cluster Workload Identity
Se iam.disableWorkloadIdentityClusterCreation è applicato, la creazione di un cluster GKE con Workload Identity abilitato non riuscirà e verrà visualizzato il seguente errore:
FAILED_PRECONDITION: Workload Identity is disabled by the organization policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your administrator to enable this feature.
Risoluzione dei problemi noti
Service account predefiniti
L'applicazione del vincolo iam.disableServiceAccountCreation impedirà la creazione di service account nel progetto. Questa limitazione influisce anche sui
Google Cloud servizi che, se abilitati, creano automaticamente
service account predefiniti nel progetto, ad esempio:
- Compute Engine
- GKE
- App Engine
- Dataflow
Se viene applicato il vincolo iam.disableServiceAccountCreation, il tentativo di abilitare questi servizi non riuscirà perché non è possibile creare i relativi service account predefiniti.
Per risolvere il problema:
- Rimuovi temporaneamente il vincolo
iam.disableServiceAccountCreation. - Abilita i servizi desiderati.
- Crea eventuali altri service account desiderati.
- Infine, riapplica il vincolo.