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; non influiscono sugli account di servizio creati e configurati in precedenza.

Prima di iniziare

Devi disporre dell'autorizzazione per modificare i criteri dell'organizzazione per impostare i vincoli. Ad esempio, il ruolo orgpolicy.policyAdmin ha l'autorizzazione per impostare vincoli dei criteri dell'organizzazione. Per saperne di più sulla gestione dei criteri a livello di organizzazione, consulta la pagina Utilizzo dei vincoli.

Vincoli booleani

I seguenti sono tipi di boolean constraint, che vengono impostati su true o false.

Disattiva concessioni automatiche di 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 concesso il ruolo Editor (roles/editor) sul progetto.

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

Disattiva creazione account di servizio

Puoi utilizzare il vincolo booleano iam.disableServiceAccountCreation per disabilitare 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 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 assumere l'identità di un account di servizio, il progetto potrebbe non contenere un account di servizio utilizzabile dal carico di lavoro. Per risolvere questo problema, puoi abilitare la simulazione dell'identità degli account di servizio tra progetti. Quando abiliti questa funzionalità, puoi creare account di servizio in un progetto centralizzato e poi 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. Ciò consente di controllare l'utilizzo di credenziali non gestite a lungo termine 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 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 il vincolo booleano iam.disableCrossProjectServiceAccountUsage per impedire che gli account di servizio in un progetto vengano collegati a risorse di altri progetti.

Se vuoi consentire l'utilizzo degli account di servizio tra progetti, consulta Abilitazione della simulazione dell'identità degli account di servizio tra progetti.

Limita la rimozione dei blocchi sui progetti quando gli account di servizio vengono utilizzati tra progetti

Quando consenti il collegamento degli account di servizio di un progetto alle risorse di altri progetti, IAM aggiunge un blocco sul progetto che ti impedisce di eliminarlo. Per impostazione predefinita, chiunque disponga dell'autorizzazione resourcemanager.projects.updateLiens sul progetto può eliminare il blocco.

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

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

Disabilita la creazione di cluster Workload Identity

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

I cluster GKE esistenti in cui è abilitato Workload Identity 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, seleziona l'organizzazione per la quale vuoi limitare l'utilizzo degli account di servizio.

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

  4. Fai clic su Gestisci criterio.

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

  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, è possibile eseguire lo stesso comando con

disable-enforce
.

Per scoprire di più sull'utilizzo dei vincoli nei criteri dell'organizzazione, consulta Utilizzo dei vincoli.

Esempio di criterio 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

Elenco vincoli

I seguenti sono tipi di vincolo di elenco, impostati su un elenco di valori.

Estensione della 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, è possibile estendere la durata massima a 12 ore. A questo scopo, identifica gli account di servizio che richiedono una durata estesa per i token di accesso, quindi aggiungili 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 account di servizio non hanno scadenza. Puoi modificare questa impostazione predefinita impostando una data di scadenza per tutte le chiavi appena 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 durante le quali una chiave appena creata è valida. Trascorso questo periodo, la chiave dell'account di servizio scade e non puoi più utilizzarla.

Questo vincolo dell'elenco accetta i seguenti valori ALLOW; non accetta 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)

Non è possibile unire il vincolo constraints/iam.serviceAccountKeyExpiryHours 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 dei provider consentiti utilizzando 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 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 quali account AWS sono autorizzati ad accedere alle risorse. Per impostazione predefinita, i carichi di lavoro di qualsiasi account AWS possono accedere alle 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

Occasionalmente, 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 come Google Cloud utilizza queste chiavi, utilizza il vincolo di elenco iam.serviceAccountKeyExposureResponse.

Questo vincolo dell'elenco accetta i seguenti valori ALLOW. Non accetta valori DENY.

  • DISABLE_KEY: se Google Cloud rileva una chiave esposta, la disattiverà automaticamente.
  • WAIT_FOR_ABUSE: Google Cloud non disattiverà 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.

Quando Google Cloud disabilita una chiave, gli audit log contengono l'entità gcp-compromised-key-response@system.gserviceaccount.com.

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 divulgate vengano usate in modo improprio.

Se decidi di impostare il vincolo su WAIT_FOR_ABUSE, ti consigliamo di controllare i tuoi dati di contatto per la sicurezza in Contatti necessari e di assicurarti che i contatti per la sicurezza rispondano alle notifiche in modo tempestivo.

Non è possibile unire il vincolo iam.serviceAccountKeyExposureResponse a un criterio padre. Per applicare questo vincolo, devi sostituire il criterio padre.

Impostazione di un vincolo dell'elenco

Console

Per impostare un criterio dell'organizzazione che contenga un vincolo dell'elenco:

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

    Vai a Criteri dell'organizzazione

  2. Fai clic sull'elenco a discesa Organizzazione nella parte superiore della pagina e seleziona l'organizzazione.

  3. Fai clic sul vincolo da aggiungere.

  4. Fai clic su Gestisci criterio.

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

  6. In Applicazione del criterio, seleziona Unisci con padre per unire questo criterio ai criteri esistenti nella gerarchia.

  7. Fai clic su Aggiungi una regola.

  8. In Valori del criterio, seleziona Personalizzato.

  9. In Tipo di criterio, seleziona Consenti.

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

    1. Se vuoi aggiungere altri valori, fai clic su Nuovo valore del criterio per creare più righe e aggiungere un valore a ogni riga.
  11. 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 il vincolo dell'elenco.

Per scoprire di più sull'utilizzo dei vincoli nei criteri dell'organizzazione, consulta Utilizzo dei vincoli.

Esempio di criterio 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 account di servizio

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

Se iam.disableServiceAccountKeyCreation viene applicato in modo forzato, 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 la creazione di cluster Workload Identity

Se il criterio iam.disableWorkloadIdentityClusterCreation viene applicato in modo forzato, la creazione di un cluster GKE in cui è abilitato Workload Identity non riuscirà e comporterà 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 in quel 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 sarà 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 altri account di servizio che ti interessano.
  4. Infine, applica di nuovo il vincolo.