Restringir a utilização de contas de serviço

O Resource Manager fornece restrições que podem ser usadas em políticas da organização para limitar a utilização de contas de serviço da gestão de identidade e de acesso (IAM).

Muitas destas restrições determinam se as contas de serviço e outros recursos podem ser criados ou configurados de formas específicas. Estas restrições não são retroativas. Não afetam as contas de serviço criadas e configuradas anteriormente.

Antes de começar

Tem de ter autorização para modificar as políticas da organização para definir restrições. Por exemplo, a função orgpolicy.policyAdmin tem autorização para definir restrições de políticas da organização. Leia a página Usar restrições para saber mais sobre a gestão de políticas ao nível da organização.

Restrições geridas

As seguintes restrições são tipos de managed constraint, que estão definidas como true ou false. As restrições geridas são criadas na plataforma de políticas da organização personalizadas.

Para saber como criar políticas de organização que aplicam restrições geridas, consulte o artigo Usar restrições geridas numa política de organização.

Impedir que a função de proprietário e editor seja concedida a contas de serviço predefinidas

Alguns Google Cloud serviços criam automaticamente contas de serviço predefinidas. Quando é criada uma conta de serviço predefinida, é-lhe automaticamente concedida a função de Editor (roles/editor) no seu projeto. Alguém também pode optar por conceder uma função com muitos privilégios, como a função de editor ou proprietário (roles/owner), a uma conta de serviço predefinida mais tarde.

As funções de editor e proprietário são funções básicas com muitos privilégios. Não deve concedê-las a nenhum principal em produção, incluindo contas de serviço predefinidas.

Para impedir que as contas de serviço predefinidas recebam as funções de Editor ou Proprietário, use a restrição iam.managed.preventPrivilegedBasicRolesForDefaultServiceAccounts gerenciada. Esta restrição impede que as contas de serviço predefinidas recebam as funções de editor ou proprietário, quer seja de forma automática ou manual.

Desative a criação de contas de serviço

Pode usar a restrição gerida iam.managed.disableServiceAccountCreation para desativar a criação de novas contas de serviço. Isto permite-lhe centralizar a gestão de contas de serviço sem restringir as outras autorizações que os seus programadores têm nos projetos.

Se aplicar esta restrição num projeto, alguns Google Cloud serviços não podem criar automaticamente contas de serviço predefinidas. Como resultado, se o projeto executar cargas de trabalho que precisam de roubar a identidade de uma conta de serviço, o projeto pode não conter uma conta de serviço que a carga de trabalho possa usar. Para resolver este problema, pode ativar a representação de contas de serviço em vários projetos. Quando ativa esta funcionalidade, pode criar contas de serviço num projeto centralizado e, em seguida, anexar as contas de serviço a recursos noutros projetos.

Para mais informações sobre a organização de contas de serviço, consulte o artigo Onde criar contas de serviço.

Desative a criação de chaves da API associadas a contas de serviço

Pode usar a restrição iam.managed.disableServiceAccountApiKeyCreationmanaged para desativar a criação de chaves da API associadas a contas de serviço. Quando esta restrição está definida, os utilizadores não podem criar chaves de API associadas a contas de serviço em projetos afetados pela restrição.

Esta restrição é aplicada por predefinição.

Desative a criação de chaves de contas de serviço

Pode usar a restrição gerida iam.managed.disableServiceAccountKeyCreation para desativar a criação de novas chaves de contas de serviço externas e chaves HMAC do Cloud Storage. Isto permite-lhe controlar a utilização de credenciais de longo prazo não geridas para contas de serviço. Quando esta restrição está definida, não é possível criar credenciais geridas pelo utilizador para contas de serviço em projetos afetados pela restrição.

Desative o carregamento de chaves de contas de serviço

Pode usar a restrição gerida iam.managed.disableServiceAccountKeyUpload para desativar o carregamento de chaves públicas externas para contas de serviço. Quando esta restrição está definida, os utilizadores não podem carregar chaves públicas para contas de serviço em projetos afetados pela restrição.

Restrições geridas (antigas) com regras booleanas

As seguintes restrições são tipos de restrições geridas antigas com regras booleanas, que estão definidas como verdadeiras ou falsas.

Desative as concessões automáticas de funções a contas de serviço predefinidas

Alguns Google Cloud serviços criam automaticamente contas de serviço predefinidas. Quando é criada uma conta de serviço predefinida, é-lhe automaticamente concedida a função de Editor (roles/editor) no seu projeto.

