Risolvere i problemi relativi ai criteri dell'organizzazione per gli account di servizio

Il servizio Organization Policy ha diversi vincoli predefiniti e gestiti che possono influire sui service account della tua organizzazione. Questa pagina ti aiuta a capire quali errori generano queste policy dell'organizzazione e i passaggi che puoi intraprendere per risolverli.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per risolvere i problemi relativi alle policy dell'organizzazione, chiedi all'amministratore di concederti il ruolo IAM Amministratore policy dell'organizzazione (roles/orgpolicy.policyAdmin) nell'organizzazione. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Risolvi i problemi relativi alla creazione di chiavi del account di servizio disabilitata

Se il vincolo iam.disableServiceAccountKeyCreation viene applicato alla tua organizzazione, non puoi creare chiavi per nessun service account della tua organizzazione. Per saperne di più su questo vincolo, vedi Disattivare la creazione di account di servizio account.

Errore di creazione della chiave

Se provi a creare una chiave dell'account di servizio, ma l'azione è bloccata dal vincolo iam.disableServiceAccountKeyCreation, viene visualizzato il seguente messaggio di errore:

Console

Nella console Google Cloud viene visualizzata una finestra di dialogo con il titolo Creazione di chiavi del service account disabilitata. La finestra di dialogo indica che il vincolo iam.disableServiceAccountKeyCreation è applicato alla tua organizzazione.

gcloud

ERROR: (gcloud.iam.service-accounts.keys.create) FAILED_PRECONDITION: Key
creation is not allowed on this service account.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Key creation is not allowed on this service account.
    subject: projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com
    type: constraints/iam.disableServiceAccountKeyCreation

REST

{
  "error": {
    "code": 400,
    "message": "Key creation is not allowed on this service account.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountKeyCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com?configvalue=SERVICE_ACCOUNT_ID%40PROJECT_ID.iam.gserviceaccount.com",
            "description": "Key creation is not allowed on this service account."
          }
        ]
      }
    ]
  }
}

Risoluzione consigliata per l'errore di creazione della chiave del account di servizio

Se un criterio dell'organizzazione ti impedisce di creare una chiave account di servizio, ti consigliamo di procedere nel seguente modo:

  1. Valuta se è necessaria una chiave del account di servizio.

    Non è consigliabile utilizzare le chiavi dell'account di servizio per l'autenticazione. Questo perché le chiavi dei account di servizio possono diventare un rischio per la sicurezza se non vengono gestite correttamente, aumentando la tua vulnerabilità a minacce come la divulgazione delle credenziali, l'escalation dei privilegi, la divulgazione di informazioni e la non repudiation.

    Nella maggior parte dei casi, per l'autenticazione devi utilizzare un'alternativa più sicura anziché una chiave dell'account di servizio.

  2. Se per il tuo caso d'uso è necessaria una chiave del account di servizio, disabilita il vincolo iam.disableServiceAccountKeyCreation per il tuo progetto.

Per disattivare il vincolo dei criteri dell'organizzazione, disattiva l'applicazione del vincolo o esenta il progetto dall'applicazione:

  • Per disattivare l'applicazione del vincolo per l'intera organizzazione, segui questi passaggi:

    1. Assicurati di disporre del ruolo Amministratore policy dell'organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Questo ruolo è disponibile solo per la concessione alle organizzazioni e non viene visualizzato nell'elenco dei ruoli per i progetti.

      Per scoprire come concedere ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

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

      Vai a Policy dell'organizzazione

    3. Nel selettore di progetti, seleziona l'organizzazione per cui vuoi disattivare il vincolo iam.disableServiceAccountKeyCreation.

    4. Nel campo Filtro, inserisci iam.disableServiceAccountKeyCreation. Poi, nell'elenco delle policy, fai clic su Disattiva creazione account di servizio account.

    5. Fai clic su Gestisci policy.

    6. Nella sezione Origine policy, assicurati che sia selezionata l'opzione Override policy della risorsa padre.

    7. In Applicazione, disattiva l'applicazione di questo vincolo di policy dell'organizzazione.

    8. Fai clic su Imposta policy.

  • Per esentare il tuo progetto dall'applicazione, segui questi passaggi:

    1. Assicurati di disporre del ruolo Amministratore tag (roles/resourcemanager.tagAdmin) e del ruolo Amministratore criteri dell'organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Per scoprire come concedere ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
    2. A livello di organizzazione, crea una chiave tag e un valore tag che utilizzerai per definire se una risorsa deve essere esentata dalla policy dell'organizzazione. Ti consigliamo di creare un tag con la chiave disableServiceAccountKeyCreation e i valori enforced e not_enforced.

      Per scoprire come creare chiavi e valori dei tag, consulta Creazione e definizione di un nuovo tag.

    3. Collega il tag disableServiceAccountKeyCreation all'organizzazione e imposta il valore su enforced. Tutte le risorse dell'organizzazione ereditano questo valore del tag, a meno che non venga sovrascritto con un valore diverso.

      Per scoprire come collegare i tag alle risorse, consulta Collegamento dei tag alle risorse.

    4. Per ogni account di servizio che vuoi esentare dal criterio dell'organizzazione, allega il tag disableServiceAccountKeyCreation e imposta il relativo valore su not_enforced. L'impostazione di un valore tag per unaccount di serviziot in questo modo sostituisce il valore tag ereditato dall'organizzazione.
    5. Crea o aggiorna il criterio dell'organizzazione che impedisce la creazione di chiavi del account di servizio in modo che non applichi il vincolo per le risorse esenti. Queste norme devono prevedere le seguenti regole:

      • Configura il vincolo iam.disableServiceAccountKeyCreation in modo che non venga applicato a nessuna risorsa con il tag disableServiceAccountKeyCreation: not_enforced. La condizione in questa regola dovrebbe essere simile alla seguente:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • Configura il vincolo iam.disableServiceAccountKeyCreation in modo che venga applicato a tutte le altre risorse.

