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

O serviço de políticas de organização tem várias restrições predefinidas e geridas que podem afetar as contas de serviço na sua organização. Esta página ajuda a compreender que erros essas políticas de organização geram e os passos que pode realizar para resolver esses erros.

Funções necessárias

Para obter as autorizações de que precisa para resolver problemas de políticas de organização, peça ao seu administrador que lhe conceda a função IAM de administrador de políticas de organização (roles/orgpolicy.policyAdmin) na organização. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Resolva problemas de criação de chaves de contas de serviço desativadas

Se a restrição iam.disableServiceAccountKeyCreation for aplicada à sua organização, não pode criar chaves para nenhuma conta de serviço na sua organização. Para mais informações sobre esta restrição, consulte o artigo Desative a criação de chaves de contas de serviço.

Erro de criação de chave

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

Consola

Na Google Cloud consola, é apresentada uma caixa de diálogo com o título A criação de chaves de conta de serviço está desativada. A caixa de diálogo indica 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 que faça o seguinte:

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

    Não recomendamos a utilização de chaves de contas de serviço para autenticação. Isto deve-se ao facto de as chaves de contas de serviço poderem tornar-se um risco de segurança se não forem geridas corretamente, o que aumenta a sua vulnerabilidade a ameaças como a fuga de credenciais, o escalamento de privilégios, a divulgação de informações e a não repudiação.

    Na maioria dos casos, deve usar uma alternativa mais segura para fazer a autenticação em vez de usar uma chave de conta de serviço.

  2. Se precisar de uma chave de conta de serviço para o seu exemplo de utilização, desative a restrição iam.disableServiceAccountKeyCreation para o seu projeto.

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

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

    1. Certifique-se de que tem a função de administrador da política da organização (roles/orgpolicy.policyAdmin) ao nível da organização. Esta função só está disponível para concessão em organizações e não aparece na lista de funções para projetos.

      Para saber como conceder funções ao nível da organização, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    2. Na Google Cloud consola, aceda à página Políticas da organização.

      Aceda às políticas da organização

    3. No seletor de projetos, selecione a organização para a qual quer desativar a restrição iam.disableServiceAccountKeyCreation.

    4. No campo Filtro, introduza iam.disableServiceAccountKeyCreation. Em seguida, na lista de políticas, clique em Desativar a criação de chaves de contas de serviço.

    5. Clique em Gerir política.

    6. Na secção Origem da política, certifique-se de que a opção Substituir política do elemento principal está selecionada.

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

    8. Clique em Definir política.

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

    1. Certifique-se de que tem a função de administrador de etiquetas (roles/resourcemanager.tagAdmin) e a função de administrador da política da organização (roles/orgpolicy.policyAdmin) ao nível da organização. Para saber como conceder funções ao nível da organização, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
    2. Ao nível da organização, crie uma chave de etiqueta e um valor de etiqueta que vai usar para definir se um recurso deve estar isento da política da organização. Recomendamos que crie uma etiqueta com a chave disableServiceAccountKeyCreation e os valores enforced e not_enforced.

      Para saber como criar chaves de etiquetas e valores de etiquetas, consulte o artigo Criar e definir uma nova etiqueta.

    3. Anexe a etiqueta disableServiceAccountKeyCreation à organização e defina o respetivo valor como enforced. Todos os recursos na organização herdam este valor da etiqueta, a menos que seja substituído por um valor da etiqueta diferente.

      Para saber como anexar etiquetas a recursos, consulte o artigo Anexar etiquetas a recursos.

    4. Para cada conta de serviço que quer isentar da política da organização, anexe a etiqueta disableServiceAccountKeyCreation e defina o respetivo valor como not_enforced. A definição de um valor de etiqueta para uma conta de serviço desta forma substitui o valor de etiqueta herdado da organização.
    5. Crie ou atualize a política da organização que impede a criação de chaves de contas de serviço para que não aplique a restrição aos recursos isentos. Esta política deve ter as seguintes regras:

      • Configure a restrição iam.disableServiceAccountKeyCreation para não ser aplicada a recursos com a etiqueta disableServiceAccountKeyCreation: not_enforced. A condição nesta regra deve ter o seguinte aspeto:

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

Resolva problemas de criação de contas de serviço desativadas

Se a restrição iam.disableServiceAccountCreation for aplicada à sua organização, não pode criar contas de serviço em nenhum projeto da sua organização. Para mais informações acerca desta restrição, consulte o artigo Desative a criação de contas de serviço.

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

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

Consola