Para melhorar a segurança, recomendamos vivamente que desative a concessão automática de funções. Use a restrição iam.automaticIamGrantsForDefaultServiceAccountsgerida antiga para desativar a concessão automática de funções.

Desative a criação de contas de serviço

Pode usar a restrição gerida antiga iam.disableServiceAccountCreationpara desativar a criação de novas contas de serviço. Isto permite-lhe centralizar a gestão de contas de serviço sem restringir as outras autorizações que os seus programadores têm nos projetos.

Se aplicar esta restrição num projeto, alguns Google Cloud serviços não podem criar automaticamente contas de serviço predefinidas. Como resultado, se o projeto executar cargas de trabalho que precisam de roubar a identidade de uma conta de serviço, o projeto pode não conter uma conta de serviço que a carga de trabalho possa usar. Para resolver este problema, pode ativar a representação de contas de serviço em vários projetos. Quando ativa esta funcionalidade, pode criar contas de serviço num projeto centralizado e, em seguida, anexar as contas de serviço a recursos noutros projetos.

Para mais informações sobre a organização de contas de serviço, consulte o artigo Onde criar contas de serviço.

Desative a criação de chaves de contas de serviço

Pode usar a restrição gerida iam.disableServiceAccountKeyCreationantiga para desativar a criação de novas chaves de contas de serviço externas e chaves HMAC do Cloud Storage. Isto permite-lhe controlar a utilização de credenciais de longo prazo não geridas para contas de serviço. Quando esta restrição está definida, não é possível criar credenciais geridas pelo utilizador para contas de serviço em projetos afetados pela restrição.

Desative o carregamento de chaves de contas de serviço

Pode usar a restrição gerida antiga iam.disableServiceAccountKeyUpload para desativar o carregamento de chaves públicas externas para contas de serviço. Quando esta restrição está definida, os utilizadores não podem carregar chaves públicas para contas de serviço em projetos afetados pela restrição.

Desative a anexação de contas de serviço a recursos noutros projetos

Cada conta de serviço está localizada num projeto. Pode usar a restrição gerida antiga para impedir que as contas de serviço num projeto sejam anexadas a recursos noutros projetos.iam.disableCrossProjectServiceAccountUsage

Se quiser permitir a utilização de contas de serviço em vários projetos, consulte o artigo Ativar a representação de contas de serviço em vários projetos.

Restrinja a remoção de ónus de projetos quando as contas de serviço são usadas em vários projetos

Quando permite que as contas de serviço de um projeto sejam anexadas a recursos noutros projetos, o IAM adiciona um vínculo do projeto que impede a eliminação do projeto. Por predefinição, qualquer pessoa com a autorização resourcemanager.projects.updateLiens no projeto pode eliminar a restrição.

Se aplicar a restrição gerida iam.restrictCrossProjectServiceAccountLienRemovalantiga, os responsáveis podem eliminar o ónus apenas se tiverem a autorização resourcemanager.projects.updateLiens na organização.

Recomendamos que aplique esta restrição se algum dos seus projetos permitir a representação de contas de serviço em vários projetos.

Desative a criação de clusters do Workload Identity

Pode usar a restrição gerida iam.disableWorkloadIdentityClusterCreationantiga para exigir que todos os novos clusters do Google Kubernetes Engine tenham a funcionalidade Workload Identity desativada no momento da respetiva criação. Se quiser controlar rigorosamente o acesso da conta de serviço na sua organização, pode desativar a Identidade de carga de trabalho, além da criação de contas de serviço e chaves de contas de serviço.

Os clusters do GKE existentes com a Workload Identity Federation para o GKE ativada não são afetados e continuam a funcionar normalmente.

Definir uma restrição gerida (antiga) com regras booleanas

Consola

Para definir uma política da organização que aplique uma restrição para restringir a utilização de contas de serviço:

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

    Aceda às políticas da organização

  2. No selecionador de projetos, selecione a organização para a qual quer restringir a utilização de contas de serviço.

  3. Clique numa das restrições de utilização da conta de serviço apresentadas nesta página.

  4. Clique em Gerir política.

  5. Em Aplica-se a, selecione Substituir política do elemento principal.

  6. Clique em Adicionar regra.

  7. Em Aplicação, selecione Ativar.

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

gcloud

As políticas podem ser definidas através da CLI do Google Cloud.

Para restringir a utilização da conta de serviço, execute o seguinte comando:

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

Onde CONSTRAINT_NAME é a restrição que quer aplicar.

Para desativar a aplicação, pode emitir o mesmo comando com o parâmetro

Comando
disable-enforce
.

Para saber como usar restrições em políticas da organização, consulte o artigo Usar restrições.

