Restringir o uso da conta de serviço do IAM

O serviço de políticas da organização oferece restrições que podem ser usadas em políticas da organização para limitar o uso de contas de serviçodo Identity and Access Management (IAM, na sigla em inglês).

Muitas dessas restrições determinam se contas de serviço e outros recursos podem ser criados ou configurados de maneira específica. Essas restrições não são retroativas; Elas não afetam contas de serviço criadas e configuradas anteriormente.

Antes de começar

Você precisa ter permissão para modificar políticas da organização e assim poder definir restrições. Por exemplo, o orgpolicy.policyAdmin papel tem permissão para definir restrições da política da organização. Leia a página Criar políticas da organização para saber mais sobre como gerenciar políticas no nível da organização.

Restrições gerenciadas

As restrições a seguir são tipos de restrições gerenciadas , definidas como verdadeiras ou falsas. As restrições gerenciadas são criadas na plataforma de políticas da organização personalizadas.

Para saber como criar políticas da organização que aplicam restrições gerenciadas, consulte Criar políticas da organização.

Impedir que o papel de proprietário e editor seja concedido a contas de serviço padrão

Alguns Google Cloud serviços criam automaticamente contas de serviço padrão. Quando uma conta de serviço padrão é criada, ela recebe automaticamente o papel de Editor (roles/editor) no seu projeto. Alguém também pode conceder um papel altamente privilegiado, como o de Editor ou Proprietário (roles/owner), a uma conta de serviço padrão posteriormente.

Os papéis de editor e proprietário são papéis básicos altamente privilegiados básicos papéis. Não conceda esses papéis a nenhum principal na produção, incluindo contas de serviço padrão.

Para impedir que as contas de serviço padrão recebam os papéis de editor ou proprietário, use a restrição gerenciada iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts. Essa restrição impede que as contas de serviço padrão recebam os papéis de editor ou proprietário, seja de forma automática ou manual.

Desativar criação de conta de serviço

Você pode usar a restrição gerenciada iam.managed.disableServiceAccountCreation para desativar a criação de novas contas de serviço. Isso permite centralizar o gerenciamento de contas de serviço sem restringir as outras permissões dos desenvolvedores aos projetos.

Se você aplicar essa restrição em um projeto, alguns Google Cloud serviços não poderão criar contas de serviço padrão automaticamente. Como resultado, se o projeto executar cargas de trabalho que precisem personificar uma conta de serviço, o projeto poderá não conter uma conta de serviço que a carga de trabalho possa usar. Para resolver esse problema, você pode ativar a identidade temporária de conta de serviço entre projetos. Quando você ativa esse recurso, é possível criar contas de serviço em um projeto centralizado e, em seguida, anexá-las a recursos em outros projetos.

Para mais informações sobre como organizar contas de serviço, consulte Onde criar contas de serviço.

Desativar a criação de chaves de API vinculadas a contas de serviço

Você pode usar a restrição gerenciada iam.managed.disableServiceAccountApiKeyCreation para desativar a criação de chaves de API vinculadas a contas de serviço. Quando essa restrição é definida, os usuários não podem criar chaves de API vinculadas a contas de serviço em projetos afetados pela restrição.

Essa restrição é aplicada por padrão.

Desativar criação de chave da conta de serviço

Você pode usar a restrição gerenciada iam.managed.disableServiceAccountKeyCreation para desativar a criação de novas chaves de conta de serviço externas e chaves HMAC do Cloud Storage. Com isso, é possível controlar o uso de credenciais de longo prazo não gerenciadas para contas de serviço. Quando essa restrição é definida, as credenciais gerenciadas pelo usuário não podem ser criadas para contas de serviço em projetos afetados pela restrição.

Desativar upload de chave da conta de serviço

Você pode usar a restrição gerenciada iam.managed.disableServiceAccountKeyUpload para desativar o upload de chaves públicas externas para contas de serviço. Quando essa restrição é definida, os usuários não podem fazer upload de chaves públicas para contas de serviço em projetos afetados pela restrição.

Restrições gerenciadas (legado) com regras booleanas

