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

Il servizio di criteri dell'organizzazione ha diversi vincoli predefiniti e gestiti che possono colpire gli account di servizio della tua organizzazione. Questa pagina ti aiuta a capire quali errori generano i criteri dell'organizzazione e i passaggi che puoi svolgere per risolverli.

Risolvere i problemi relativi alla creazione di chiavi del account di servizio disabilitate

Se il vincolo iam.disableServiceAccountKeyCreation è applicato alla tua organizzazione, non puoi creare chiavi per gli account di servizio della tua organizzazione. Per ulteriori informazioni su questo vincolo, consulta Disattivare la creazione di chiavi dell'account di servizio.

Errore di creazione della chiave

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

Console

Nella console Google Cloud viene visualizzata una finestra di dialogo con l'intestazione La creazione di chiavi dell'account di servizio è 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 dell'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 dell'account di servizio.

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

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

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

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

  • Per disattivare l'applicazione del vincolo per l'intera organizzazione:

    1. Assicurati di disporre del ruolo Amministratore delle norme dell'organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Questo ruolo può essere concesso solo alle organizzazioni e non compare nell'elenco dei ruoli per i progetti.

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

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

      Vai a Criteri 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 dei criteri, fai clic su Disattiva creazione account di servizio account.

    5. Fai clic su Gestisci criterio.

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

    7. In Applicazione, disattiva l'applicazione per questo vincolo dei criteri dell'organizzazione.

    8. Fai clic su Imposta criterio.

  • Per esentare il tuo progetto dall'applicazione delle norme:

    1. Assicurati di disporre del ruolo Amministratore tag (roles/resourcemanager.tagAdmin) e del ruolo Amministratore criteri organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Per scoprire come concedere i ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
    2. A livello di organizzazione, crea una chiave e un valore del tag che utilizzerai per definire se una risorsa deve essere esente dai criteri 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 Creare e definire un nuovo tag.

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

      Per scoprire come associare i tag alle risorse, consulta Associare i tag alle risorse.

    4. Per ogni account di servizio da esentare dai criteri dell'organizzazione, allega il tag disableServiceAccountKeyCreation e imposta il relativo valore su not_enforced. Impostare un valore tag per un account di servizio 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 avere le seguenti regole:

      • Configura il vincolo iam.disableServiceAccountKeyCreation in modo che non venga applicato alle risorse con il tag disableServiceAccountKeyCreation: not_enforced. La condizione in questa regola dovrebbe avere il seguente aspetto:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • Configura il vincolo iam.disableServiceAccountKeyCreation da applicare su tutte le altre risorse.

Risolvere i problemi relativi alla creazione di account di servizio disattivati

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

Errore di creazione dell'account di servizio

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 l'intestazione Creazione account di servizio non riuscita. La finestra di dialogo indica che l'azione tentata 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 dell'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 gli account di servizio per verificare che sia necessario un account di servizio per il tuo caso d'uso.

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

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

  • Per disattivare l'applicazione del vincolo per l'intera organizzazione:

    1. Assicurati di disporre del ruolo Amministratore delle norme dell'organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Questo ruolo può essere concesso solo alle organizzazioni e non compare nell'elenco dei ruoli per i progetti.

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

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

      Vai a Criteri 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. Poi, nell'elenco dei criteri, fai clic su Disattiva creazione account di servizio.

    5. Fai clic su Gestisci criterio.

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

    7. In Applicazione, disattiva l'applicazione per questo vincolo dei criteri dell'organizzazione.

    8. Fai clic su Imposta criterio.

  • Per esentare il tuo progetto dall'applicazione delle norme:

    1. Assicurati di disporre del ruolo Amministratore tag (roles/resourcemanager.tagAdmin) e del ruolo Amministratore criteri organizzazione (roles/orgpolicy.policyAdmin) a livello di organizzazione. Per scoprire come concedere i ruoli a livello di organizzazione, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
    2. A livello di organizzazione, crea una chiave e un valore del tag che utilizzerai per definire se una risorsa deve essere esente dai criteri 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 Creare e definire un nuovo tag.

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

      Per scoprire come associare i tag alle risorse, consulta Associare i tag alle risorse.

    4. Per ogni progetto o cartella che vuoi esentare dai criteri dell'organizzazione, allega 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 account di servizio in modo che non applichi il vincolo per le risorse esenti. Queste norme devono avere le seguenti regole:

      • Configura il vincolo iam.disableServiceAccountCreation in modo che non venga applicato alle risorse con il tag disableServiceAccountCreation: not_enforced. La condizione in questa regola dovrebbe avere il seguente aspetto:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • Configura il vincolo iam.disableServiceAccountCreation da applicare su tutte le altre risorse.