Risolvi i problemi relativi alla creazione di account di servizio disabilitata

Se il vincolo iam.disableServiceAccountCreation è applicato alla tua organizzazione, non puoi creare service account in nessun progetto della tua organizzazione. Per ulteriori informazioni su questo vincolo, vedi Disattivare account di servizio account.

Errore durante la creazione del service account

Se provi a creare un account di servizio, ma l'azione viene bloccata dal vincolo iam.disableServiceAccountCreation, viene visualizzato il seguente messaggio di errore:

Console

Nella console Google Cloud viene visualizzata una finestra di dialogo con il titolo Creazione service account non riuscita. La finestra di dialogo indica: L'azione che hai tentato di eseguire non è riuscita. Riprova.

gcloud

ERROR: (gcloud.iam.service-accounts.create) FAILED_PRECONDITION: Service account
creation is not allowed on this project.
- '@type': type.googleapis.com/google.rpc.PreconditionFailure
  violations:
  - description: Service account creation is not allowed on this project.
    subject: projects/PROJECT_ID/serviceAccounts/?configvalue=
    type: constraints/iam.disableServiceAccountCreation

REST

{
  "error": {
    "code": 400,
    "message": "Service account creation is not allowed on this project.",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
        "violations": [
          {
            "type": "constraints/iam.disableServiceAccountCreation",
            "subject": "projects/PROJECT_ID/serviceAccounts/?configvalue=",
            "description": "Service account creation is not allowed on this project."
          }
        ]
      }
    ]
  }
}

Risoluzione consigliata per l'errore di creazione del account di servizio

Se un criterio dell'organizzazione ti impedisce di creare un account di servizio, ti consigliamo di procedere nel seguente modo:

  1. Valuta se è necessario un account di servizio.

    Consulta Scegliere quando utilizzare i service account per verificare che sia necessario un account di servizio per il tuo caso d'uso.

  2. Se è necessario un account di servizio per il tuo caso d'uso, disattiva il vincolo iam.disableServiceAccountCreation per il tuo progetto.