As restrições a seguir são tipos de restrições gerenciadas legadas com regras booleanas, definidas como verdadeiras ou falsas.

Desativar concessões de papel automáticas para contas de serviço padrão

Alguns Google Cloud serviços criam automaticamente contas de serviço padrão. Quando uma conta de serviço padrão é criada, ela recebe automaticamente o papel de Editor (roles/editor) no seu projeto.

Para melhorar a segurança, recomendamos que você desative a concessão automática de papéis. Use a restrição gerenciada legada iam.automaticIamGrantsForDefaultServiceAccounts para desativar a concessão automática de papéis.

Desativar criação de conta de serviço

Você pode usar a restrição gerenciada legada iam.disableServiceAccountCreation para desativar a criação de novas contas de serviço. Isso permite centralizar o gerenciamento de contas de serviço sem restringir as outras permissões dos desenvolvedores aos projetos.

Se você aplicar essa restrição em um projeto, alguns Google Cloud serviços não poderão criar contas de serviço padrão automaticamente. Como resultado, se o projeto executar cargas de trabalho que precisem personificar uma conta de serviço, o projeto poderá não conter uma conta de serviço que a carga de trabalho possa usar. Para resolver esse problema, você pode ativar a identidade temporária de conta de serviço entre projetos. Quando você ativa esse recurso, é possível criar contas de serviço em um projeto centralizado e, em seguida, anexá-las a recursos em outros projetos.

Para mais informações sobre como organizar contas de serviço, consulte Onde criar contas de serviço.

Desativar criação de chave da conta de serviço

Você pode usar a restrição gerenciada legada iam.disableServiceAccountKeyCreation para desativar a criação de novas chaves de conta de serviço externas e chaves HMAC do Cloud Storage. Com isso, é possível controlar o uso de credenciais de longo prazo não gerenciadas para contas de serviço. Quando essa restrição é definida, as credenciais gerenciadas pelo usuário não podem ser criadas para contas de serviço em projetos afetados pela restrição.

Desativar upload de chave da conta de serviço

Você pode usar a restrição gerenciada legada iam.disableServiceAccountKeyUpload para desativar o upload de chaves públicas externas para contas de serviço. Quando essa restrição é definida, os usuários não podem fazer upload de chaves públicas para contas de serviço em projetos afetados pela restrição.

Desativar anexo de contas de serviço a recursos em outros projetos

Cada conta de serviço está localizada em um projeto. É possível usar a restrição gerenciada legada iam.disableCrossProjectServiceAccountUsage para impedir que as contas de serviço em um projeto sejam anexadas a recursos em outros projetos.

Se você quiser permitir que contas de serviço sejam usadas em vários projetos, consulte Como ativar a identidade temporária de conta de serviço em projetos.

Restringir a remoção de garantias de projetos quando as contas de serviço são usadas em todos os projetos (Beta)

Quando você permite que as contas de serviço de um projeto sejam anexadas a recursos em outros projetos, o IAM adiciona uma garantia de projeto que impede a exclusão desse projeto. Por padrão, qualquer pessoa que tenha a permissão resourcemanager.projects.updateLiens no projeto pode excluir a garantia.

Se você aplicar a restrição gerenciada legada iam.restrictCrossProjectServiceAccountLienRemoval, os principais só poderão excluir a garantia se tiverem a permissão resourcemanager.projects.updateLiens na organização.

Recomendamos que você aplique essa restrição se algum dos seus projetos permitir identidade temporária de conta de serviço entre projetos.

Desativar a criação de cluster da identidade da carga de trabalho

Você pode usar a restrição gerenciada legada iam.disableWorkloadIdentityClusterCreation para exigir que qualquer novo cluster do Google Kubernetes Engine tenha o recurso Identidade da carga de trabalho desativado no momento da criação. Se quiser controlar rigidamente o acesso à conta de serviço na organização, desabilite a Identidade da carga de trabalho, além da criação da conta de serviço e da criação da chave da conta de serviço.

Os clusters GKE atuais com a Federação de Identidade da Carga de Trabalho para GKE ativada não serão afetados e continuarão funcionando normalmente.

