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 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. 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 vincoli booleani, 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 viene creato un account di servizio predefinito, a questo viene assegnato automaticamente il ruolo Editor (roles/editor
) nel progetto.
Per migliorare la sicurezza, ti consigliamo vivamente di disattivare la concessione automatica dei ruoli. Utilizza la vincolo booleano iam.automaticIamGrantsForDefaultServiceAccounts
per disattivare la concessione automatica dei ruoli.
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 disabilitare 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 servizio nei 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.
Disattivare il collegamento degli account di servizio alle risorse in altri progetti
Ogni account di servizio si trova in un progetto. Puoi utilizzare il vincolo booleano iam.disableCrossProjectServiceAccountUsage
per impedire il collegamento degli account di servizio in un progetto alle risorse in altri 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 di altri progetti, IAM aggiunge un blocco del progetto che ti impedisce di eliminarlo. 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 questa limitazione se uno dei tuoi progetti consente la simulazione dell'identità 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 rigidamente l'accesso agli account di servizio nella tua organizzazione, ti consigliamo di disattivare Workload Identity oltre alla creazione degli account di servizio e delle relative chiavi.
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 imponga un vincolo per limitare l'utilizzo degli account di servizio:
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 dell'account di servizio elencati in questa pagina.
Fai clic su Gestisci criterio.
In Applicabile a, seleziona Ignora il 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 dell'account di servizio, esegui il seguente comando:
gcloud resource-manager org-policies enable-enforce \ --organization 'ORGANIZATION_ID' \ BOOLEAN_CONSTRAINT
Dove BOOLEAN_CONSTRAINT è il vincolo booleano da applicare.
Per disattivare l'applicazione, puoi emettere lo stesso comando con
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.
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 dell'elenco constraints/iam.allowServiceAccountCredentialLifetimeExtension
.
Limita la durata delle chiavi dell'account di servizio
Una chiave dell'account di servizio ti consente di autenticare una richiesta come account di servizio. Per impostazione predefinita, le chiavi dell'account di servizio non scadono mai. Puoi modificare questo valore predefinito impostando una data di scadenza per tutte 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. Dopo questo periodo di tempo, la chiave dell'account di servizio scade e non potrai più utilizzarla.
Questo vincolo di elenco accetta i seguenti valori ALLOW
, ma non i valori DENY
. Come best practice, utilizza la scadenza più breve che soddisfa 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 un criterio principale. Per applicare questo vincolo, devi sostituire o ereditare il criterio principale.
Specifica i provider di identità esterni consentiti
Se utilizzi la federazione delle identità di Workload Identity, 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 fornitori sono consentiti. Per impostare un limite, utilizza il vincolo di elenco constraints/iam.workloadIdentityPoolProviders
per specificare gli URI per i fornitori consentiti, utilizzando i seguenti formati:
Amazon Web Services (AWS):
https://sts.amazonaws.com
Per limitare gli account AWS consentiti, utilizza il vincolo 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'URI del proponente 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 sono autorizzati ad accedere alle tue risorse Google Cloud. Per limitare gli account AWS consentiti, utilizza il vincolo di elenco constraints/iam.workloadIdentityPoolAwsAccounts
per specificare un elenco 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 esposta, ad esempio potrebbe rilevare una chiave in un repository pubblico. Per
specificare cosa fa Google Cloud con queste chiavi, utilizza il
vincolo dell'elenco iam.serviceAccountKeyExposureResponse
.
Questo vincolo di elenco accetta i seguenti valori ALLOW
, ma non i valori DENY
.
DISABLE_KEY
: se Google Cloud rileva una chiave esposta, la disattiva automaticamente. Inoltre, crea un evento 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 disattiva 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 disattiva, esegue anche quanto segue:
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 disattiva una chiave, gli audit log contengono l'azione di disattivazione per 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
. L'impostazione di questo vincolo su WAIT_FOR_ABUSE
aumenta il rischio che le chiavi esposte vengano usate in modo improprio.
Se decidi di impostare la limitazione su WAIT_FOR_ABUSE
, ti consigliamo di abbonarti agli eventi di Cloud Audit Logs, di esaminare i dati di contatto per la sicurezza in Contatti fondamentali e di assicurarti 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 principale.
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 criteri relativa al vincolo.
Per aggiornare il criterio dell'organizzazione per questa risorsa, fai clic su Gestisci criterio.
In Applicazione criterio, 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 sostituire i criteri ereditati da una risorsa principale, 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 la limitazione dell'elenco.
- Se vuoi aggiungere altri valori, fai clic su Aggiungi valore per creare altre righe e aggiungi un valore a ogni riga.
Al termine, 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 di 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
è applicato, la creazione di un account di servizio non andrà a buon fine con l'errore:
FAILED_PRECONDITION: Service account creation is not allowed on this project.
Disattiva creazione chiavi service account
Se iam.disableServiceAccountKeyCreation
è 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.
Disattivare la creazione di 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 della limitazione 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 viene applicato il vincolo iam.disableServiceAccountCreation
, il tentativo di attivare questi servizi non andrà a buon fine perché non è possibile creare i relativi account di servizio predefiniti.
Per risolvere il problema:
- Rimuovi temporaneamente il vincolo
iam.disableServiceAccountCreation
. - Attiva i servizi che ti interessano.
- Crea gli altri account di servizio che ti interessano.
- Infine, riapplica il vincolo.