Exemplo de restrição gerida (antiga) com regras booleanas

O seguinte fragmento do código mostra uma política da organização que aplica a restrição gerida antiga iam.disableServiceAccountCreation, o que impede a criação de contas de serviço:

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

Restrições geridas (antigas) com regras de listas

As seguintes restrições são tipos de restrições geridas antigas com regras de listas, que estão definidas para uma lista de valores.

Prolongue a duração das chaves de acesso de OAuth 2.0

Pode criar uma chave de acesso OAuth 2.0 que forneça credenciais de curta duração para uma conta de serviço. Por predefinição, a duração máxima de uma chave de acesso é de 1 hora (3600 segundos). No entanto, pode prolongar a duração máxima para 12 horas. Para tal, identifique as contas de serviço que precisam de uma duração total prolongada para as chaves de acesso e, em seguida, adicione estas contas de serviço a uma política da organização que inclua a restrição constraints/iam.allowServiceAccountCredentialLifetimeExtensiongerida legada.

Limite a duração das chaves de contas de serviço

Uma chave de conta de serviço permite-lhe autenticar um pedido como uma conta de serviço. Por predefinição, as chaves de conta de serviço nunca expiram. Pode alterar esta predefinição definindo um prazo de validade para todas as chaves criadas recentemente no seu projeto, pasta ou organização.

Para definir uma hora de validade, use a restrição gerida constraints/iam.serviceAccountKeyExpiryHours legada para especificar o número de horas durante as quais uma chave criada recentemente é válida. Após este período, a chave da conta de serviço expira e deixa de a poder usar.

Esta restrição gerida antiga aceita os seguintes valores ALLOW; não aceita valores DENY. Como prática recomendada, use o tempo de expiração mais curto que satisfaça as 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: 1440 horas (60 dias)
  • 2160h: 2160 horas (90 dias)

Não é possível unir a restrição constraints/iam.serviceAccountKeyExpiryHours a uma política principal. Para aplicar esta restrição, tem de substituir ou herdar a política principal.

Especifique fornecedores de identidade externos permitidos

Se usar a federação de identidade da carga de trabalho, que permite que identidades externas acedam a recursos, pode especificar que fornecedores de identidade externos são permitidos. Google Cloud Por predefinição, todos os fornecedores são permitidos. Para definir um limite, use a restrição gerida antiga para especificar URIs para os fornecedores permitidos, usando os seguintes formatos:constraints/iam.workloadIdentityPoolProviders

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

    Para limitar as contas da AWS permitidas, use a constraints/iam.workloadIdentityPoolAwsAccounts restrição gerida antiga conforme descrito nesta página.

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

  • Outros fornecedores de identidade que suportam o OpenID Connect (OIDC): use o URI do emissor do seu fornecedor de identidade.

Especifique contas da AWS permitidas

Se usar a federação de identidades de cargas de trabalho, que permite que identidades externas acedam a Google Cloud recursos, pode especificar que contas da AWS têm permissão para aceder aos seus recursos. Por predefinição, as cargas de trabalho de qualquer conta da AWS podem aceder aos seus recursos do Google Cloud . Para limitar as contas da AWS permitidas, use a restrição gerida antiga para especificar uma lista de IDs de contas permitidos.constraints/iam.workloadIdentityPoolAwsAccounts

Desative automaticamente as chaves de contas de serviço expostas

Google Cloud deteta ocasionalmente que uma determinada chave de conta de serviço foi exposta. Por exemplo, pode detetar uma chave num repositório público. Para especificar o que o Google Cloud faz com estas chaves, use a restrição gerida antigaiam.serviceAccountKeyExposureResponse. As chaves que são monitorizadas incluem chaves de conta de serviço de longa duração e chaves da API associadas a uma conta de serviço.

Esta restrição gerida antiga aceita os seguintes valores ALLOW; não aceita valores DENY.

  • DISABLE_KEY: se o Google Cloud detetar uma chave exposta, desativa-a automaticamente. Também cria um evento dos registos de auditoria do Cloud e envia uma notificação sobre a chave exposta aos proprietários do projeto e aos contactos de segurança.

    Google Cloud
  • WAIT_FOR_ABUSE: Google Cloud não desativa proativamente as chaves expostas. No entanto, Google Cloud pode desativar chaves expostas se forem usadas de formas que afetem negativamente a plataforma. Independentemente de a chave exposta estar desativada, Google Cloud cria um evento de registos de auditoria do Google Cloud e envia uma notificação sobre a chave exposta aos proprietários do projeto e aos contactos de segurança.

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

  • Gera eventos dos registos de auditoria do Google Cloud.

    • Quando Google Cloud deteta que uma chave foi exposta, é criado um evento de abuso nos registos de eventos de abuso.

    • Quando Google Cloud desativa uma chave, os registos 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 estado expandido inclui a localização onde foi detetada a fuga.