Per disattivare il vincolo dei criteri dell'organizzazione, disattiva l'applicazione del vincolo o esenta il progetto dall'applicazione:

  • Per disattivare l'applicazione del vincolo per l'intera organizzazione, segui questi passaggi:

    1. Assicurati di disporre del ruolo Amministratore policy dell'organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Questo ruolo è disponibile solo per la concessione alle organizzazioni e non viene visualizzato nell'elenco dei ruoli per i progetti.

      Per scoprire come concedere ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

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

      Vai a Policy dell'organizzazione

    3. Nel selettore di progetti, seleziona l'organizzazione per cui vuoi disattivare il vincolo iam.disableServiceAccountCreation.

    4. Nel campo Filtro, inserisci iam.disableServiceAccountCreation. Quindi, nell'elenco dei criteri, fai clic su Disattiva account di servizio account.

    5. Fai clic su Gestisci policy.

    6. Nella sezione Origine policy, assicurati che sia selezionata l'opzione Override policy della risorsa padre.

    7. In Applicazione, disattiva l'applicazione di questo vincolo di policy dell'organizzazione.

    8. Fai clic su Imposta policy.

  • Per esentare il tuo progetto dall'applicazione, segui questi passaggi:

    1. Assicurati di disporre del ruolo Amministratore tag (roles/resourcemanager.tagAdmin) e del ruolo Amministratore criteri dell'organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Per scoprire come concedere ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
    2. A livello di organizzazione, crea una chiave tag e un valore tag che utilizzerai per definire se una risorsa deve essere esentata dalla policy dell'organizzazione. Ti consigliamo di creare un tag con la chiave disableServiceAccountCreation e i valori enforced e not_enforced.

      Per scoprire come creare chiavi e valori dei tag, consulta Creazione e definizione di un nuovo tag.

    3. Collega il tag disableServiceAccountCreation all'organizzazione e imposta il valore su enforced. Tutte le risorse dell'organizzazione ereditano questo valore del tag, a meno che non venga sovrascritto con un valore diverso.

      Per scoprire come collegare i tag alle risorse, consulta Collegamento dei tag alle risorse.

    4. Per ogni progetto o cartella che vuoi esentare dalla policy dell'organizzazione, associa il tag disableServiceAccountCreation e imposta il relativo valore su not_enforced. L'impostazione di un valore tag per un progetto o una cartella in questo modo sostituisce il valore tag ereditato dall'organizzazione.
    5. Crea o aggiorna il criterio dell'organizzazione che impedisce la creazione di service account in modo che non applichi il vincolo per le risorse esenti. Queste norme devono prevedere le seguenti regole:

      • Configura il vincolo iam.disableServiceAccountCreation in modo che non venga applicato a nessuna risorsa con il tag disableServiceAccountCreation: not_enforced. La condizione in questa regola dovrebbe essere simile alla seguente:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • Configura il vincolo iam.disableServiceAccountCreation in modo che venga applicato a tutte le altre risorse.

Risolvi i problemi relativi alla concessione dei ruoli ai service account predefiniti

Gli account di servizio predefiniti vengono creati automaticamente quando utilizzi determinati serviziGoogle Cloud . Hanno i seguenti identificatori:

  • Account di servizio predefinito del servizio App Engine: PROJECT_ID@appspot.gserviceaccount.com
  • Account di servizio predefinito di Compute Engine: PROJECT_NUMBER-compute@developer.gserviceaccount.com

A tutti i service account predefiniti viene concesso automaticamente il ruolo Editor (roles/editor) al momento della creazione, a meno che questo comportamento non sia disattivato da una policy dell'organizzazione. Esistono due vincoli dei criteri dell'organizzazione che impediscono l'assegnazione del ruolo Editor ai service account predefiniti:

  • iam.automaticIamGrantsForDefaultServiceAccounts: un vincolo predefinito che impedisce la concessione automatica dei ruoli ai service account predefiniti. Questo vincolo non ti impedisce di concedere in un secondo momento il ruolo Editor agli account di servizio predefiniti.
  • constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts: Un vincolo gestito che impedisce che i ruoli Editor e Proprietario (roles/owner) vengano mai concessi ai service account predefiniti.

Errore durante la concessione dei ruoli di base ai service account

Se il vincolo iam.automaticIamGrantsForDefaultServiceAccounts o il vincolo constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts viene applicato al tuo progetto, i carichi di lavoro nel tuo progetto che utilizzano gli account di servizio predefiniti potrebbero riscontrare errori di autorizzazione insufficiente. Per scoprire quali ruoli concedere a un account di servizio predefinito, consulta Soluzione consigliata per la concessione dei ruoli ai service account predefiniti.

Il vincolo iam.automaticIamGrantsForDefaultServiceAccounts non causa errori da solo. Tuttavia, a causa di questo vincolo, è possibile che un carico di lavoro che utilizza ilaccount di serviziot predefinito non disponga delle autorizzazioni necessarie.

Inoltre, se il vincolo constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts è applicato al tuo progetto, verrà visualizzato un messaggio di errore simile al seguente se provi a concedere il ruolo Proprietario o Editor a un account di servizio predefinito:

Console

Nella console Google Cloud viene visualizzata una finestra di dialogo con il titolo Aggiornamento criteri IAM non riuscito. La finestra di dialogo indica che le modifiche che stai tentando di apportare alla policy IAM sono state limitate dall'amministratore delle policy dell'organizzazione, quindi elenca i vincoli che bloccano l'aggiornamento. I vincoli elencati includono il vincolo customConstraints/custom.cantGrantProjectIamAdmin.

gcloud

