Como restringir o uso da conta de serviço

No Gerenciador de Recursos, podem ser usadas restrições nas políticas da organização para limitar o uso de contas de serviço do Gerenciamento de identidade e acesso (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 papel orgpolicy.policyAdmin tem permissão para definir restrições da política da organização. Leia a página Como usar restrições para saber como gerenciar políticas no nível da organização.

Restrições booleanas

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

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

Alguns serviços do Google Cloud 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 booleana 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 booleana 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 serviços do Google Cloud 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, ative a representação da 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

É possível usar a restrição booleana iam.disableServiceAccountKeyCreation para desativar a criação de novas chaves externas da conta de serviço e chaves HMAC do Cloud Storage. Isso permite 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

É possível usar a restrição booleana 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 booleana 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 personificação de contas 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 booleana iam.restrictCrossProjectServiceAccountLienRemoval, os membros 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 a falsificação 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 booleana 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 existentes com a Identidade da carga de trabalho ativada não serão afetados e continuarão funcionando normalmente.

Como aplicar uma restrição booleana

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 console do Google Cloud, acesse a página Políticas da organização.

    Acessar as políticas da organização

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

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

  4. Clique em Gerenciar política.

  5. Em Aplicável a, selecione Substituir 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' \
    BOOLEAN_CONSTRAINT

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

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

Comando
disable-enforce
.

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

Exemplo de política com restrição booleana

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

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

Restrições de lista

As restrições a seguir são tipos de restrição 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 de lista constraints/iam.allowServiceAccountCredentialLifetimeExtension.

Limitar a duração 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 prazo de validade para todas as chaves recém-criadas no projeto, na pasta ou na organização.

Para definir um prazo de validade, use a restrição de lista 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 de lista aceita os seguintes valores de ALLOW, mas não aceita valores de DENY. Como prática recomendada, use o tempo de expiração 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)

A restrição constraints/iam.serviceAccountKeyExpiryHours não pode ser mesclada com uma política mãe. Para aplicar essa restrição, substitua ou herde a política mãe.

Especificar provedores de identidade externos permitidos

Se você usar a federação de identidades de carga de trabalho, que permite que identidades externas acessem os recursos do Google Cloud, 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 de lista 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 restrição de lista constraints/iam.workloadIdentityPoolAwsAccounts 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 identidades de carga de trabalho, que permite que identidades externas acessem os recursos do Google Cloud, 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 recursos do Google Cloud. Para limitar quais contas da AWS são permitidas, use a restrição de lista constraints/iam.workloadIdentityPoolAwsAccounts para especificar uma lista de IDs de conta permitidos.

Desativar automaticamente as chaves das conta de serviço expostas

O Google Cloud ocasionalmente detecta que uma chave de conta de serviço específica foi exposta. Por exemplo, ele pode detectar uma chave em um repositório público. Para especificar o que o Google Cloud faz com essas chaves, use a restrição de lista iam.serviceAccountKeyExposureResponse.

Essa restrição de lista aceita os seguintes valores ALLOW, mas não aceita valores DENY.

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

  • WAIT_FOR_ABUSE: o Google Cloud não desativa proativamente as chaves expostas. No entanto, o 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, o Google Cloud cria um evento de registros de auditoria do Cloud e envia uma notificação sobre a chave exposta aos proprietários do projeto e aos contatos de segurança.

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

  • Gera eventos dos Registros de auditoria do Cloud.

    • Quando o Google Cloud detecta que uma chave foi exposta, um evento de abuso é criado nos Registros de eventos de abuso.

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

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

É altamente recomendável definir essa restrição como DISABLE_KEY. Definir essa restrição como WAIT_FOR_ABUSE aumenta o risco de uso indevido das chaves expostas.

Se você decidir definir a restrição como WAIT_FOR_ABUSE, recomendamos que 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 em tempo hábil.

A restrição iam.serviceAccountKeyExposureResponse não pode ser mesclada com uma política mãe. Para aplicar essa restrição, substitua a política mãe.

Como definir uma restrição de lista

Console

Para definir uma política da organização que contenha uma restrição de lista:

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

    Acessar as 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 vai aparecer.

  4. Para atualizar a política da organização para este 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 mais informações sobre herança e a hierarquia de recursos, consulte Noções básicas sobre avaliação da 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 da lista.

    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 da lista. Por exemplo, constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • VALUE_1, VALUE_N...: valores da restrição de lista.

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

Exemplo de política com restrição de lista

O snippet de código a seguir mostra uma política da organização que impõe a restrição de lista 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

Mensagens de erro

Desativar criação de conta de serviço

Se o código 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 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 os serviços do Google Cloud 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.