Contas de serviço


Nesta página, você vai ver como as contas de serviço funcionam com o Compute Engine.

Para informações passo a passo sobre como anexar uma conta de serviço a uma instância de máquina virtual (VM), consulte um dos documentos a seguir:

Para saber mais sobre as práticas recomendadas para criar e gerenciar contas de serviço, leia a documentação Práticas recomendadas para trabalhar com contas de serviço.

Faça um teste

Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho do Compute Engine em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.

Faça uma avaliação gratuita do Compute Engine

O que é uma conta de serviço?

Uma conta de serviço é um tipo especial de conta usada por um aplicativo ou carga de trabalho de computação, em vez de uma pessoa. As contas de serviço são gerenciadas pelo Gerenciamento de identidade e acesso (IAM).

Lembre-se do seguinte ao usar contas de serviço com suas VMs:

  • É possível anexar a mesma conta de serviço a várias VMs, mas uma única VM só pode ter uma conta de serviço vinculada a ela.
  • Se você anexar a mesma conta de serviço a várias VMs, qualquer alteração posterior feita na conta de serviço afetará todas as VMs que usam a conta de serviço. Isso inclui quaisquer alterações feitas nas funções do IAM concedidas à conta de serviço. Por exemplo, se você remover um papel, todas as VMs que usam a conta de serviço perderão as permissões concedidas por esse papel.

Como o Compute Engine usa contas de serviço

O Compute Engine usa dois tipos de contas de serviço:

Uma conta de serviço gerenciada pelo usuário pode ser anexada a uma instância do Compute Engine para fornecer credenciais a aplicativos em execução na instância. Essas credenciais são usadas pelo aplicativo para autenticação nas APIs do Google Cloud e por autorização para acessar os recursos do Google Cloud. Somente contas de serviço gerenciadas pelo usuário podem ser anexadas a uma instância, e uma instância pode ter apenas uma conta de serviço anexada. É possível alterar a conta de serviço anexada a uma instância no momento da criação ou posteriormente.

As contas de serviço gerenciadas pelo Google são usadas pela instância para acessar processos internos em seu nome.

Além disso, é possível criar regras de firewall que permitam ou neguem o tráfego de e para instâncias com base na conta de serviço associada a cada instância.

Como a autorização é determinada

A autorização fornecida aos aplicativos hospedados em uma instância do Compute Engine é limitada por duas configurações diferentes: os papéis concedidos à conta de serviço anexada e os escopos de acesso que você definiu na instância. Essas duas configurações precisam permitir o acesso antes que o aplicativo em execução na instância possa acessar um recurso.

Suponha que você tenha um aplicativo que leia e grave arquivos no Cloud Storage, primeiro ele precisa ser autenticado na API Cloud Storage. É possível criar uma instância com o escopo cloud-platform e anexar uma conta de serviço à instância. Em seguida, é possível conceder papéis do Identity and Access Management (IAM) à conta de serviço para dar ao app acesso aos recursos apropriados. O aplicativo usa as credenciais da conta de serviço para se autenticar na API Cloud Storage sem incorporar chaves secretas ou credenciais de usuário à instância, à imagem ou ao código do aplicativo. O aplicativo também usa a autorização fornecida pelos papéis do IAM na conta de serviço para acessar os recursos. Para mais informações sobre autorização, consulte Autorização nesta página.

Contas de serviço gerenciadas pelo usuário

Entre as contas de serviço gerenciadas pelo usuário, estão as novas contas de serviço que você cria e a conta de serviço padrão do Compute Engine.

Novas contas de serviço

É possível criar e gerenciar suas próprias contas de serviço usando o IAM. Depois de criar uma conta, conceda a ela papéis do IAM e configure instâncias para serem executadas como a conta de serviço. Os apps executados em instâncias com a conta de serviço anexada podem usar as credenciais da conta para fazer solicitações a outras APIs do Google.

Para criar e configurar uma nova conta de serviço, consulte Criar uma VM que usa uma conta de serviço gerenciada pelo usuário.

