Resolver erros de políticas da organização para contas de serviço

O serviço de política da organização tem várias restrições predefinidas e gerenciadas que podem afetar as contas de serviço na sua organização. Esta página ajuda você a entender quais erros essas políticas da organização geram e as etapas que você pode seguir para resolvê-los.

Resolver problemas de criação de chave da conta de serviço desativada

Se a restrição iam.disableServiceAccountKeyCreation for aplicada à sua organização, não será possível criar chaves para nenhuma conta de serviço na organização. Para mais informações sobre essa restrição, consulte Desativar a criação de chaves da conta de serviço.

Erro de criação de chave

Se você tentar criar uma chave de conta de serviço, mas a ação for bloqueada pela restrição iam.disableServiceAccountKeyCreation, a seguinte mensagem de erro será exibida:

Console

No console do Google Cloud, uma caixa de diálogo aparece com o título A criação de chaves de conta de serviço está desativada. A caixa de diálogo informa que a restrição iam.disableServiceAccountKeyCreation é aplicada na sua organização.

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."
          }
        ]
      }
    ]
  }
}

Resolução recomendada para o erro de criação da chave da conta de serviço

Se uma política da organização impedir a criação de uma chave de conta de serviço, recomendamos o seguinte:

  1. Avalie se uma chave de conta de serviço é necessária.

    Não recomendamos o uso de chaves de conta de serviço para autenticação. Isso ocorre porque as chaves da conta de serviço podem se tornar um risco de segurança se não forem gerenciadas corretamente, aumentando sua vulnerabilidade a ameaças, como vazamento de credenciais, escalonamento de privilégios, divulgação de informações e não repúdio.

    Na maioria dos casos, é preciso usar uma alternativa mais segura para autenticar em vez de uma chave de conta de serviço.

  2. Se uma chave de conta de serviço for necessária para seu caso de uso, desative a restrição iam.disableServiceAccountKeyCreation para o projeto.

Para desativar a restrição de política da organização, desative a aplicação dela ou isente seu projeto da aplicação:

  • Para desativar a aplicação da restrição em toda a organização, faça o seguinte:

    1. Verifique se você tem o papel de administrador da política da organização (roles/orgpolicy.policyAdmin) no nível da organização. Esse papel só está disponível para concessão em organizações e não aparece na lista de papéis para projetos.

      Para saber como conceder papéis no nível da organização, consulte Gerenciar o acesso a projetos, pastas e organizações.

    2. No console do Google Cloud, acesse a página Políticas da organização.

      Acessar as políticas da organização

    3. No seletor de projetos, selecione a organização em que você quer desativar a restrição iam.disableServiceAccountKeyCreation.

    4. No campo Filtro, digite iam.disableServiceAccountKeyCreation. Em seguida, na lista de políticas, clique em Desativar criação de chave da conta de serviço.

    5. Clique em Gerenciar política.

    6. Na seção Origem da política, verifique se a opção Substituir política do editor principal está selecionada.

    7. Em Aplicação, desative a aplicação dessa restrição de política da organização.

    8. Clique em Definir política.

  • Para isentar seu projeto da aplicação, faça o seguinte:

    1. Verifique se você tem a função de administrador de tags (roles/resourcemanager.tagAdmin) e a função de administrador da política da organização (roles/orgpolicy.policyAdmin) no nível da organização. Para saber como conceder papéis no nível da organização, consulte Gerenciar o acesso a projetos, pastas e organizações.
    2. No nível da organização, crie uma chave de tag e um valor de tag que serão usados para definir se um recurso será isento da política da organização. Recomendamos criar uma tag com a chave disableServiceAccountKeyCreation e os valores enforced e not_enforced.

      Para saber como criar chaves e valores de tag, consulte Como criar e definir uma nova tag.

    3. Anexe a tag disableServiceAccountKeyCreation à organização e defina o valor como enforced. Todos os recursos na organização herdam esse valor de tag, a menos que ele seja substituído por um valor de tag diferente.

      Para saber como anexar tags aos recursos, consulte Como anexar tags aos recursos.

    4. Para cada conta de serviço que você quer isentar da política da organização, anexe a tag disableServiceAccountKeyCreation e defina o valor como not_enforced. Definir um valor de tag para uma conta de serviço dessa maneira substitui o valor da tag herdado da organização.
    5. Crie ou atualize a política da organização que impede a criação de chaves de conta de serviço para que ela não aplique a restrição a recursos isentos. Essa política precisa ter as seguintes regras:

      • Configure a restrição iam.disableServiceAccountKeyCreation para que não seja aplicada aos recursos com a tag disableServiceAccountKeyCreation: not_enforced. A condição nessa regra precisa ser semelhante a esta:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountKeyCreation', 'not_enforced')"
        
      • Configure a restrição iam.disableServiceAccountKeyCreation para que seja aplicada a todos os outros recursos.