Recomendamos vivamente que defina esta restrição como DISABLE_KEY. Definir esta restrição como WAIT_FOR_ABUSE aumenta o risco de utilização indevida das chaves expostas.

Se decidir definir a restrição como WAIT_FOR_ABUSE, recomendamos que subscreva eventos dos registos de auditoria da nuvem, reveja as suas informações de contacto de segurança em Contactos essenciais e certifique-se de que os seus contactos de segurança respondem às notificações em tempo útil.

A restrição iam.serviceAccountKeyExposureResponse não pode ser unida com uma política principal. Para aplicar esta restrição, tem de substituir a política principal.

Definir uma restrição gerida (antiga) com regras de listas

Consola

Para definir uma política da organização que contenha uma restrição gerida antiga:

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

    Aceda às políticas da organização

  2. No seletor de projetos, selecione o recurso para o qual quer definir a política de organização.

  3. Na página Políticas da organização, selecione uma restrição na lista. É apresentada a página Detalhes da política para essa restrição.

  4. Para atualizar a política da organização para este recurso, clique em Gerir política.

  5. Em Aplicação de políticas, selecione uma opção de aplicação:

    • Para unir e avaliar as políticas da sua organização em conjunto, selecione Unir com principal. Para mais informações sobre a herança e a hierarquia de recursos, consulte o artigo Compreender a avaliação da hierarquia.
    • Para substituir as políticas herdadas de um recurso principal, selecione Substituir.
  6. Clique em Adicionar regra.

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

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

  9. Em Valores personalizados, introduza o primeiro valor para a restrição gerida antiga.

    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 através da 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 gerida antiga. Por exemplo, constraints/iam.allowServiceAccountCredentialLifetimeExtension.
  • VALUE_1, VALUE_N...: Valores para a restrição gerida antiga.

Para saber como usar restrições em políticas da organização, consulte o artigo Usar restrições.

Exemplo de restrição gerida (antiga) com regras de listas

O seguinte fragmento do código mostra uma política de organização que aplica a iam.allowServiceAccountCredentialLifetimeExtension restrição gerida antiga, que prolonga a duração máxima dos tokens de acesso OAuth 2.0 para as contas de serviço indicadas:

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

Aplicar restrições condicionalmente através de etiquetas

As etiquetas podem ser usadas para incluir ou excluir recursos etiquetados da aplicação da política da organização. Depois de criar uma etiqueta e anexá-la a uma conta de serviço, pode adicionar uma condição à política para incluir ou excluir condicionalmente contas de serviço etiquetadas da aplicação.

Para mais detalhes sobre a utilização de etiquetas com políticas de organização, consulte o artigo Definir uma política de organização com etiquetas.

Mensagens de erro

Desative a criação de contas de serviço

Se a política iam.disableServiceAccountCreation for aplicada, a criação de uma conta de serviço falha com o seguinte erro:

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

Desative a criação de chaves da API associadas a contas de serviço

Se iam.managed.disableServiceAccountApiKeyCreation for aplicada, a criação de uma chave da API associada a uma conta de serviço falha com o seguinte erro:

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

Desative a criação de chaves de contas de serviço

Se a política iam.disableServiceAccountKeyCreation for aplicada, a criação de uma conta de serviço falha com o seguinte erro:

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

Desative a criação de clusters do Workload Identity

Se iam.disableWorkloadIdentityClusterCreation for aplicada, a criação de um cluster do GKE com o Workload Identity ativado falha com o erro:

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

Resolução de problemas conhecidos

Contas de serviço predefinidas

A aplicação da restrição iam.disableServiceAccountCreation impede a criação de contas de serviço nesse projeto. Esta limitação também afeta osGoogle Cloud serviços que, quando ativados, criam automaticamente contas de serviço predefinidas no projeto, como:

  • Compute Engine
  • GKE
  • App Engine
  • Dataflow

Se a restrição iam.disableServiceAccountCreation for aplicada, a tentativa de ativar estes serviços falha porque não é possível criar as respetivas contas de serviço predefinidas.

Para resolver este problema:

  1. Remova temporariamente a restrição iam.disableServiceAccountCreation.
  2. Ative os serviços pretendidos.
  3. Crie quaisquer outras contas de serviço desejadas.
  4. Por fim, volte a aplicar a restrição.