Conta de serviço padrão do Compute Engine

Os novos projetos que ativaram a API Compute Engine têm uma conta de serviço padrão do Compute Engine com o e-mail a seguir:

PROJECT_NUMBER-compute@developer.gserviceaccount.com

A conta de serviço padrão do Compute Engine tem os seguintes atributos:

  • Criada automaticamente, com um nome e um endereço de e-mail gerados automaticamente, e adicionadas ao seu projeto quando você ativa a API Compute Engine. Você tem controle total sobre a conta.
  • Concedida automaticamente o papel básico de Editor do IAM, caso você não tenha desativado esse comportamento. É possível modificar os papéis da conta de serviço para controlar o acesso dela às APIs do Google.
  • Anexado por padrão a todas as VMs criadas usando a Google Cloud CLI ou o console do Google Cloud. É possível modificar esse comportamento especificando uma conta de serviço diferente ao criar a instância ou especificando explicitamente que nenhuma conta de serviço será anexada à VM.

É possível desativar ou excluir essa conta de serviço do seu projeto, mas isso pode causar falha nos aplicativos que dependem das credenciais dessa conta. Se você excluir por engano a conta de serviço padrão do Compute Engine, tente recuperá-la em até 30 dias. Para mais informações, consulte Excluir e cancelar a exclusão de contas de serviço.

Se a conta de serviço padrão do Compute Engine tiver sido excluída há mais de 30 dias, tente recuperá-la seguindo o processo em Solução de problemas padrão de contas de serviço.

Contas de serviço gerenciadas pelo Google

Essas contas de serviço (também conhecidas como agentes de serviços) são criadas e gerenciadas pelo Google e atribuídas ao projeto automaticamente. Essas contas representam diferentes serviços do Google e cada conta tem algum nível de acesso ao seu projeto do Google Cloud.

Não é possível anexar contas de serviço gerenciadas pelo Google a uma instância do Compute Engine.

Agente de serviço de APIs do Google

Com exceção da conta de serviço padrão, em todos os projetos ativados com o Compute Engine, é possível identificar a agente de serviço das APIs do Google usando este e-mail:

PROJECT_NUMBER@cloudservices.gserviceaccount.com

Essa conta de serviço foi projetada especificamente para executar processos internos do Google em seu nome. A conta é de propriedade do Google e não está listada na seção Contas de serviço do console do Google Cloud. Por padrão, a conta recebe automaticamente o papel de editor de projeto no projeto e está listada na seção IAM do console do Google Cloud. Essa conta de serviço só é removida quando o projeto é excluído. No entanto, é possível alterar os papéis concedidos a ela, até mesmo revogar o acesso ao seu projeto.

Alguns recursos dependem dessa conta de serviço e das permissões padrão de tela de edição concedidas a ela. Por exemplo, as credenciais dessa conta são usadas por grupos gerenciados de instâncias e pelo escalonamento automático para criar, excluir e gerenciar instâncias. Se você revogar as permissões da conta de serviço ou modificar as permissões para proibir a criação de instâncias, isso interromperá o funcionamento dos grupos gerenciados de instâncias e do escalonamento automático.

Por esses motivos, não modifique os papéis dessa conta de serviço, a menos que uma recomendação de papel sugira explicitamente que você os modifique.

Agente de serviço do Compute Engine

Todos os projetos que ativaram a API Compute Engine têm um Agente de serviço do Compute Engine Service com o e-mail a seguir:

service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com

Essa conta de serviço foi criada especificamente para o Compute Engine executar os serviços necessários no seu projeto. Ela depende da política do IAM do agente de serviço concedida no projeto do Google Cloud. Ela também é a conta de serviço que o Compute Engine usa para acessar a conta de serviço pertencente ao cliente nas instâncias de VM. O Google é proprietário dessa conta, mas ela é específica para seu projeto. Essa conta fica oculta na página do IAM no console, a menos que você selecione Incluir concessões de papel fornecidos pelo Google. Por padrão, a conta recebe automaticamente o papel compute.serviceAgent no seu projeto.

