Limitare l'utilizzo del account di servizio IAM

Il servizio Organization Policy 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 ha l'autorizzazione per impostare i vincoli dei criteri dell'organizzazione. Per scoprire di più sulla gestione delle policy a livello di organizzazione, consulta la pagina Crea policy dell'organizzazione.

Vincoli gestiti

I seguenti vincoli sono tipi di vincoli gestiti, impostati su true o false. I vincoli gestiti si basano sulla piattaforma policy dell'organizzazione personalizzata.

Per scoprire come creare policy dell'organizzazione che applichino vincoli gestiti, consulta Creare policy dell'organizzazione.

Impedisci che i ruoli Proprietario ed Editor vengano concessi ai service account predefiniti

Alcuni servizi Google Cloud creano automaticamente service account predefiniti. Quando viene creato un service account predefinito, gli viene automaticamente assegnato il ruolo Editor (roles/editor) nel 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 ai service account 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 servizi Google Cloud 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à deaccount di serviziont tra progetti. Quando abiliti questa funzionalità, puoi creare service account in un progetto centralizzato, quindi collegarli a risorse in altri progetti.

Per saperne di più sull'organizzazione dei service account, consulta 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 i service account. 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. Se questo vincolo è impostato, gli utenti non possono caricare chiavi pubbliche sui 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, impostate su true o false.

Disattiva la concessione automatica dei ruoli ai service account predefiniti

Alcuni servizi Google Cloud creano automaticamente service account predefiniti. Quando viene creato un account di servizio predefinito, gli viene automaticamente concesso il ruolo Editor (roles/editor) nel progetto.

Per migliorare la sicurezza, ti consigliamo vivamente di disattivare la concessione automatica dei ruoli. Utilizza il vincolo iam.automaticIamGrantsForDefaultServiceAccounts legacy gestito per disattivare la concessione automatica dei ruoli.

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 servizi Google Cloud 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à deaccount di serviziont tra progetti. Quando abiliti questa funzionalità, puoi creare service account in un progetto centralizzato, quindi collegarli a risorse in altri progetti.

Per saperne di più sull'organizzazione dei service account, consulta 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 i service account. 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 disabilitare il caricamento di chiavi pubbliche esterne nei service account. Se questo vincolo è impostato, gli utenti non possono caricare chiavi pubbliche sui 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 i service account di 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 rappresentazione 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 dei service account 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à del service account tra progetti.

Disabilita la creazione di cluster Workload Identity

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

I cluster GKE esistenti con la federazione delle identità per i carichi di lavoro per GKE abilitata non saranno interessati e continueranno a funzionare normalmente.

Impostazione di un vincolo gestito (legacy) con regole booleane

Console

Per impostare una policy 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. In 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 la policy, fai clic su Imposta policy.

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 nelle policy dell'organizzazione, consulta Creare policy dell'organizzazione.

Esempio di vincolo gestito (legacy) con regole booleane

Il seguente snippet di codice mostra una policy 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 service account a un criterio dell'organizzazione che includa il vincolo constraints/iam.allowServiceAccountCredentialLifetimeExtensiongestito legacy.

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 appena create nel tuo progetto, nella tua cartella o nella tua organizzazione.

Per impostare una data e un'ora di scadenza, utilizza il vincolo gestito legacy constraints/iam.serviceAccountKeyExpiryHours per specificare il numero di ore per cui è valida una chiave appena creata. 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 dei provider consentiti utilizzando i seguenti formati:

  • Amazon Web Services (AWS): https://sts.amazonaws.com

    Per limitare gli account AWS consentiti, utilizza il vincolo gestito legacyconstraints/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 ALLOW; non accetta i valori 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 di sicurezza.

Quando Google Cloud rileva una chiave compromessa 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 degli 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 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 una policy 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 la policy dell'organizzazione.

  3. Nella pagina Policy dell'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 policy, seleziona un'opzione di applicazione:

    • Per unire e valutare insieme i criteri della tua organizzazione, seleziona Unisci a principale. Per saperne di più sull'ereditarietà e sulla gerarchia delle risorse, consulta 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 policy, 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 la policy, fai clic su Imposta policy.

gcloud

Le policy possono essere impostate 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 nelle policy dell'organizzazione, consulta Creare policy dell'organizzazione.

Esempio di vincolo gestito (legacy) con regole di elenco

Il seguente snippet di codice mostra una policy 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 service account, puoi aggiungere una condizione al criterio per includere o escludere in modo condizionale i service account taggati dall'applicazione.

Per ulteriori dettagli sull'utilizzo dei tag con le policy dell'organizzazione, consulta Definire l'ambito delle policy dell'organizzazione con i tag.

Messaggi di errore

Disattiva creazione service account

Se iam.disableServiceAccountCreation è applicato, la creazione di un account di servizio non riuscirà e verrà visualizzato l'errore:

FAILED_PRECONDITION: Service account creation is not allowed on this project.

Disattiva la creazione di chiavi API associate ai service account

Se iam.managed.disableServiceAccountApiKeyCreation è applicato, la creazione di una chiave API associata a un account di servizio 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 l'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 service account 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.