Como definir uma restrição gerenciada (legado) com regras booleanas

Console

Para definir uma política da organização que impõe uma restrição para restringir o uso da conta de serviço:

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

    Acessar a página Políticas da organização

  2. No seletor de projetos, escolha a organização em que você quer restringir o uso da conta de serviço.

  3. Clique em uma das restrições de uso da conta de serviço listadas nesta página.

  4. Clique em Gerenciar política.

  5. Em Aplica-se a, selecione Substituir a política do recurso pai.

  6. Clique em Adicionar uma regra.

  7. Em Aplicação, selecione Ativada.

  8. Para aplicar a política, clique em Definir política.

gcloud

As políticas podem ser definidas pela Google Cloud CLI.

Para restringir o uso da conta de serviço, execute o seguinte comando:

gcloud resource-manager org-policies enable-enforce \
    --organization 'ORGANIZATION_ID' \
    CONSTRAINT_NAME

Em que CONSTRAINT_NAME é a restrição que você quer aplicar.

Para desativar a aplicação, o mesmo comando pode ser emitido com o

disable-enforce
O comando.

Para saber mais sobre o uso de restrições nas políticas da organização, consulte Criar políticas da organização.

Exemplo de restrição gerenciada (legado) com regras booleanas

O snippet de código a seguir mostra uma política da organização que impõe a restrição gerenciada legada iam.disableServiceAccountCreation, que impede a criação de contas de serviço:

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

Restrições gerenciadas (legado) com regras de lista

As restrições a seguir são tipos de restrições gerenciadas legadas com regras de lista, definidas como uma lista de valores.

Estender o ciclo de vida dos tokens de acesso do OAuth 2.0

É possível criar um token de acesso OAuth 2.0 que forneça credenciais de curta duração para uma conta de serviço. Por padrão, a vida útil máxima de um token de acesso é de 1 hora (3.600 segundos). No entanto, é possível estender o ciclo de vida máximo para 12 horas. Para fazer isso, identifique as contas de serviço que precisam de um ciclo de vida estendido de tokens de acesso e, em seguida, adicione essas contas de serviço a uma política da organização que inclua a restrição gerenciada legada constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Limitar o ciclo de vida das chaves da conta de serviço

Uma chave de conta de serviço permite autenticar uma solicitação como uma conta de serviço. Por padrão, as chaves da conta de serviço nunca expiram. É possível alterar esse padrão definindo um expiry time para todas as chaves recém-criadas no projeto, na pasta ou na organização.

Para definir um expiry time, use a restrição gerenciada legada constraints/iam.serviceAccountKeyExpiryHours para especificar o número de horas para as quais uma chave recém-criada é válida. Após esse período, a chave da conta de serviço expira e não pode mais ser usada.

Essa restrição gerenciada legada aceita os seguintes valores ALLOW; ela não aceita valores DENY. Como prática recomendada, use o prazo de validade mais curto que atenda às suas necessidades:

  • 1h: 1 hora
  • 8h: 8 horas
  • 24h: 24 horas (1 dia)
  • 168h: 168 horas (7 dias)
  • 336h: 336 horas (14 dias)
  • 720h: 720 horas (30 dias)
  • 1440h: 1.440 horas (60 dias)
  • 2160h: 2.160 horas (90 dias)

Não é possível mesclar a restrição constraints/iam.serviceAccountKeyExpiryHours com uma política mãe. Para aplicar essa restrição, é necessário substituir ou herdar a política mãe.

Especificar provedores de identidade externos permitidos

Se você usar a federação de identidade da carga de trabalho, que permite que identidades externas acessem Google Cloud recursos, especifique quais provedores de identidade externos são permitidos. Por padrão, todos os provedores são permitidos. Para definir um limite, use a restrição gerenciada legada constraints/iam.workloadIdentityPoolProviders para especificar URIs para os provedores permitidos, usando os seguintes formatos:

  • Amazon Web Services (AWS): https://sts.amazonaws.com

    Para limitar quais contas da AWS são permitidas, use a constraints/iam.workloadIdentityPoolAwsAccounts restrição gerenciada legada conforme descrito nesta página.

  • Microsoft Azure: https://sts.windows.net/azure-tenant-id

  • Outros provedores de identidade compatíveis com o OpenID Connect (OIDC): use o URI do emissor do provedor de identidade.