Essa conta de serviço só é excluída quando você exclui o projeto. Altere os papéis concedidos a essa conta e revogue todo o acesso ao projeto pela conta. Revogar ou alterar as permissões para essa conta de serviço evita que o Compute Engine associe as identidades das contas de serviço nas VMs e pode causar interrupções no software em execução nas VMs.

Por esses motivos, evite modificar os papéis dessa conta de serviço o máximo possível.

Como associar uma conta de serviço a uma instância

Para evitar fornecer um aplicativo com permissões demais, recomendamos que você crie uma conta de serviço gerenciada pelo usuário, conceda a ela apenas os papéis necessários para que o aplicativo funcione corretamente e anexe-a à instância do Compute Engine. O código pode usar o Application Default Credentials para fazer a autenticação com as credenciais fornecidas pela conta de serviço.

É possível anexar uma conta de serviço a uma instância do Compute Engine ao criar a instância ou posteriormente. É possível anexar apenas uma conta de serviço a uma instância por vez; Se você anexar uma conta de serviço a uma instância que já tenha uma conta de serviço anexada, a conta de serviço anterior não será mais usada pela instância.

Ao anexar uma conta de serviço a uma instância do Compute Engine, verifique se os escopos definidos na instância estão corretos. Caso contrário, talvez o app não consiga acessar todas as APIs necessárias. Para mais informações, consulte Escopos de acesso nesta página.

Para informações passo a passo sobre como anexar uma conta de serviço a uma instância do Compute Engine, consulte um dos documentos a seguir:

Autorização

Quando configura uma instância para ser executada como uma conta de serviço, você determina o nível de acesso que a conta de serviço tem por meio dos papéis do IAM concedidos a ela. Se a conta de serviço não tiver papéis do IAM, nenhum recurso poderá ser acessado usando a conta de serviço nessa instância.

Além disso, os escopos de acesso de uma instância determinam os escopos padrão do OAuth para solicitações feitas por meio da CLI gcloud e das bibliotecas de cliente na instância. Como resultado, os escopos de acesso podem limitar ainda mais o acesso aos métodos de API durante a autenticação por meio do OAuth. No entanto, eles não se estendem a outros protocolos de autenticação, como o gRPC.

A prática recomendada é definir o escopo de acessocloud-platform completo na instância e, em seguida, controlar o acesso da conta de serviço usando papéis do IAM.

Basicamente:

  • o IAM restringe o acesso a APIs com base nos papéis do IAM que são concedidos à conta de serviço;
  • Os escopos de acesso limitam ainda mais o acesso aos métodos da API.

Os escopos de acesso e os papéis do IAM estão descritos em detalhes nas seções abaixo.

Papéis IAM

É preciso conceder os devidos papéis do IAM a uma conta de serviço para permitir que ela acesse os métodos de API relevantes.

Por exemplo, é possível conceder a uma conta de serviço os papéis do IAM para gerenciar objetos ou buckets do Cloud Storage, ou ambos, o que limita a conta às permissões concedidas por esses papéis.

Quando você concede um papel do IAM a uma conta de serviço, qualquer aplicativo em execução em uma instância que tenha essa conta de serviço anexada vai ter a autorização concedida por esse papel.

Lembre-se do seguinte:

  • Alguns papéis do IAM estão na versão Beta.

    Se não houver um papel predefinido para o nível de acesso pretendido, crie e conceda papéis personalizados.

  • É preciso definir os escopos de acesso na instância para autorizar o acesso.

    Embora o nível de acesso de uma conta de serviço seja determinado pelos papéis concedidos à conta de serviço, os escopos de acesso de uma instância determinam os escopos do OAuth padrão das solicitações feitas por meio da CLI gcloud e das bibliotecas de cliente na instância. Como resultado, os escopos de acesso podem limitar ainda mais o acesso aos métodos de API durante a autenticação por meio do OAuth.

Escopos de acesso