Resolver problemas de criação de conta de serviço desativadas

Se a restrição iam.disableServiceAccountCreation for aplicada à sua organização, não será possível criar contas de serviço em nenhum projeto da organização. Para mais informações sobre essa restrição, consulte Desativar a conta de serviço de serviço.

Erro na criação da conta de serviço

Se você tentar criar uma conta de serviço, mas a ação for bloqueada pela restrição iam.disableServiceAccountCreation, a seguinte mensagem de erro será exibida:

Console

No console do Google Cloud, uma caixa de diálogo aparece com o título Falha na criação da conta de serviço. A caixa de diálogo informa: A ação tentada falhou. Tente novamente.

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."
          }
        ]
      }
    ]
  }
}

Resolução recomendada para o erro de criação da conta de serviço

Se uma política da organização impedir a criação de uma conta de serviço, recomendamos o seguinte:

  1. Avalie se uma conta de serviço é necessária.

    Consulte Escolher quando usar contas de serviço para confirmar se uma conta de serviço é necessária para seu caso de uso.

  2. Se uma conta de serviço for necessária para seu caso de uso, desative a restrição iam.disableServiceAccountCreation no projeto.

Para desativar a restrição de política da organização, desative a aplicação dela ou isente seu projeto da aplicação:

  • Para desativar a aplicação da restrição em toda a organização, faça o seguinte:

    1. Verifique se você tem o papel de administrador da política da organização (roles/orgpolicy.policyAdmin) no nível da organização. Esse papel só está disponível para concessão em organizações e não aparece na lista de papéis para projetos.

      Para saber como conceder papéis no nível da organização, consulte Gerenciar o acesso a projetos, pastas e organizações.

    2. No console do Google Cloud, acesse a página Políticas da organização.

      Acessar as políticas da organização

    3. No seletor de projetos, selecione a organização em que você quer desativar a restrição iam.disableServiceAccountCreation.

    4. No campo Filtro, digite iam.disableServiceAccountCreation. Em seguida, na lista de políticas, clique em Desativar conta de serviço de serviço.

    5. Clique em Gerenciar política.

    6. Na seção Origem da política, verifique se a opção Substituir política do editor principal está selecionada.

    7. Em Aplicação, desative a aplicação dessa restrição de política da organização.

    8. Clique em Definir política.

  • Para isentar seu projeto da aplicação, faça o seguinte:

    1. Verifique se você tem a função de administrador de tags (roles/resourcemanager.tagAdmin) e a função de administrador da política da organização (roles/orgpolicy.policyAdmin) no nível da organização. Para saber como conceder papéis no nível da organização, consulte Gerenciar o acesso a projetos, pastas e organizações.
    2. No nível da organização, crie uma chave de tag e um valor de tag que serão usados para definir se um recurso será isento da política da organização. Recomendamos criar uma tag com a chave disableServiceAccountCreation e os valores enforced e not_enforced.

      Para saber como criar chaves e valores de tag, consulte Como criar e definir uma nova tag.

    3. Anexe a tag disableServiceAccountCreation à organização e defina o valor como enforced. Todos os recursos na organização herdam esse valor de tag, a menos que ele seja substituído por um valor de tag diferente.

      Para saber como anexar tags aos recursos, consulte Como anexar tags aos recursos.

    4. Para cada projeto ou pasta que você quer isentar da política da organização, anexe a tag disableServiceAccountCreation e defina-a com o valor not_enforced. Definir um valor de tag para um projeto ou uma pasta dessa maneira substitui o valor da tag herdado da organização.
    5. Crie ou atualize a política da organização que impede a criação de contas de serviço para que ela não aplique a restrição a recursos isentos. Essa política precisa ter as seguintes regras:

      • Configure a restrição iam.disableServiceAccountCreation para que não seja aplicada aos recursos com a tag disableServiceAccountCreation: not_enforced. A condição nessa regra precisa ser semelhante a esta:

        "resource.matchTag('ORGANIZATION_ID/disableServiceAccountCreation', 'not_enforced')"
        
      • Configure a restrição iam.disableServiceAccountCreation para que seja aplicada a todos os outros recursos.

Resolver problemas ao conceder papéis a contas de serviço padrão

As contas de serviço padrão são criadas automaticamente quando você usa determinados serviços do Google Cloud. Eles têm os seguintes identificadores:

  • Conta de serviço padrão do serviço do App Engine: PROJECT_ID@appspot.gserviceaccount.com
  • Conta de serviço padrão do Compute Engine: PROJECT_NUMBER-compute@developer.gserviceaccount.com