Especificar contas permitidas da AWS

Se você usar a federação de identidade da carga de trabalho, que permite que identidades externas acessem Google Cloud recursos, especifique quais contas da AWS têm permissão para acessar seus recursos. Por padrão, as cargas de trabalho de qualquer conta da AWS podem acessar seus Google Cloud recursos. Para limitar quais contas da AWS são permitidas, use a restrição gerenciada legada constraints/iam.workloadIdentityPoolAwsAccounts para especificar uma lista de IDs de conta permitidos.

Desativar automaticamente as chaves de conta de serviço expostas

Google Cloud ocasionalmente detecta que uma chave de conta de serviço específica foi exposta. Por exemplo, ela pode detectar uma chave em um repositório público. Para especificar o que Google Cloud faz com essas chaves, use a iam.serviceAccountKeyExposureResponse restrição gerenciada legada. As chaves monitoradas incluem chaves de conta de serviço de longa duração e chaves de API vinculadas a uma conta de serviço.

Essa restrição gerenciada legada aceita os seguintes valores ALLOW; ela não aceita valores DENY.

  • DISABLE_KEY: se Google Cloud detectar uma chave exposta, ela será desativada automaticamente. Ela também cria um evento dos Registros de auditoria do Cloud e envia uma notificação sobre a chave exposta para proprietários de projetos e contatos de segurança.

  • WAIT_FOR_ABUSE: Google Cloud não desativa proativamente as chaves expostas. No entanto, Google Cloud ainda pode desativar chaves expostas se elas forem usadas de maneiras que afetem negativamente a plataforma. Independentemente de a chave exposta estar desativada ou não, Google Cloud cria um evento dos Registros de auditoria do Cloud e envia uma notificação sobre a chave exposta para proprietários de projetos e contatos de segurança.

Quando Google Cloud detecta uma chave exposta ou desativa uma chave exposta, ela também faz o seguinte:

  • Gera eventos dos Registros de auditoria do Cloud.

    • Quandodetecta que uma chave foi exposta, um evento de abuso é criado nos registros de eventos de abuso. Google Cloud

    • Quandodesativa uma chave, os registros de auditoria contêm a ação de desativação pelo principal gcp-compromised-key-response@system.gserviceaccount.com. Google Cloud

  • Define o campo extendedStatus.value da chave exposta ou desativada. O campo de status estendido inclui o local em que o vazamento foi detectado.

Recomendamos que você defina essa restrição como DISABLE_KEY. Definir essa restrição como WAIT_FOR_ABUSE aumenta o risco de uso indevido de chaves expostas.

Se você decidir definir a restrição como WAIT_FOR_ABUSE, recomendamos que você se inscreva nos eventos dos Registros de auditoria do Cloud, revise as dados de contato de segurança em Contatos Essenciais, e verifique se os contatos de segurança respondem às notificações de maneira oportuna.

Não é possível mesclar a restrição iam.serviceAccountKeyExposureResponse com uma política mãe. Para aplicar essa restrição, é necessário substituir a política mãe.

Como definir uma restrição gerenciada (legado) com regras de lista

Console

Para definir uma política da organização que contenha uma restrição gerenciada legada:

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

    Acessar a página Políticas da organização

  2. No seletor de projetos, selecione o recurso em que você quer definir a política da organização.

  3. Na página Políticas da organização, selecione uma restrição na lista. A página Detalhes da política dessa restrição será exibida.

  4. Para atualizar a política da organização nesse recurso, clique em Gerenciar política.

  5. Em Política de aplicação, selecione uma opção para aplicação:

    • Para mesclar e avaliar as políticas da organização juntas, selecione Mesclar com pai. Para saber mais informações sobre herança e a hierarquia de recursos, consulte Avaliação de hierarquia.
    • Para modificar políticas herdadas de um recurso pai, selecione Substituir.
  6. Clique em Adicionar uma regra.

  7. Em Valores da política, selecione Personalizado.

  8. Em Tipo de política, selecione Permitir.

  9. Em Valores personalizados, digite o primeiro valor da restrição gerenciada legada.

    1. Se quiser adicionar mais valores, clique em Adicionar valor para criar mais linhas e adicione um valor a cada linha.
  10. Quando terminar de adicionar valores, clique em Concluído.

  11. Para aplicar a política, clique em Definir política.