Escopos de acesso são o método legado de especificação das permissões da sua instância. Eles definem os escopos padrão do OAuth usados nas solicitações da CLI gcloud ou das bibliotecas de cliente. Os escopos de acesso não se aplicam a chamadas feitas com o gRPC.

Os escopos de acesso são aplicados por instância. Você define escopos de acesso ao criar uma instância e os escopos de acesso persistem apenas durante a vida da instância.

Geralmente, a documentação de cada método de API lista os escopos necessários para esse método. Por exemplo, o método instances.insert apresenta uma lista de escopos válidos na respectiva seção de autorização.

Os escopos de acesso não terão efeito se você não tiver ativado a API relacionada no projeto a que a conta de serviço pertence. Por exemplo, conceder um escopo de acesso ao Cloud Storage em uma instância de máquina virtual permite que a instância chame a API Cloud Storage apenas se você a ativou no projeto.

Escopos padrão

Ao criar uma nova instância do Compute Engine, ela é configurada automaticamente com os seguintes escopos de acesso:

  • Acesso somente leitura ao Cloud Storage:
    https://www.googleapis.com/auth/devstorage.read_only
  • Acesso para gravar registros do Compute Engine:
    https://www.googleapis.com/auth/logging.write
  • Acesso de gravação para publicar dados de métrica nos seus projetos do Google Cloud:
    https://www.googleapis.com/auth/monitoring.write
  • Acesso somente leitura a recursos do Service Management necessários para o Google Cloud Endpoints(Alfa):
    https://www.googleapis.com/auth/service.management.readonly
  • Acesso de leitura/gravação a recursos do Service Control necessários para o Google Cloud Endpoints(Alfa):
    https://www.googleapis.com/auth/servicecontrol
  • O acesso de gravação ao Cloud Trace permite que um aplicativo em execução em uma VM grave dados de trace em um projeto.
    https://www.googleapis.com/auth/trace.append

Práticas recomendadas para escopos

Há muitos escopos de acesso disponíveis para escolha, mas uma prática recomendada é definir o escopo de acesso cloud-platform, que é um escopo do OAuth para a maioria do Google Cloud. serviços e, em seguida, controle o acesso da conta de serviço por meio da atribuição de papéis do IAM.

https://www.googleapis.com/auth/cloud-platform

Exemplos de escopos

Seguindo a prática recomendada de escopos, se você ativou o escopo de acesso cloud-platform em uma instância e depois concedeu os seguintes papéis predefinidos do IAM:

  • roles/compute.instanceAdmin.v1
  • roles/storage.objectViewer
  • roles/compute.networkAdmin

A conta de serviço tem apenas as permissões incluídas nesses três papéis. Os aplicativos que representam essa conta de serviço não podem executar ações fora desses papéis, apesar do escopo de acesso do Google Cloud.

Por outro lado, se você conceder um escopo mais restritivo na instância, como o escopo somente leitura do Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only), e definir o papel administrador roles/storage.objectAdmin na conta de serviço, por padrão, as solicitações da CLI gcloud e as bibliotecas de cliente não poderão gerenciar os objetos do Cloud Storage dessa instância, mesmo que você tenha concedido o papel roles/storage.ObjectAdmin à conta de serviço. Isso porque, com o escopo somente leitura do Cloud Storage, você não autoriza a manipulação de dados do Cloud Storage pela instância.

Os exemplos de escopo de acesso incluem:

  • https://www.googleapis.com/auth/cloud-platform: Ver e gerenciar seus dados nos serviços do Google Cloud no projeto especificado do Google Cloud.
  • https://www.googleapis.com/auth/compute. Acesso de controle total aos métodos do Compute Engine.
  • https://www.googleapis.com/auth/compute.readonly. Acesso somente leitura aos métodos do Compute Engine.
  • https://www.googleapis.com/auth/devstorage.read_only. Acesso somente leitura ao Cloud Storage.
  • https://www.googleapis.com/auth/logging.write. Acesso de gravação aos registros do Compute Engine.

A seguir