Limitazione dell'utilizzo degli account di servizio

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

Devi disporre dell'autorizzazione per la modifica criteri dell'organizzazione da impostare i vincoli. Ad esempio, orgpolicy.policyAdmin dispone dell'autorizzazione per impostare vincoli dei criteri dell'organizzazione. Leggi Utilizzo dei vincoli pagina per saperne di più sulla gestione dei criteri a livello di organizzazione.

Vincoli booleani

I seguenti vincoli sono tipi vincolo booleano, che sono 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 un valore predefinito all'account di servizio creato, gli viene assegnato 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 account di servizio

Puoi utilizzare il vincolo booleano iam.disableServiceAccountCreation per per disattivare la creazione di nuovi account di servizio. Questo permette di centralizzare degli account di servizio, senza limitare le altre autorizzazioni che gli sviluppatori hanno sui progetti.

Se esegui l'applicazione forzata di questo vincolo in un progetto, di servizi non possono creare automaticamente account di servizio predefiniti. Di conseguenza, se il progetto esegue carichi di lavoro che devono simulano l'identità di un account di servizio, potrebbe non contenere un account di servizio utilizzabile dal carico di lavoro. A risolvere questo problema, puoi abilita la simulazione dell'identità degli account di servizio tra progetti. Quando abiliti questa funzionalità, puoi creare account di servizio in un ambiente un progetto di servizio, quindi collegare gli account di servizio alle risorse di 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 disattivare la creazione di nuove chiavi degli account di servizio esterne. 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 account di servizio

Puoi utilizzare il vincolo booleano iam.disableServiceAccountKeyUpload per Disabilita il caricamento di chiavi pubbliche esterne negli account di servizio. Quando questo è impostato, gli utenti non possono caricare chiavi pubbliche negli account di servizio a 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 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 di progetto quando vengono utilizzati account di servizio 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 abbia L'autorizzazione resourcemanager.projects.updateLiens per il progetto può eliminare blocco.

Se applichi l'operatore booleano iam.restrictCrossProjectServiceAccountLienRemoval vincolo, le entità possono eliminare il blocco solo se hanno 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.

Disabilita creazione cluster Workload Identity

Puoi utilizzare il vincolo booleano iam.disableWorkloadIdentityClusterCreation per richiedere che tutti i nuovi cluster Google Kubernetes Engine abbiano Funzionalità Workload Identity disattivate al momento della 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 con Workload Identity abilitato non sarà interessato e continuerà 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:

  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 questo .

  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 in modo forzato.

Per disabilitare l'applicazione, puoi eseguire lo stesso comando utilizzando

disable-enforce
.

Per saperne di più sull'uso dei vincoli nei criteri dell'organizzazione, vedi Utilizzo dei vincoli.

Criterio di esempio con vincolo booleano

Il seguente snippet di codice mostra un criterio dell'organizzazione che applica iam.disableServiceAccountCreation vincolo booleano, che impedisce il servizio la creazione di nuovi account:

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

Vincoli elenco

I seguenti vincoli sono tipi vincolo 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 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 account di servizio che necessitano di una durata estesa per i token di accesso, quindi aggiungi questi account di servizio a un criterio dell'organizzazione che include 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 degli 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 scadenza, utilizza constraints/iam.serviceAccountKeyExpiryHours dell'elenco per specificare il numero di ore per le quali una chiave appena creata valida. Trascorso questo periodo di tempo, la chiave dell'account di servizio scade e puoi non lo usi più.

Questo vincolo dell'elenco accetta i seguenti valori ALLOW; non accetta DENY valori. Come best practice, utilizza la data di scadenza più breve che soddisfa i tuoi 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)

Impossibile unire il vincolo constraints/iam.serviceAccountKeyExpiryHours con un criterio padre. Per applicare questo vincolo, devi sostituire o ereditare il criterio padre.

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

Disabilita automaticamente le chiavi degli 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 disabilitare le chiavi esposte se vengono utilizzate in modi che incidono negativamente sulla piattaforma. A prescindere dal fatto che le persone esposte è disabilitata, Google Cloud crea un evento Cloud Audit Logs e invia una notifica sulla chiave esposta ai proprietari del progetto e al team contatti.

Gli eventi di Cloud Audit Logs vengono creati quando Google Cloud rileva un chiave divulgata o disattiva una chiave.

  • Quando Google Cloud rileva che una chiave è stata divulgata, 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.

Ti consigliamo vivamente di impostare questo vincolo su DISABLE_KEY. Impostazione questo vincolo a WAIT_FOR_ABUSE aumenta il rischio che le chiavi divulgate 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:

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

    Vai a Criteri dell'organizzazione

  2. Dal selettore dei progetti, seleziona la risorsa per cui vuoi per 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 l'elemento principale. Per ulteriori informazioni sull'ereditarietà e la 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. Se vuoi 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 e VALUE_N...: Valori per il vincolo dell'elenco.

Per saperne di più sull'uso dei vincoli nei criteri dell'organizzazione, vedi Utilizzo dei vincoli.

Criterio di esempio con vincolo dell'elenco

Il seguente snippet di codice mostra un criterio dell'organizzazione che applica iam.allowServiceAccountCredentialLifetimeExtension vincolo dell'elenco, che estende la durata massima dei token di accesso OAuth 2.0 per il servizio elencato account:

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 riuscirà e restituirà 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 riuscirà e restituirà l'errore:

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

Disabilita creazione cluster Workload Identity

Se iam.disableWorkloadIdentityClusterCreation viene applicato in modo forzato, la creazione di un Il cluster GKE con Workload Identity abilitato avrà esito negativo con il 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 influisce anche I servizi Google Cloud che, se abilitati, creano automaticamente di servizio 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:

  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.