gcloud

As políticas podem ser definidas pela Google Cloud CLI:

gcloud resource-manager org-policies allow \
    CONSTRAINT_NAME \
    VALUE_1 [VALUE_N ...] \
    --organization=ORGANIZATION_ID \

Substitua os seguintes valores:

  • CONSTRAINT_NAME: o nome da restrição gerenciada legada. Por exemplo, constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • VALUE_1, VALUE_N...: valores da restrição gerenciada legada.

Para saber mais sobre o uso de restrições nas políticas da organização, consulte Criar políticas da organização.

Exemplo de restrição gerenciada (legado) com regras de lista

O snippet de código a seguir mostra uma política da organização que impõe a restrição gerenciada legada iam.allowServiceAccountCredentialLifetimeExtension, que estende o ciclo de vida máximo dos tokens de acesso do OAuth 2.0 para contas de serviço listadas:

name: organizations/012345678901/policies/iam.allowServiceAccountCredentialLifetimeExtension
spec:
  rules:
  - values:
      allowedValues:
      - SERVICE_ACCOUNT_ADDRESS

Como aplicar restrições condicionalmente usando tags

As tags podem ser usadas para incluir ou excluir recursos marcados da aplicação da política da organização. Depois de criar uma tag e anexá-la a uma conta de serviço, você pode adicionar uma condição à política para incluir ou excluir condicionalmente contas de serviço marcadas da aplicação.

Para mais detalhes sobre como usar tags com políticas da organização, consulte Definir o escopo das políticas da organização com tags.

Mensagens de erro

Desativar criação de conta de serviço

Se iam.disableServiceAccountCreation for aplicado, a criação de uma conta de serviço falhará com o erro:

FAILED_PRECONDITION: Service account creation is not allowed on this project.

Desativar a criação de chaves de API vinculadas a contas de serviço

Se iam.managed.disableServiceAccountApiKeyCreation for aplicado, a criação de uma chave de API vinculada a uma conta de serviço falhará com o erro:

FAILED_PRECONDITION: Operation denied by org policy:
["constraints/iam.managed.disableServiceAccountApiKeyCreation":
"When enforced, disables creation of API Keys bound to service accounts."]

Desativar criação de chave da conta de serviço

Se o código iam.disableServiceAccountKeyCreation for aplicado, a criação de uma conta de serviço falhará com o erro:

FAILED_PRECONDITION: Key creation is not allowed on this service account.

Desativar a criação de cluster da identidade da carga de trabalho

Se iam.disableWorkloadIdentityClusterCreation for aplicado, a criação de um cluster do GKE com a Identidade da carga de trabalho ativada falhará com o erro:

FAILED_PRECONDITION: Workload Identity is disabled by the organization
policy constraints/iam.disableWorkloadIdentityClusterCreation. Contact your
administrator to enable this feature.

Solução de problemas conhecidos

Contas de serviço padrão

A aplicação da restrição iam.disableServiceAccountCreation impedirá a criação de contas de serviço nesse projeto. Essa limitação também afeta Google Cloud os serviços que, quando ativados, criam automaticamente contas de serviço padrão no projeto, como:

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

Se a restrição iam.disableServiceAccountCreation for aplicada, a tentativa de ativar esses serviços falhará porque não será possível criar as contas de serviço padrão.

Para solucionar esse problema, faça o seguinte:

  1. Remova temporariamente a restrição iam.disableServiceAccountCreation.
  2. Ative os serviços desejados.
  3. Crie as contas de serviço necessárias.
  4. Por fim, reaplique a restrição.