Na Google Cloud consola, é apresentada uma caixa de diálogo com o título Falha na criação da conta de serviço. A caixa de diálogo indica: 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 que faça o seguinte:

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

    Reveja o artigo Escolha quando usar contas de serviço para confirmar que é necessária uma conta de serviço para o seu exemplo de utilização.

  2. Se precisar de uma conta de serviço para o seu exemplo de utilização, desative a restrição iam.disableServiceAccountCreation para o seu projeto.

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

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

    1. Certifique-se de que tem a função de administrador da política da organização (roles/orgpolicy.policyAdmin) ao nível da organização. Esta função só está disponível para concessão em organizações e não aparece na lista de funções para projetos.

      Para saber como conceder funções ao nível da organização, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    2. Na Google Cloud consola, aceda à página Políticas da organização.

      Aceda às políticas da organização

    3. No seletor de projetos, selecione a organização para a qual quer desativar a restrição iam.disableServiceAccountCreation.

    4. No campo Filtro, introduza iam.disableServiceAccountCreation. Em seguida, na lista de políticas, clique em Desativar criação de contas de serviço.

    5. Clique em Gerir política.

    6. Na secção Origem da política, certifique-se de que a opção Substituir política do elemento principal está selecionada.

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

    8. Clique em Definir política.

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

    1. Certifique-se de que tem a função de administrador de etiquetas (roles/resourcemanager.tagAdmin) e a função de administrador da política da organização (roles/orgpolicy.policyAdmin) ao nível da organização. Para saber como conceder funções ao nível da organização, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
    2. Ao nível da organização, crie uma chave de etiqueta e um valor de etiqueta que vai usar para definir se um recurso deve estar isento da política da organização. Recomendamos que crie uma etiqueta com a chave disableServiceAccountCreation e os valores enforced e not_enforced.

      Para saber como criar chaves de etiquetas e valores de etiquetas, consulte o artigo Criar e definir uma nova etiqueta.

    3. Anexe a etiqueta disableServiceAccountCreation à organização e defina o respetivo valor como enforced. Todos os recursos na organização herdam este valor da etiqueta, a menos que seja substituído por um valor da etiqueta diferente.

      Para saber como anexar etiquetas a recursos, consulte o artigo Anexar etiquetas a recursos.

    4. Para cada projeto ou pasta que quer isentar da política da organização, anexe a etiqueta disableServiceAccountCreation e defina o respetivo valor como not_enforced. Definir um valor de etiqueta para um projeto ou uma pasta desta forma substitui o valor de etiqueta 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 não aplique a restrição aos recursos isentos. Esta política deve ter as seguintes regras:

      • Configure a restrição iam.disableServiceAccountCreation para não ser aplicada a recursos com a etiqueta disableServiceAccountCreation: not_enforced. A condição nesta regra deve ter o seguinte aspeto:

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

Resolva problemas de atribuição de funções a contas de serviço predefinidas

As contas de serviço predefinidas são criadas automaticamente quando usa determinados Google Cloud serviços. Têm os seguintes identificadores:

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

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

  • iam.automaticIamGrantsForDefaultServiceAccounts: uma restrição predefinida que impede a concessão automática de funções às contas de serviço predefinidas. Esta restrição não impede que atribua posteriormente a função de editor às contas de serviço predefinidas.
  • constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts: Uma restrição gerida que impede que as funções Editor e Proprietário (roles/owner) sejam concedidas às contas de serviço predefinidas.

Erro ao conceder funções básicas a contas de serviço

Se a restrição iam.automaticIamGrantsForDefaultServiceAccounts ou a restrição constraints/iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts for aplicada ao seu projeto, as cargas de trabalho no seu projeto que usam as contas de serviço predefinidas podem encontrar erros de autorização insuficientes. Para saber que funções conceder a uma conta de serviço predefinida, consulte a Resolução recomendada para conceder funções a contas de serviço predefinidas.

A restrição iam.automaticIamGrantsForDefaultServiceAccounts não causa erros por si só. No entanto, devido a esta restrição, é possível que uma carga de trabalho que use a conta de serviço predefinida não tenha as autorizações de que precisa.

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

Consola

Na Google Cloud consola, é apresentada uma caixa de diálogo com o título Falha na atualização da política de IAM. A caixa de diálogo indica que as alterações que está a tentar fazer à sua política de IAM foram restritas pelo administrador da política da sua organização e, em seguida, apresenta as restrições que bloqueiam a atualização. As restrições indicadas 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 funções a contas de serviço predefinidas

Se uma política da organização impedir que atribua a função de editor ou proprietário a uma conta de serviço predefinida, deve encontrar uma função menos permissiva para atribuir à conta de serviço. A função de que a conta de serviço precisa depende do serviço que está a usar e das tarefas que quer realizar.

Reveja a tabela seguinte para determinar que função atribuir a que conta de serviço predefinida, consoante o serviço que está a usar:

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

As funções de que a conta de serviço predefinida precisa dependem da tarefa que quer realizar. Para saber que funções são necessárias, reveja a documentação da tarefa que quer realizar ou reveja o artigo Encontre as funções predefinidas certas.

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

Cloud Build Conta de serviço predefinida 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 predefinida do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com) Para ver as funções a conceder a esta conta de serviço, encontre o início rápido do Cloud Deploy que corresponde ao seu exemplo de utilização e, em seguida, conceda as funções descritas nesse início rápido. Para ver uma lista de inícios rápidos do Cloud Deploy, consulte o artigo Inícios rápidos na documentação do Cloud Deploy.
Funções do Cloud Run e Cloud Functions Conta de serviço predefinida do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

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

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

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

As funções de que a conta de serviço predefinida precisa dependem da tarefa que quer realizar. Para saber que funções são necessárias, reveja a documentação da tarefa que quer realizar ou reveja o artigo Encontre as funções predefinidas certas.

Para ver detalhes sobre as funções do Cloud Run, consulte o artigo Controlo de acesso com a IAM na documentação do Cloud Run.

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

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

Para mais informações, consulte o artigo Use contas de serviço IAM com o menor número possível de privilégios.

Workflows Conta de serviço predefinida do Compute Engine (PROJECT_NUMBER-compute@developer.gserviceaccount.com)

As funções de que a conta de serviço predefinida precisa dependem da tarefa que quer realizar. Para saber que funções são necessárias, reveja a documentação da tarefa que quer realizar ou reveja o artigo Encontre as funções predefinidas certas.

Siga as práticas recomendadas descritas na página Conceda uma autorização de fluxo de trabalho para aceder a recursos Google Cloud na documentação dos fluxos de trabalho.