Limitazione dell'utilizzo degli account di servizio

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 è possibile creare o configurare account di servizio e altre risorse in modi specifici. Questi vincoli non sono retroattivi e 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. Consulta la pagina Utilizzo dei vincoli per scoprire di più sulla gestione dei criteri a livello di organizzazione.

Vincoli booleani

I seguenti vincoli sono tipi di boolean constraint impostati su true o false.

Disabilita 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, gli viene automaticamente assegnato il ruolo Editor (roles/editor) per il progetto.

Per migliorare la sicurezza, ti consigliamo vivamente di disabilitare la concessione automatica dei ruoli. Utilizza il vincolo booleano iam.automaticIamGrantsForDefaultServiceAccounts per disabilitare la concessione automatica del ruolo.

Disattiva creazione account di servizio

Puoi utilizzare il vincolo booleano iam.disableServiceAccountCreation per disabilitare la creazione di nuovi account di servizio. Ciò consente di centralizzare la gestione degli account di servizio senza limitare le altre autorizzazioni di cui gli sviluppatori dispongono sui 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 utilizzabile dal carico di lavoro. Per risolvere il problema, puoi abilitare l'impersonificazione degli account di servizio tra progetti. Quando abiliti 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, vedi Dove creare gli account di servizio.

Disattiva creazione chiavi account di servizio

Puoi utilizzare il vincolo booleano iam.disableServiceAccountKeyCreation per disabilitare la creazione di nuove chiavi degli account di servizio esterni. In questo modo puoi controllare l'utilizzo di credenziali a lungo termine non gestite per gli account di servizio. Se questo vincolo è impostato, non è possibile creare credenziali gestite dall'utente per gli account di servizio nei progetti interessati dal vincolo.

Disabilita caricamento chiavi account di servizio

Puoi utilizzare il vincolo booleano iam.disableServiceAccountKeyUpload per disabilitare il caricamento di chiavi pubbliche esterne negli account di servizio. Se questo vincolo è impostato, gli utenti non possono caricare chiavi pubbliche negli account di servizio nei 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 il vincolo booleano iam.disableCrossProjectServiceAccountUsage per impedire che gli account di servizio di un progetto vengano collegati alle risorse di altri progetti.

Se vuoi consentire l'utilizzo degli account di servizio in più progetti, consulta Abilitazione della rappresentazione degli account di servizio in più progetti.

Limita la rimozione dei blocchi di progetto quando vengono utilizzati account di servizio 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 eliminare il progetto. Per impostazione predefinita, chiunque abbia l'autorizzazione resourcemanager.projects.updateLiens per il progetto può eliminare il blocco.

Se applichi il vincolo booleano iam.restrictCrossProjectServiceAccountLienRemoval, le entità possono eliminare il blocco solo se hanno l'autorizzazione resourcemanager.projects.updateLiens per l'organizzazione.

Ti consigliamo di applicare questo vincolo se uno dei tuoi progetti consente la rappresentazione degli account di servizio tra progetti.

Disabilita creazione cluster Workload Identity

Puoi utilizzare il vincolo booleano iam.disableWorkloadIdentityClusterCreation per richiedere che in tutti i nuovi cluster Google Kubernetes Engine la funzionalità Workload Identity sia disabilitata al momento della creazione. Se vuoi controllare rigorosamente l'accesso agli account di servizio nella tua organizzazione, ti consigliamo di disabilitare Workload Identity, oltre alla creazione degli account di servizio e delle chiavi degli account di servizio.

I cluster GKE esistenti con 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 l'utilizzo degli account di servizio:

  1. Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Dal selettore dei progetti, scegli l'organizzazione per la quale vuoi limitare l'utilizzo degli account di servizio.

  3. Fai clic su uno dei vincoli booleani di utilizzo degli account di servizio elencati in questa pagina.

  4. Fai clic su Gestisci criterio.

  5. In Si applica a, seleziona Sostituisci criterio della risorsa padre.

  6. Fai clic su Aggiungi una regola.

  7. In Applicazione, seleziona On.

  8. 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 applicare.

Per disabilitare l'applicazione, puoi eseguire lo stesso comando con il comando

disable-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 degli account di servizio:

name: organizations/012345678901/policies/iam.disableServiceAccountCreation
spec:
  rules:
  - enforce: true

Vincoli elenco

I seguenti sono tipi di vincoli di elenco 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 fornisce 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. Per farlo, identifica gli account di servizio che richiedono una durata estesa per i token di accesso, 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 autenticare una richiesta come account di servizio. Per impostazione predefinita, le chiavi degli account di servizio non scadono mai. Puoi modificare questa impostazione predefinita impostando una data di scadenza per tutte le nuove chiavi create nel progetto, nella cartella o nell'organizzazione.

