Limitazione dell'utilizzo dei service account

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

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

    Vai a Policy dell'organizzazione

  2. Nel selettore di progetti, seleziona l'organizzazione per cui vuoi limitare l'utilizzo dell'account di servizio.

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

  4. Fai clic su Gestisci policy.

  5. Nella sezione Applicabile a, seleziona Esegui override della policy dell'unità organizzativa principale.

  6. Fai clic su Aggiungi una regola.

  7. In Applicazione forzata, 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 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

comando
disable-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.allowServiceAccountCredentialLifetimeExtensionlegacy 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 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 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:

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

    Vai a Policy dell'organizzazione

  2. Nel selettore di progetti, seleziona la risorsa per cui vuoi impostare il criterio dell'organizzazione.

  3. Nella pagina Criteri organizzazione, seleziona un vincolo dall'elenco. Viene visualizzata la pagina Dettagli policy per il vincolo.

  4. Per aggiornare la policy dell'organizzazione per questa risorsa, fai clic su Gestisci policy.

  5. 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.
  6. Fai clic su Aggiungi una regola.

  7. In Valori policy, seleziona Personalizzato.

  8. In Tipo di criterio, seleziona Consenti.

  9. In Valori personalizzati, inserisci il primo valore per il vincolo gestito legacy.

    1. Se vuoi aggiungere altri valori, fai clic su Aggiungi valore per creare altre righe e aggiungi un valore a ciascuna riga.
  10. Al termine dell'aggiunta dei valori, fai clic su Fine.

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

  1. Rimuovi temporaneamente il vincolo iam.disableServiceAccountCreation.
  2. Attiva i servizi che preferisci.
  3. Crea tutti gli altri service account che preferisci.
  4. Infine, riapplica il vincolo.