Limitazione dell'utilizzo dei service account

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

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. Leggi la pagina Utilizzare i vincoli per scoprire di più sulla gestione dei criteri a livello di organizzazione.

Vincoli booleani

I seguenti vincoli sono tipi di vincolo booleano, impostati su true o false.

Disattivare 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 concesso 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 service account

Puoi utilizzare il vincolo booleano iam.disableServiceAccountCreation per disattivare 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 dispongono gli sviluppatori nei 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 che il carico di lavoro può utilizzare. Per risolvere il problema, puoi abilitare la simulazione dell'identità degli account di servizio tra progetti. Quando attivi 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, consulta Dove creare gli account di servizio.

Disattiva creazione chiavi service account

Puoi utilizzare il vincolo booleano iam.disableServiceAccountKeyCreation per disattivare la creazione di nuove chiavi esterne dell'account di servizio. 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 service account

Puoi utilizzare il vincolo booleano iam.disableServiceAccountKeyUpload per disattivare il caricamento di chiavi pubbliche esterne nei service account. Quando 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 lo iam.disableCrossProjectServiceAccountUsage vincolo booleano per prevenire di un account 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 dei progetti quando i service account vengono utilizzati 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 disponga dell'autorizzazione resourcemanager.projects.updateLiens per il progetto può eliminare il blocco.

Se applichi il vincolo booleano iam.restrictCrossProjectServiceAccountLienRemoval, i principali possono eliminare il blocco solo se dispongono dell'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.

Disattivare la creazione di cluster Workload Identity

Puoi utilizzare il vincolo booleano iam.disableWorkloadIdentityClusterCreation per richiedere che in tutti i nuovi cluster Google Kubernetes Engine sia disabilitata la funzionalità Workload Identity al momento della loro 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 in cui 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 il servizio: utilizzo dell'account:

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

    Vai a Criteri dell'organizzazione

  2. Dal selettore di progetti, seleziona l'organizzazione per la quale vuoi limitare l'utilizzo dell'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 Applicabile a, seleziona Ignora criterio della risorsa padre.

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

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

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

Vincoli di elenco

I seguenti vincoli sono tipi di vincoli 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 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 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 dell'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 data e un'ora di scadenza, utilizza il vincolo di elenco constraints/iam.serviceAccountKeyExpiryHours per specificare il numero di ore per le quali è valida una chiave appena creata. Trascorso questo periodo di tempo, la chiave dell'account di servizio scade e puoi non lo usi più.

Questo vincolo di elenco accetta i seguenti valori ALLOW, ma non i valori DENY. 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 principale.

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

Disattivare automaticamente le chiavi dell'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 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 disattiva, esegue anche quanto segue:

  • Genera eventi Cloud Audit Logs.

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

  • Imposta il campo extendedStatus.value della chiave esposta o disattivata. Il campo dello stato esteso include la posizione in cui è stato rilevato la fuga.

di Gemini Advanced.

Ti consigliamo vivamente di impostare questo vincolo su DISABLE_KEY. Impostazione questo vincolo a WAIT_FOR_ABUSE aumenta il rischio che le chiavi esposte vengano 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 Norme dell'organizzazione.

    Vai a Criteri dell'organizzazione

  2. Dal 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 norme relativa alla limitazione.

  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 principale. 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. 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 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 la limitazione 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, 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 service account

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 service account

Se iam.disableServiceAccountKeyCreation viene applicato, 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 creazione cluster Workload Identity

Se iam.disableWorkloadIdentityClusterCreation viene applicato, la creazione di un cluster GKE con Workload Identity abilitato non andrà a buon fine con 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

Account di servizio predefiniti

L'applicazione del vincolo iam.disableServiceAccountCreation impedirà la creazione di account di servizio in quel progetto. Questa limitazione riguarda 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 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, riapplica il vincolo.