Risolvere i problemi relativi all'assegnazione dei ruoli agli account di servizio predefiniti

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

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

A tutti gli account di servizio predefiniti viene concesso automaticamente il ruolo Editor (roles/editor) al momento della creazione, a meno che questo comportamento non sia disattivato da un criterio dell'organizzazione. Esistono due vincoli dei criteri dell'organizzazione che impediscono la concessione del ruolo Editor agli account di servizio predefiniti:

  • iam.automaticIamGrantsForDefaultServiceAccounts: un vincolo predefinito che impedisce di concedere automaticamente i ruoli agli account di servizio 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) siano mai concessi agli account di servizio predefiniti.

Errore di assegnazione dei ruoli di base agli account di servizio

Se il vincolo iam.automaticIamGrantsForDefaultServiceAccounts o il vincolo constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts viene applicato al progetto, i carichi di lavoro del progetto che utilizzano gli account di servizio predefiniti potrebbero riscontrare errori di autorizzazione insufficienti. Per scoprire quali ruoli assegnare a un account di servizio predefinito, consulta la risoluzione consigliata per l'assegnazione dei ruoli agli account di servizio predefiniti.

Il vincolo iam.automaticIamGrantsForDefaultServiceAccounts non causa errori da solo. Tuttavia, a causa di questo vincolo, è possibile che un workload che utilizza il account di servizio predefinito non disponga delle autorizzazioni di cui ha bisogno.

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

Console

Nella console Google Cloud viene visualizzata una finestra di dialogo con l'intestazione Aggiornamento del criterio IAM non riuscito. La finestra di dialogo indica che le modifiche che stai tentando di apportare al criterio 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 l'assegnazione dei ruoli agli account di servizio predefiniti

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

Esamina la seguente tabella per determinare quale ruolo concedere a quale account di servizio predefinito, a seconda del servizio in uso:

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

I ruoli di cui ha bisogno l'account di servizio predefinito dipendono dall'attività che vuoi svolgere. Per capire quali ruoli sono richiesti, consulta la documentazione dell'attività che vuoi svolgere o Scegliere i ruoli predefiniti.

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

Cloud Build Account di servizio predefinito Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Ruolo dell'account di servizio Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Account di servizio predefinito Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Per sapere quali ruoli concedere a questo account di servizio, individua la guida rapida di Cloud Deploy corrispondente al tuo caso d'uso, quindi concedi i ruoli descritti nella guida rapida. Per un elenco delle guide rapide di Cloud Deploy, consulta la sezione Guide rapide della documentazione di Cloud Deploy.
Funzioni Cloud Run e Cloud Functions Account di servizio predefinito 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, consulta Account di servizio personalizzato per Cloud Build.

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

I ruoli di cui ha bisogno l'account di servizio predefinito dipendono dall'attività che vuoi svolgere. Per capire quali ruoli sono richiesti, consulta la documentazione dell'attività che vuoi svolgere o Scegliere i ruoli predefiniti.

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 Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Ruolo dell'account di servizio del nodo predefinito di Kubernetes Engine (roles/container.defaultNodeServiceAccount)

Per ulteriori informazioni, consulta Utilizzare i service account IAM con privilegio minimo minimi.

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

I ruoli di cui ha bisogno l'account di servizio predefinito dipendono dall'attività che vuoi svolgere. Per capire quali ruoli sono richiesti, consulta la documentazione relativa all'attività che vuoi svolgere o Scegliere i ruoli predefiniti.

Segui le best practice descritte nella pagina Concedere l'autorizzazione di un flusso di lavoro per accedere alle risorse Google Cloud della documentazione di Workflows.