Per impostare una data di scadenza, utilizza il vincolo dell'elenco constraints/iam.serviceAccountKeyExpiryHours per specificare il numero di ore di validità di una chiave appena creata. Dopo questo periodo di tempo, la chiave dell'account di servizio scade e non puoi più utilizzarla.

Questo vincolo di elenco accetta i seguenti valori ALLOW. Non accetta i valori DENY. Come best practice, utilizza la data di scadenza più breve che soddisfa le tue esigenze:

  • 1h: 1 ora
  • 8h: 8 ore
  • 24h: 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 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 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, sono consentiti tutti i provider. Per impostare un limite, utilizza il 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 il vincolo dell'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 dell'emittente 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 gli account AWS autorizzati ad accedere alle tue risorse. Per impostazione predefinita, i carichi di lavoro provenienti da qualsiasi account AWS possono accedere alle tue risorse Google Cloud. Per limitare gli account AWS consentiti, utilizza il vincolo dell'elenco constraints/iam.workloadIdentityPoolAwsAccounts per specificare un elenco di ID account consentiti.

Disabilita automaticamente le chiavi degli 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. Non accetta i valori DENY.

  • DISABLE_KEY: se Google Cloud rileva una chiave esposta, la disattiverà automaticamente. Inoltre, crea un evento Cloud Audit Logs e invia una notifica sulla chiave esposta ai proprietari del progetto e ai contatti per la sicurezza.

  • WAIT_FOR_ABUSE: Google Cloud non disattiverà proattivamente le chiavi esposte. Tuttavia, Google Cloud potrebbe comunque disabilitare le chiavi esposte se vengono utilizzate in modi che incidono negativamente sulla piattaforma. Indipendentemente dal fatto che la chiave esposta sia disabilitata, Google Cloud crea un evento Cloud Audit Logs e invia una notifica sulla chiave esposta ai proprietari del progetto e ai contatti per la sicurezza.

Gli eventi Cloud Audit Logs vengono creati quando Google Cloud rileva una chiave divulgata o disabilita una chiave.

  • Quando Google Cloud rileva che una chiave è stata divulgata, 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 disattivazione da parte dell'entità [email protected].

Ti consigliamo vivamente di impostare questo vincolo su DISABLE_KEY. L'impostazione di questo vincolo su WAIT_FOR_ABUSE aumenta il rischio di utilizzo improprio delle chiavi divulgate.

Se decidi di impostare il vincolo su WAIT_FOR_ABUSE, ti consigliamo di abbonarti agli eventi di Cloud Audit Logs, di rivedere le tue informazioni di contatto per la sicurezza in Contatti necessari e assicurarti che i 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:

  1. Nella console Google Cloud, vai alla pagina Criteri dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Dal selettore dei progetti, scegli la risorsa per cui vuoi impostare il criterio dell'organizzazione.

  3. Nella pagina Criteri dell'organizzazione, seleziona un vincolo dall'elenco. Viene visualizzata la pagina Dettagli criterio per il vincolo in questione.

  4. Per aggiornare il criterio dell'organizzazione per questa risorsa, fai clic su Gestisci criterio.

  5. In Applicazione delle norme, seleziona un'opzione di applicazione:

    • Per unire e valutare insieme i criteri dell'organizzazione, seleziona Unisci con elemento padre. 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.
  6. Fai clic su Aggiungi una regola.

  7. In Valori criterio, seleziona Personalizzato.

  8. In Tipo di criterio, seleziona Consenti.

  9. In Valori personalizzati, inserisci il primo valore per il vincolo dell'elenco.

    1. Per aggiungere altri valori, fai clic su Aggiungi valore per creare altre righe e aggiungi un valore a ogni riga.
  10. Dopo aver aggiunto i valori, fai clic su Fine.

  11. Per applicare il criterio, fai clic su Imposta criterio.

gcloud

I criteri possono essere impostati mediante 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 il vincolo 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, estendendo 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 account di servizio

Se viene applicato in modo forzato il criterio iam.disableServiceAccountCreation, 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 account di servizio

Se viene applicato in modo forzato il criterio iam.disableServiceAccountKeyCreation, la creazione di un account di servizio non riuscirà e restituirà l'errore:

FAILED_PRECONDITION: Key creation is not allowed on this service account.

Disabilita creazione cluster Workload Identity

Se viene applicato in modo forzato il criterio iam.disableWorkloadIdentityClusterCreation, la creazione di un cluster GKE con Workload Identity abilitato non riuscirà e genererà l'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 nel progetto. Questa limitazione interessa 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 abilitare questi servizi avrà esito negativo perché non è possibile creare i relativi account di servizio predefiniti.

Per risolvere il problema:

  1. Rimuovi temporaneamente il vincolo iam.disableServiceAccountCreation.
  2. Attiva i servizi desiderati.
  3. Crea qualsiasi altro account di servizio desiderato.
  4. Infine, applica di nuovo il vincolo.