ERROR: (gcloud.projects.set-iam-policy) FAILED_PRECONDITION: Operation denied by
org policy on resource 'RESOURCE_ID':
["constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts":
"When this constraint is enforced, it prevents anyone from granting the Editor
role (roles/editor) or the Owner role (roles/owner) to the Compute Engine and
App Engine default service accounts, at any time. To learn more about default
service accounts, see
https://cloud.google.com/iam/help/service-accounts/default. Enforcing this
constraint prevents the default service accounts from automatically being
granted the Editor role (roles/editor). This might cause permission issues for
services that use these service accounts. To learn which roles to grant to each
service account, see
https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default."].

REST

{
  "error": {
    "code": 400,
    "message": "Operation denied by org policy on resource
    'RESOURCE_ID':
    [\"constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts\":
    \"When this constraint is enforced, it prevents anyone from granting the
    Editor role (roles/editor) or the Owner role (roles/owner) to the Compute
    Engine and App Engine default service accounts, at any time. To learn more
    about default service accounts, see
    https://cloud.google.com/iam/help/service-accounts/default.\n Enforcing this
    constraint prevents the default service accounts from automatically being
    granted the Editor role (roles/editor). This might cause permission issues
    for services that use these service accounts. To learn which roles to grant
    to each service account, see
    https://cloud.google.com/iam/help/service-accounts/troubleshoot-roles-default.\"].",
    "status": "FAILED_PRECONDITION",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.ErrorInfo",
        "reason": "CUSTOM_ORG_POLICY_VIOLATION",
        "domain": "googleapis.com",
        "metadata": {
          "customConstraints": "constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts",
          "resource": "projects/PROJECT_ID"
        }
      }
    ]
  }
}

Risoluzione consigliata per la concessione dei ruoli agli account di servizio predefiniti

Se un criterio dell'organizzazione ti impedisce di concedere il ruolo Editor o Proprietario a unaccount di serviziot predefinito, devi trovare un ruolo meno permissivo da concedere aaccount di serviziont. Il ruolo necessario per il account di servizio dipende dal servizio che utilizzi e dalle attività che vuoi svolgere.

Consulta la seguente tabella per determinare quale ruolo concedere a quale account di servizio predefinito, a seconda del servizio che stai utilizzando:

Servizio Service account predefinito Ruolo da concedere
App Engine Account di servizio predefinito di App Engine (PROJECT_ID@appspot.gserviceaccount.com) Ruolo Account Cloud Build (roles/cloudbuild.builds.builder)
Compute Engine Account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

I ruoli necessari per il account di servizio predefinito dipendono dall'attività che vuoi svolgere. Per capire quali ruoli sono necessari, consulta la documentazione relativa all'attività che vuoi svolgere o l'articolo Trovare i ruoli predefiniti giusti.

Quando decidi quale ruolo concedere, segui le best practice descritte nella pagina Service account della documentazione di Compute Engine.

Cloud Build Account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Ruolo Service Account Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Per vedere quali ruoli concedere a questo account di servizio, trova la guida rapida di Cloud Deploy che corrisponde al tuo caso d'uso, quindi concedi i ruoli descritti in quella guida rapida. Per un elenco delle guide rapide di Cloud Deploy, consulta la sezione Guide rapide nella documentazione di Cloud Deploy.
Cloud Run Functions e Cloud Functions Account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Per eseguire il deployment delle funzioni: ruolo Account Cloud Build (roles/cloudbuild.builds.builder)

Per ulteriori informazioni, vedi Service account personalizzato per Cloud Build.

Cloud Run Account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

I ruoli necessari per il account di servizio predefinito dipendono dall'attività che vuoi svolgere. Per capire quali ruoli sono necessari, consulta la documentazione relativa all'attività che vuoi svolgere o l'articolo Trovare i ruoli predefiniti giusti.

Per informazioni dettagliate sui ruoli Cloud Run, consulta Controllo dell'accesso con IAM nella documentazione di Cloud Run.

Google Kubernetes Engine Account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Ruolo Kubernetes Engine Default Node Service Account (roles/container.defaultNodeServiceAccount)

Per maggiori informazioni, consulta Utilizzare i service account IAMprivilegio minimoi minimi.

Workflow Account di servizio predefinito di Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

I ruoli necessari per il account di servizio predefinito dipendono dall'attività che vuoi svolgere. Per capire quali ruoli sono necessari, consulta la documentazione relativa all'attività che vuoi svolgere o l'articolo Trovare i ruoli predefiniti giusti.

Segui le best practice descritte nella pagina Concedi l'autorizzazione dei workflow per l'accesso alle Google Cloud risorse nella documentazione di Workflows.