Resource Manager 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
dispone dell'autorizzazione per impostare i vincoli dei criteri dell'organizzazione. Consulta la pagina
Utilizzo dei vincoli
per scoprire di più sulla gestione dei criteri a livello di organizzazione.
Vincoli gestiti
I seguenti vincoli sono tipi di vincoli gestiti, impostati su true o false. I vincoli gestiti si basano sulla piattaforma custom organization policy.
Per scoprire come creare criteri dell'organizzazione che applicano vincoli gestiti, consulta Utilizzo dei vincoli gestiti in un criterio dell'organizzazione.
Impedisci 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 automaticamente concesso il ruolo Editor (roles/editor
) sul tuo 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 agli account di servizio 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 Google Cloud servizi 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à degli 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 ulteriori informazioni sull'organizzazione dei service account, vedi 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 gli account di servizio. 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. 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, che sono impostate su true o false.
Disabilita 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 automaticamente concesso il ruolo Editor (roles/editor
) sul tuo progetto.
Per migliorare la sicurezza, ti consigliamo vivamente di disattivare la concessione automatica dei ruoli. Utilizza il vincolo iam.automaticIamGrantsForDefaultServiceAccounts
legacy managed
per disattivare la concessione automatica del ruolo.
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 Google Cloud servizi non possono creare automaticamente service account predefiniti. Di conseguenza, se il progetto esegue carichi di lavoro che devono assumere 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à degli 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 ulteriori informazioni sull'organizzazione dei service account, vedi 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 gli account di servizio. 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 disattivare il caricamento di 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.
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 gli account di servizio in 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 simulazione 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 degli account di servizio 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à degli account di servizio tra progetti.
Disabilita la creazione di cluster Workload Identity
Puoi utilizzare il vincolo legacy gestito iam.disableWorkloadIdentityClusterCreation
per richiedere che tutti i nuovi cluster Google Kubernetes Engine abbiano la funzionalità Workload Identity disabilitata al momento della creazione. Se vuoi controllare rigorosamente l'accesso al service account nella tua organizzazione, ti consigliamo di disattivare Workload Identity, oltre alla creazione di account di servizio e chiavi del account di servizio.
I cluster GKE esistenti in cui è abilitata la federazione delle identità per i carichi di lavoro per GKE non saranno interessati e continueranno a funzionare normalmente.
Impostare un vincolo gestito (legacy) con regole booleane
Console
Per impostare un criterio 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.
Nella sezione Applicabile a, seleziona Esegui override della policy dell'unità organizzativa principale.
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 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 nei criteri dell'organizzazione, consulta la sezione Utilizzo dei vincoli.
Esempio di vincolo gestito (legacy) con regole booleane
Il seguente snippet di codice mostra un criterio 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 account di servizio a un criterio dell'organizzazione che includa il vincolo constraints/iam.allowServiceAccountCredentialLifetimeExtension
legacy managed.
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 create di recente nel tuo progetto, nella tua cartella o nella tua organizzazione.
Per impostare un periodo 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 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 per i provider consentiti, utilizzando i seguenti formati:
Amazon Web Services (AWS):
https://sts.amazonaws.com
Per limitare gli account AWS consentiti, utilizza il vincolo gestito legacy
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'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 di ALLOW
; non
accetta i valori di 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 per la sicurezza.
Quando Google Cloud rileva una chiave esposta 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 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.value
della 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 di 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 un criterio 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 il criterio dell'organizzazione.
Nella pagina Criteri 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 criterio, seleziona un'opzione di applicazione:
- Per unire e valutare insieme le policy della tua organizzazione, seleziona Unisci a principale. Per ulteriori informazioni sull'ereditarietà e sulla gerarchia delle risorse, vedi Informazioni sulla 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 criterio, 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 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 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 nei criteri dell'organizzazione, consulta la sezione Utilizzo dei vincoli.
Esempio di vincolo gestito (legacy) con regole di elenco
Il seguente snippet di codice mostra un criterio 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 account di servizio, puoi aggiungere una condizione al criterio per includere o escludere in modo condizionale gli account di servizio taggati dall'applicazione.
Per maggiori dettagli sull'utilizzo dei tag con i criteri dell'organizzazione, vedi Impostazione di un criterio dell'organizzazione con tag.
Messaggi di errore
Disattiva creazione service account
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.
Disattiva la creazione di chiavi API associate ai service account
Se viene applicato iam.managed.disableServiceAccountApiKeyCreation
, la creazione di una chiave API
associata a unaccount di serviziot 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 il seguente 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 account di servizio 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.