Il servizio Organization Policy fornisce vincoli che possono essere utilizzati nei criteri dell'organizzazione per limitare l'utilizzo degli account di servizio Identity and Access Management (IAM).
Molti di questi vincoli determinano se gli account di servizio e altre risorse possono essere creati o configurati in modi specifici. Questi vincoli non sono retroattivi; non influiscono sugli account di servizio creati e configurati in precedenza.
Prima di iniziare
Per impostare i vincoli, devi disporre dell'autorizzazione per modificare i criteri dell'organizzazione. Ad esempio, il ruolo orgpolicy.policyAdmin ha l'autorizzazione per impostare i vincoli dei criteri dell'organizzazione. Per scoprire di più sulla gestione delle policy a livello di organizzazione, consulta la pagina Crea policy dell'organizzazione.
Vincoli gestiti
I seguenti vincoli sono tipi di vincoli gestiti, impostati su true o false. I vincoli gestiti si basano sulla piattaforma policy dell'organizzazione personalizzata.
Per scoprire come creare policy dell'organizzazione che applichino vincoli gestiti, consulta Creare policy dell'organizzazione.
Impedisci che i ruoli Proprietario ed Editor vengano concessi ai service account predefiniti
Alcuni servizi Google Cloud creano automaticamente service account
predefiniti. Quando viene creato un service account predefinito, gli viene automaticamente assegnato 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.
Disattiva creazione service account
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 servizi Google Cloud non possono creare automaticamente service account predefiniti. Di conseguenza, se il progetto esegue carichi di lavoro che devono rappresentare 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à deaccount di serviziont tra progetti. Quando abiliti questa funzionalità, puoi creare service account in un progetto centralizzato, quindi collegarli a risorse in altri progetti.
Per saperne di più sull'organizzazione dei service account, consulta Dove creare i service account.
Disattiva la creazione di chiavi API associate ai service account
Puoi utilizzare il vincolo gestito iam.managed.disableServiceAccountApiKeyCreation per
disattivare la creazione di chiavi API associate ai service account.
Quando questo vincolo è impostato, gli utenti non possono creare chiavi API associate a service account nei progetti interessati dal vincolo.
Questo vincolo viene applicato per impostazione predefinita.
Disattiva creazione chiavi service account
Puoi utilizzare il vincolo gestito iam.managed.disableServiceAccountKeyCreation per disattivare la creazione di nuove chiavi esterne del account di servizio e di chiavi HMAC di Cloud Storage. In questo modo puoi
controllare l'utilizzo di credenziali a lungo termine non gestite per i service account. Quando
questo vincolo è impostato, non è possibile creare credenziali gestite dall'utente per gli account di servizio nei progetti interessati dal vincolo.
Disabilita caricamento chiavi service account
Puoi utilizzare il vincolo gestito iam.managed.disableServiceAccountKeyUpload per disattivare il caricamento di chiavi pubbliche esterne negli service account. Se questo
vincolo è impostato, gli utenti non possono caricare chiavi pubbliche sui 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, impostate su true o false.
Disattiva la concessione automatica dei ruoli ai service account predefiniti
Alcuni servizi Google Cloud creano automaticamente
service account predefiniti. Quando viene creato un account di servizio predefinito, gli viene automaticamente concesso il ruolo Editor (roles/editor) nel progetto.
Per migliorare la sicurezza, ti consigliamo vivamente di disattivare la concessione automatica dei ruoli. Utilizza il vincolo iam.automaticIamGrantsForDefaultServiceAccounts legacy gestito
per disattivare la concessione automatica dei ruoli.
Disattiva creazione service account
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 servizi Google Cloud non possono creare automaticamente service account predefiniti. Di conseguenza, se il progetto esegue carichi di lavoro che devono rappresentare 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à deaccount di serviziont tra progetti. Quando abiliti questa funzionalità, puoi creare service account in un progetto centralizzato, quindi collegarli a risorse in altri progetti.
Per saperne di più sull'organizzazione dei service account, consulta Dove creare i service account.
Disattiva creazione chiavi service account
Puoi utilizzare il vincolo gestito legacy iam.disableServiceAccountKeyCreation per disattivare la creazione di nuove chiavi esterne del account di servizio e di chiavi HMAC di Cloud Storage. In questo modo puoi
controllare l'utilizzo di credenziali a lungo termine non gestite per i service account. Quando
questo vincolo è impostato, non è possibile creare credenziali gestite dall'utente per gli account di servizio nei progetti interessati dal vincolo.
Disabilita caricamento chiavi service account
Puoi utilizzare il vincolo gestito legacy iam.disableServiceAccountKeyUpload per disabilitare il caricamento di chiavi pubbliche esterne nei service account. Se questo
vincolo è impostato, gli utenti non possono caricare chiavi pubbliche sui service account nei
progetti interessati dal vincolo.
Disabilita 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 a risorse in altri
progetti.
Se vuoi consentire l'utilizzo dei service account in più progetti, consulta la sezione Abilitare la rappresentazione dell'identità del account di servizio tra progetti.
Limita la rimozione dei blocchi del progetto quando i service account vengono utilizzati in più progetti
Quando consenti il collegamento dei service account di un progetto a risorse in altri progetti, IAM aggiunge un vincolo del progetto che impedisce l'eliminazione del progetto. Per impostazione predefinita, chiunque disponga dell'autorizzazione
resourcemanager.projects.updateLiens per il progetto può eliminare il
blocco.
Se applichi il vincolo gestito legacy iam.restrictCrossProjectServiceAccountLienRemoval, i principal possono eliminare il vincolo solo se dispongono dell'autorizzazione resourcemanager.projects.updateLiens per l'organizzazione.
Ti consigliamo di applicare questo vincolo se uno dei tuoi progetti consente la simulazione dell'identità del service account tra progetti.
Disabilita la creazione di cluster Workload Identity
Puoi utilizzare il vincolo iam.disableWorkloadIdentityClusterCreation legacy gestito
per richiedere che in tutti i nuovi cluster Google Kubernetes Engine sia disabilitata la funzionalità
Workload Identity al momento della creazione. Se vuoi controllare rigorosamente l'accesso del service account nella tua organizzazione, ti consigliamo di disabilitare Workload Identity, oltre alla creazione di account di servizio e chiavi del account di servizio.
I cluster GKE esistenti con la federazione delle identità per i carichi di lavoro per GKE abilitata non saranno interessati e continueranno a funzionare normalmente.
Impostazione di 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 console Google Cloud , vai alla pagina Policy dell'organizzazione.
Nel selettore di progetti, seleziona l'organizzazione per cui vuoi limitare l'utilizzo dell'account di servizio.
Fai clic su uno dei vincoli di utilizzo del account di servizio elencati in questa pagina.
Fai clic su Gestisci policy.
In Applicabile 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
I criteri possono essere impostati tramite Google Cloud CLI.
Per limitare l'utilizzo del account di servizio, esegui questo 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, è possibile eseguire lo stesso comando con il
comandodisable-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, che sono 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 gli account di servizio i cui token di accesso necessitano di una durata estesa, quindi aggiungi questi service account a un criterio dell'organizzazione che includa il vincolo constraints/iam.allowServiceAccountCredentialLifetimeExtensiongestito legacy.
Limita la durata delle chiavi del account di servizio
Una chiave del service account ti consente di autenticare una richiesta come account di servizio. Per impostazione predefinita, le chiavi del account di servizio non scadono mai. Puoi modificare questo valore predefinito impostando un tempo di scadenza per tutte le chiavi appena create nel tuo progetto, nella tua cartella o nella tua organizzazione.
Per impostare una data e un'ora di scadenza, utilizza il vincolo gestito legacy constraints/iam.serviceAccountKeyExpiryHours per specificare il numero di ore per cui è valida una chiave appena creata. Trascorso questo periodo di tempo, la chiave dell'account di servizio
scade e non puoi più utilizzarla.
Questo vincolo gestito legacy accetta i seguenti valori ALLOW; non accetta i valori DENY. Come best practice, utilizza il tempo 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 il criterio padre.
Specifica i provider di identità esterni consentiti
Se utilizzi la
federazione delle identità per i workload, che
consente alle identità esterne di accedere alle risorse Google Cloud , puoi specificare
quali provider di identità esterni sono consentiti. Per impostazione predefinita, tutti i provider sono
consentiti. 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 vincolo gestito legacy
constraints/iam.workloadIdentityPoolAwsAccountscome 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à.
Specifica gli account AWS consentiti
Se utilizzi la
federazione delle identità per i workload, che
consente alle identità esterne di accedere alle risorse Google Cloud , puoi specificare
quali account AWS sono autorizzati ad accedere alle tue risorse. Per impostazione predefinita, i workload
di qualsiasi account AWS possono accedere alle tue risorse Google Cloud . 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 del account di servizio esposte
Google Cloud rileva occasionalmente che una determinata chiave del account di servizio è stata
esposta, ad esempio potrebbe rilevare una chiave in un repository pubblico. Per specificare cosa fa Google Cloud con queste chiavi, utilizza il vincolo gestito legacy iam.serviceAccountKeyExposureResponse. 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 i valori DENY.
DISABLE_KEY: se Google Cloud rileva una chiave esposta, la disattiva automaticamente. Crea anche un evento Cloud Audit Logs e invia una notifica relativa alla chiave esposta ai proprietari del progetto e ai contatti di sicurezza.WAIT_FOR_ABUSE: Google Cloud non disabiliterà 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, Google Cloud crea un evento Cloud Audit Logs e invia una notifica relativa alla chiave esposta ai proprietari del progetto e ai contatti di sicurezza.
Quando Google Cloud rileva una chiave compromessa o la disabilita, esegue anche le seguenti operazioni:
Genera eventi Cloud Audit Logs.
Quando Google Cloud rileva che una chiave è stata esposta, viene creato un evento di abuso nei log degli eventi di abuso.
Quando Google Cloud disabilita una chiave, gli audit log contengono l'azione di disabilitazione da parte dell'entità
gcp-compromised-key-response@system.gserviceaccount.com.
Imposta il campo
extendedStatus.valuedella chiave esposta o disabilitata. Il campo dello stato esteso include la posizione 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 Cloud Audit Logs, rivedere i dati di contatto per la sicurezza
in Contatti fondamentali
e assicurarti che i tuoi 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 il criterio padre.
Impostare un vincolo gestito (legacy) con regole di elenco
Console
Per impostare una policy dell'organizzazione che contenga un vincolo gestito legacy:
Nella console Google Cloud , 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 i criteri della tua organizzazione, seleziona Unisci a principale. Per saperne di più sull'ereditarietà e sulla gerarchia delle risorse, consulta Valutazione della gerarchia.
- Per eseguire l'override delle 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 ciascuna 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 gli account di servizio 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 taggate dall'applicazione dei criteri dell'organizzazione. Dopo aver creato un tag e averlo collegato a un service account, puoi aggiungere una condizione al criterio per includere o escludere in modo condizionale i service account taggati dall'applicazione.
Per ulteriori dettagli sull'utilizzo dei tag con le policy dell'organizzazione, consulta Definire l'ambito delle policy dell'organizzazione con i tag.
Messaggi di errore
Disattiva creazione service account
Se iam.disableServiceAccountCreation è applicato, la creazione di un account di servizio
non riuscirà e verrà visualizzato l'errore:
FAILED_PRECONDITION: Service account creation is not allowed on this project.
Disattiva 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 andrà a buon fine 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."]
Disattiva creazione chiavi service account
Se iam.disableServiceAccountKeyCreation è applicato, la creazione di un account di servizio
non riuscirà e verrà visualizzato l'errore:
FAILED_PRECONDITION: Key creation is not allowed on this service account.
Disabilita la creazione di cluster Workload Identity
Se iam.disableWorkloadIdentityClusterCreation è applicato, la creazione di un cluster GKE con Workload Identity abilitato non andrà a buon fine 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 in quel progetto. Questa limitazione influisce anche sui
serviziGoogle Cloud che, quando 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
attivare questi servizi non riuscirà perché non è possibile creare i service account predefiniti.
Per risolvere il problema:
- Rimuovi temporaneamente il vincolo
iam.disableServiceAccountCreation. - Attiva i servizi che preferisci.
- Crea tutti gli altri service account che preferisci.
- Infine, riapplica il vincolo.