Resource Manager fornisce vincoli che possono essere usati nei criteri dell'organizzazione per limitare l'utilizzo dei Account di servizio IAM (Identity and Access Management).
Molti di questi vincoli determinano se gli account di servizio e altre risorse possono essere create o configurate in modi specifici. Questi vincoli non sono retroactive; non influiscono sul servizio creato e configurato 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. Leggi la pagina Utilizzare i vincoli per scoprire di più sulla gestione dei criteri a livello di organizzazione.
Vincoli booleani
I seguenti vincoli sono tipi di vincolo booleano, impostati su true o false.
Disattivare le concessioni automatiche dei ruoli agli account di servizio predefiniti
Alcuni servizi Google Cloud creano automaticamente
account di servizio predefiniti. Quando un valore predefinito
all'account di servizio creato, gli viene concesso automaticamente il ruolo Editor
(roles/editor
) nel progetto.
Per migliorare la sicurezza, ti consigliamo vivamente di disabilitare il ruolo automatico
concessione. Utilizza il valore booleano iam.automaticIamGrantsForDefaultServiceAccounts
per disabilitare la concessione automatica del ruolo.
Disattiva creazione service account
Puoi utilizzare il vincolo booleano iam.disableServiceAccountCreation
per disattivare la creazione di nuovi account di servizio. In questo modo puoi centralizzare la gestione degli account di servizio senza limitare le altre autorizzazioni di cui dispongono gli sviluppatori nei progetti.
Se applichi questo vincolo in un progetto, alcuni servizi Google Cloud non possono creare automaticamente account di servizio predefiniti. Di conseguenza, se il progetto esegue carichi di lavoro che devono impersonare un account di servizio, il progetto potrebbe non contenere un account di servizio che il carico di lavoro può utilizzare. Per risolvere il problema, puoi abilitare la simulazione dell'identità degli account di servizio tra progetti. Quando attivi questa funzionalità, puoi creare account di servizio in un progetto centralizzato, quindi collegarli alle risorse in altri progetti.
Per ulteriori informazioni sull'organizzazione degli account di servizio, consulta Dove creare gli account di servizio.
Disattiva creazione chiavi service account
Puoi utilizzare il vincolo booleano iam.disableServiceAccountKeyCreation
per disattivare la creazione di nuove chiavi esterne dell'account di servizio. Questo consente di
controllare l'utilizzo di credenziali a lungo termine non gestite per gli account di servizio. Quando
questo vincolo è impostato, non è possibile creare credenziali gestite dall'utente per il servizio
dei progetti interessati dal vincolo.
Disabilita caricamento chiavi service account
Puoi utilizzare il vincolo booleano iam.disableServiceAccountKeyUpload
per disattivare il caricamento di chiavi pubbliche esterne nei service account. Quando questo vincolo è impostato, gli utenti non possono caricare chiavi pubbliche negli account di servizio dei progetti interessati dal vincolo.
Disabilita il collegamento degli account di servizio alle risorse in altri progetti
Ogni account di servizio si trova in un progetto. Puoi utilizzare lo
iam.disableCrossProjectServiceAccountUsage
vincolo booleano per prevenire
di un account di servizio in un progetto vengano collegati alle risorse
in modo programmatico
a gestire i progetti.
Se vuoi consentire l'utilizzo degli account di servizio in più progetti, consulta Abilitazione della simulazione dell'identità degli account di servizio tra progetti.
Limita la rimozione dei blocchi dei progetti quando i service account vengono utilizzati in più progetti
Quando consenti il collegamento degli account di servizio di un progetto alle risorse in altri
per i progetti, IAM aggiunge un
blocco del progetto che ti impedisce di
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 booleano iam.restrictCrossProjectServiceAccountLienRemoval
, i principali possono eliminare il blocco solo se dispongono dell'autorizzazione resourcemanager.projects.updateLiens
per l'organizzazione.
Ti consigliamo di applicare questo vincolo se uno dei tuoi progetti lo consente impersonificazione degli account di servizio tra progetti.
Disattivare la creazione di cluster Workload Identity
Puoi utilizzare il vincolo booleano iam.disableWorkloadIdentityClusterCreation
per richiedere che in tutti i nuovi cluster Google Kubernetes Engine sia disabilitata la funzionalità Workload Identity al momento della loro creazione. Se vuoi controllare rigorosamente il servizio
l'accesso all'account nella tua organizzazione, è consigliabile disabilitare Workload Identity
oltre alla creazione degli account di servizio
e alla creazione delle chiavi degli account di servizio.
I cluster GKE esistenti in cui Workload Identity è abilitato non saranno interessati e continueranno a funzionare normalmente.
Applicazione di un vincolo booleano
Console
Per impostare un criterio dell'organizzazione che applichi un vincolo per limitare il servizio: utilizzo dell'account:
Nella console Google Cloud, vai alla pagina Norme dell'organizzazione.
Dal selettore di progetti, seleziona l'organizzazione per la quale vuoi limitare l'utilizzo dell'account di servizio.
Fai clic su uno dei vincoli booleani di utilizzo degli account di servizio elencati in questo .
Fai clic su Gestisci criterio.
In Applicabile a, seleziona Ignora criterio della risorsa padre.
Fai clic su Aggiungi una regola.
In Applicazione forzata, seleziona On.
Per applicare il criterio, fai clic su Imposta criterio.
gcloud
I criteri possono essere impostati tramite Google Cloud CLI.
Per limitare l'utilizzo degli account di servizio, esegui questo comando:
gcloud resource-manager org-policies enable-enforce \ --organization 'ORGANIZATION_ID' \ BOOLEAN_CONSTRAINT
Dove BOOLEAN_CONSTRAINT è il vincolo booleano che vuoi in modo forzato.
Per disabilitare l'applicazione, puoi eseguire lo stesso comando utilizzando
Comandodisable-enforce
Per scoprire di più sull'utilizzo dei vincoli nei criteri dell'organizzazione, consulta Utilizzo dei vincoli.
Criterio di esempio con vincolo booleano
Il seguente snippet di codice mostra un criterio dell'organizzazione che applica il vincolo booleano iam.disableServiceAccountCreation
, che impedisce la creazione di account di servizio:
name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
rules:
- enforce: true
Vincoli di elenco
I seguenti vincoli sono tipi di vincoli di elenco, che sono impostati su un elenco di valori.
Estendi 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 account di servizio a un criterio dell'organizzazione che includa il vincolo dell'elenco constraints/iam.allowServiceAccountCredentialLifetimeExtension
.
Limita la durata delle chiavi degli account di servizio
Una chiave dell'account di servizio consente di di autenticare una richiesta come account di servizio. Per impostazione predefinita, le chiavi dell'account di servizio non scadono mai. Puoi modificare questa impostazione predefinita impostando una scadenza per tutti le chiavi appena create nel progetto, nella cartella o nell'organizzazione.
Per impostare una data e un'ora di scadenza, utilizza il vincolo di elenco constraints/iam.serviceAccountKeyExpiryHours
per specificare il numero di ore per le quali è valida una chiave appena creata. Trascorso questo periodo di tempo, la chiave dell'account di servizio scade e puoi
non lo usi più.
Questo vincolo di elenco accetta i seguenti valori ALLOW
, ma non i valori DENY
. Come best practice, utilizza la data di scadenza più breve che soddisfa i tuoi
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)
Impossibile unire il vincolo constraints/iam.serviceAccountKeyExpiryHours
con un criterio padre. Per applicare questo vincolo, devi sostituire o ereditare il criterio principale.
Specifica i provider di identità esterni consentiti
Se utilizzi
federazione delle identità per i carichi di lavoro, che
consente alle identità esterne di accedere alle risorse Google Cloud, puoi specificare
i provider di identità esterni consentiti. Per impostazione predefinita, tutti i fornitori
consentito. Per impostare un limite, utilizza
Vincolo dell'elenco constraints/iam.workloadIdentityPoolProviders
per specificare gli URI
per i provider consentiti, usando i seguenti formati:
Amazon Web Services (AWS):
https://sts.amazonaws.com
Per limitare gli account AWS consentiti, utilizza Vincolo di elenco
constraints/iam.workloadIdentityPoolAwsAccounts
come descritto in questa pagina.Microsoft Azure:
https://sts.windows.net/azure-tenant-id
Altri provider di identità che supportano OpenID Connect (OIDC): utilizza l'emittente URI del tuo provider di identità.
Specifica gli account AWS consentiti
Se utilizzi la federazione delle identità per i carichi di lavoro, 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 carichi di lavoro
da qualsiasi account AWS possono accedere alle tue risorse Google Cloud. A
limitare gli account AWS consentiti, utilizza
constraints/iam.workloadIdentityPoolAwsAccounts
vincolo dell'elenco per specificare un
di ID account consentiti.
Disattivare automaticamente le chiavi dell'account di servizio esposte
A volte Google Cloud rileva che una determinata chiave dell'account di servizio è stata
esposto, ad esempio, potrebbe rilevare una chiave in un repository pubblico. A
specifica cosa fa Google Cloud con queste chiavi, utilizza
Vincolo di elenco iam.serviceAccountKeyExposureResponse
.
Questo vincolo dell'elenco accetta i seguenti valori ALLOW
; non accetta
DENY
valori.
DISABLE_KEY
: se Google Cloud rileva una chiave esposta, disattiverà automaticamente la chiave. Crea inoltre un evento Cloud Audit Logs invia una notifica sulla chiave esposta ai proprietari del progetto e al team contatti.WAIT_FOR_ABUSE
: Google Cloud non disattiverà proattivamente 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 per la sicurezza.
Quando Google Cloud rileva una chiave esposta o la disattiva, esegue anche quanto segue:
Genera eventi Cloud Audit Logs.
Quando Google Cloud rileva che una chiave è stata esposta, si verifica un evento di abuso creati nei log degli eventi illeciti.
Quando Google Cloud disabilita una chiave, gli audit log contengono la dell'entità
gcp-compromised-key-response@system.gserviceaccount.com
.
Imposta il campo
extendedStatus.value
della chiave esposta o disattivata. Il campo dello stato esteso include la posizione in cui è stato rilevato la fuga.
Ti consigliamo vivamente di impostare questo vincolo su DISABLE_KEY
. Impostazione
questo vincolo a WAIT_FOR_ABUSE
aumenta il rischio che le chiavi esposte vengano
utilizzato in modo improprio.
Se decidi di impostare il vincolo su WAIT_FOR_ABUSE
, ti consigliamo di
ti abboni agli eventi di Cloud Audit Logs, rivedi le tue informazioni di contatto per la sicurezza
in Contatti necessari,
e assicurati che i tuoi contatti per la sicurezza rispondano alle notifiche in modo tempestivo.
Il vincolo iam.serviceAccountKeyExposureResponse
non può essere unito a un
criterio padre. Per applicare questo vincolo, devi sostituire il criterio padre.
Impostazione di un vincolo di elenco
Console
Per impostare un criterio dell'organizzazione che contenga un vincolo di elenco:
Nella console Google Cloud, vai alla pagina Norme dell'organizzazione.
Dal selettore di progetti, seleziona la risorsa per cui vuoi impostare il criterio dell'organizzazione.
Nella pagina Criteri organizzazione, seleziona un vincolo dall'elenco. Viene visualizzata la pagina Dettagli norme relativa alla limitazione.
Per aggiornare il criterio dell'organizzazione per questa risorsa, fai clic su Gestisci criterio.
In Applicazione delle norme, seleziona un'opzione di applicazione:
- Per unire e valutare insieme i criteri dell'organizzazione, seleziona Unisci con principale. Per ulteriori informazioni sull'ereditarietà e sulla gerarchia delle risorse, consulta Informazioni sulla valutazione della gerarchia.
- Per eseguire l'override dei criteri ereditati da una risorsa padre, seleziona Sostituisci.
Fai clic su Aggiungi una regola.
In Valori criterio, seleziona Personalizzato.
In Tipo di criterio, seleziona Consenti.
In Valori personalizzati, inserisci il primo valore per il vincolo dell'elenco.
- Se vuoi aggiungere altri valori, fai clic su Aggiungi valore per creare altre righe e aggiungi un valore a ogni riga.
Dopo aver aggiunto i valori, fai clic su Fine.
Per applicare il criterio, fai clic su Imposta criterio.
gcloud
I criteri possono essere impostati 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 dell'elenco. Ad esempio:constraints/iam.allowServiceAccountCredentialLifetimeExtension
.VALUE_1
,VALUE_N...
: valori per la limitazione dell'elenco.
Per scoprire di più sull'utilizzo dei vincoli nei criteri dell'organizzazione, consulta Utilizzo dei vincoli.
Criterio di esempio con vincolo dell'elenco
Il seguente snippet di codice mostra un criterio dell'organizzazione che applica il vincolo dell'elenco 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
Messaggi di errore
Disattiva creazione service account
Se iam.disableServiceAccountCreation
viene applicato in modo forzato, la creazione di un account di servizio
non riuscirà e restituirà l'errore:
FAILED_PRECONDITION: Service account creation is not allowed on this project.
Disattiva creazione chiavi service account
Se iam.disableServiceAccountKeyCreation
viene applicato, la creazione di un account di servizio non andrà a buon fine con l'errore:
FAILED_PRECONDITION: Key creation is not allowed on this service account.
Disabilita creazione cluster Workload Identity
Se iam.disableWorkloadIdentityClusterCreation
viene applicato, la creazione di un
cluster GKE con Workload Identity abilitato non andrà a buon fine con 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
Account di servizio predefiniti
L'applicazione del vincolo iam.disableServiceAccountCreation
impedirà
la creazione di account di servizio
in quel progetto. Questa limitazione riguarda anche i servizi Google Cloud che, se abilitati, creano automaticamente account di servizio predefiniti nel progetto, ad esempio:
- Compute Engine
- GKE
- App Engine
- Dataflow
Se il vincolo iam.disableServiceAccountCreation
viene applicato, il tentativo di
l'abilitazione di questi servizi non riuscirà perché i relativi account di servizio predefiniti
è stato creato.
Per risolvere il problema:
- Rimuovi temporaneamente il vincolo
iam.disableServiceAccountCreation
. - Attiva i servizi desiderati.
- Crea qualsiasi altro account di servizio desiderato.
- Infine, riapplica il vincolo.