Como restringir o uso da conta de serviço

No Resource Manager, 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.

Quando você define essas restrições, elas se aplicam a futuras criações e modificações de contas de serviço. Essas restrições não são retroativas e afetam as 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.

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

Você pode usar a restrição booleana iam.disableServiceAccountKeyCreation para desativar a criação de novas chaves de contas de serviço externo. 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

É 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 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 definir uma restrição booleana

Console

Para definir uma política da organização que inclui uma restrição para o uso da conta de serviço:

  1. Acesse a página Políticas da organização no Console do Google Cloud.

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

  2. Clique na lista suspensa Organização na parte superior da página e selecione a organização.
  3. Clique em uma das restrições booleanas de uso da conta de serviço listadas acima.
  4. Clique no botão Editar.
  5. Em É aplicável a, selecione Personalizar.
  6. Em Aplicação, selecione Ativada.
  7. Clique em Salvar. Será exibida uma notificação confirmando que a política foi atualizada.

gcloud

As políticas podem ser definidas usando a ferramenta de linha de comando gcloud.

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 política, emita o mesmo comando usando

disable-enforce
command.

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:

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.disableServiceAccountCreation"
  etag: "\a\005L\252\122\321\946\334"
  boolean_policy {
  enforced: true
  }
}

Restrições de lista

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

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.

Como definir uma restrição de lista

Console

Para definir uma política da organização que estenda o ciclo de vida máximo dos tokens de acesso do OAuth 2.0 para uma conta de serviço:

  1. Acesse a página Políticas da organização no Console do Google Cloud.

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

  2. Clique na lista suspensa Organização na parte superior da página e selecione a organização.
  3. Clique na restrição constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  4. Clique no botão Editar.
  5. Em É aplicável a, selecione Personalizar.
  6. Em Política de aplicação, selecione Mesclar com o pai para mesclar essa política com as políticas atuais na hierarquia.
  7. Em Valores da política, selecione Personalizado.
  8. Em Tipo de política, selecione Permitir.
  9. Em Valores personalizados, digite o endereço de e-mail de uma conta de serviço para a qual você quer estender a vida útil dos tokens de acesso do OAuth 2.0.
    1. Se quiser adicionar mais endereços, clique em Novo valor da política para criar mais linhas e adicione um endereço a cada linha.
  10. Clique em Save. Uma notificação confirma que a política foi atualizada.

gcloud

As políticas podem ser definidas usando a ferramenta de linha de comando gcloud.

Para definir uma política da organização que estenda o ciclo de vida máximo dos tokens de acesso do OAuth 2.0 para uma conta de serviço, execute o seguinte comando:

gcloud resource-manager org-policies allow \
    constraints/iam.allowServiceAccountCredentialLifetimeExtension \
    SERVICE_ACCOUNT_ADDRESS [SERVICE_ACCOUNT_ADDRESS ...] \
    --organization 'ORGANIZATION_ID' \

Em que SERVICE_ACCOUNT_ADDRESS é a lista de endereços de e-mail da conta de serviço que você quer fornecer tokens de acesso estendidos.

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:

resource: "organizations/842463781240"
policy {
  constraint: "constraints/iam.allowServiceAccountCredentialLifetimeExtension"
  etag: "\a\005L\252\122\321\946\334"
  listPolicy {
    allowedValues:
      - <var>SERVICE_ACCOUNT_ADDRESS</var>
  }
  updateTime: <var>CURRENT_TIME</var>
}

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.