Todas as contas de serviço padrão recebem automaticamente o papel de Editor (roles/editor) quando são criadas, a menos que esse comportamento seja desativado por uma política da organização. Há duas restrições de política da organização que impedem que o papel de editor seja concedido às contas de serviço padrão:

  • iam.automaticIamGrantsForDefaultServiceAccounts: uma restrição predefinida que impede que as contas de serviço padrão recebam papéis automaticamente. Essa restrição não impede que você conceda a função de editor a contas de serviço padrão.
  • constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts: uma restrição gerenciada que impede que os papéis de editor e proprietário (roles/owner) sejam concedidos às contas de serviço padrão.

Erro ao conceder papéis básicos a contas de serviço

Se a restrição iam.automaticIamGrantsForDefaultServiceAccounts ou a constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts for aplicada ao seu projeto, as cargas de trabalho que usam as contas de serviço padrão poderão encontrar erros de permissão insuficiente. Para saber quais papéis conceder a uma conta de serviço padrão, consulte Solução recomendada para conceder papéis a contas de serviço padrão.

A restrição iam.automaticIamGrantsForDefaultServiceAccounts não causa erros por conta própria. No entanto, devido a essa restrição, é possível que uma carga de trabalho que use a conta de serviço padrão não tenha as permissões necessárias.

Além disso, se a restrição constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts for aplicada ao seu projeto, uma mensagem de erro como esta será exibida se você tentar conceder a função de proprietário ou editor a uma conta de serviço padrão:

Console

No console do Google Cloud, uma caixa de diálogo aparece com o título Falha na atualização da política do IAM. A caixa de diálogo informa que as mudanças que você está tentando fazer na política do IAM foram restringidas pelo administrador da política da organização e, em seguida, lista as restrições que estão bloqueando a atualização. As restrições listadas incluem a restrição 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"
        }
      }
    ]
  }
}

Resolução recomendada para conceder papéis a contas de serviço padrão

Se uma política da organização impedir que você conceda o papel de editor ou proprietário a uma conta de serviço padrão, encontre um papel menos permissivo para conceder à conta de serviço. O papel que a conta de serviço precisa depende do serviço que você está usando e das tarefas que você quer realizar.

Consulte a tabela a seguir para determinar qual papel conceder a qual conta de serviço padrão, dependendo do serviço que você está usando:

Serviço Conta padrão de serviço Papel a ser concedido
App Engine Conta de serviço padrão do App Engine (PROJECT_ID@appspot.gserviceaccount.com) Papel de conta do Cloud Build (roles/cloudbuild.builds.builder)
Compute Engine Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Os papéis que a conta de serviço padrão precisa ter dependem da tarefa que você quer realizar. Para descobrir quais papéis são necessários, consulte a documentação da tarefa que você quer realizar ou Escolher papéis predefinidos.

Ao decidir qual função conceder, siga as práticas recomendadas descritas na página Contas de serviço da documentação do Compute Engine.

Cloud Build Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Função de conta de serviço do Cloud Build (roles/cloudbuild.builds.builder)
Cloud Deploy Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Para saber quais papéis conceder a essa conta de serviço, encontre o guia de início rápido do Cloud Deploy que corresponde ao seu caso de uso e conceda as funções descritas nele. Para conferir uma lista de guias de início rápido do Cloud Deploy, consulte Guias de início rápido na documentação do Cloud Deploy.
Funções do Cloud Run e do Cloud Functions Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Para implantar funções: função de conta do Cloud Build (roles/cloudbuild.builds.builder)

Para mais informações, consulte Conta de serviço personalizada para o Cloud Build.

Cloud Run Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Os papéis que a conta de serviço padrão precisa ter dependem da tarefa que você quer realizar. Para descobrir quais papéis são necessários, consulte a documentação da tarefa que você quer realizar ou Escolher papéis predefinidos.

Para saber mais sobre os papéis do Cloud Run, consulte Controle de acesso com o IAM na documentação do Cloud Run.

Google Kubernetes Engine Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Função padrão da conta de serviço de nós do Kubernetes Engine (roles/container.defaultNodeServiceAccount)

Para mais informações, consulte Usar contas de serviço do IAM com privilégio mínimo.

Fluxos de trabalho Conta de serviço padrão do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

Os papéis que a conta de serviço padrão precisa ter dependem da tarefa que você quer realizar. Para descobrir quais papéis são necessários, consulte a documentação da tarefa que você quer realizar ou Escolher papéis predefinidos.

Siga as práticas recomendadas descritas na página Conceder permissão a um fluxo de trabalho para acessar recursos do Google Cloud na documentação de Workflows.