Contas de serviço

Nesta página, descrevemos as contas de serviço e as permissões delas, que podem ser limitadas pelos escopos de acesso que se aplicam às instâncias de VM e pelos papéis do gerenciamento de identidade e acesso (IAM, na sigla em inglês) aplicáveis às contas de serviço. Para saber como criar e usar contas de serviço, leia a documentação Como criar e ativar contas de serviço para instâncias.

Uma conta de serviço é uma conta especial que pode ser usada por serviços e aplicativos em execução na sua instância do Compute Engine para interagir com outras APIs do Google Cloud. Os apps podem usar as credenciais de conta de serviço para se autorizar em um conjunto de APIs e realizar ações de acordo com as permissões concedidas à conta de serviço e à instância de máquina virtual. 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.

O que é uma conta de serviço?

Conta de serviço é uma identidade que uma instância ou um aplicativo pode usar para executar solicitações de API em seu nome.

Essa identidade é usada para identificar aplicativos sendo executados nas instâncias de máquina virtual para outros serviços do Google Cloud. Por exemplo, se você criar um app que lê e grava arquivos no Cloud Storage, primeiro ele precisa ser autenticado na API Cloud Storage. Crie uma conta de serviço e conceda a ela acesso à API Cloud Storage. Em seguida, atualize seu app para passar as credenciais da conta de serviço à API Cloud Storage. Seu app faz a autenticação perfeitamente na API sem incorporar chaves secretas ou credenciais de usuário à instância, à imagem ou ao código do app.

Se suas contas de serviço tiverem as permissões necessárias do IAM, elas poderão criar e gerenciar instâncias e outros recursos. As contas de serviço poderão modificar ou excluir recursos somente se você conceder as permissões necessárias do IAM para elas no nível do projeto ou do recurso. Também é possível alterar qual conta de serviço está associada a uma instância.

Uma instância pode ter apenas uma conta de serviço, e a conta de serviço precisa ter sido criada no mesmo projeto da instância.

Dois tipos de contas de serviço estão disponíveis para instâncias do Compute Engine:

  • contas de serviço gerenciadas por usuários
  • contas de serviço gerenciadas pelo Google

Contas de serviço gerenciadas por usuários

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

Crie e gerencie suas próprias contas de serviço usando o Cloud Identity and Access Management. 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 ativadas com a conta de serviço 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 Como criar e ativar contas de serviço para instâncias.

Conta de serviço padrão do Compute Engine

Novos projetos vêm com a conta de serviço padrão do Compute Engine, identificável por meio deste e-mail:

[PROJECT_NUMBER]-compute@developer.gserviceaccount.com

O Google cria a conta de serviço padrão do Compute Engine e a adiciona ao seu projeto automaticamente, mas você tem controle total sobre ela.

A conta de serviço padrão do Compute Engine é criada com o papel editor de projeto do Cloud IAM, mas é possível modificar os papéis dela para limitar com segurança as APIs do Google que ela pode acessar.

É possível excluir essa conta de serviço do seu projeto, mas isso pode causar falha nos aplicativos que dependem das credenciais dela. 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 Como criar e gerenciar contas de serviço.

Em resumo, a conta de serviço padrão do Compute Engine tem os atributos a seguir:

  • Criada automaticamente pelo projeto do Console do Google Cloud e tem um nome e um endereço de e-mail gerados automaticamente.
  • É adicionada automaticamente ao seu projeto com o papel editor de projeto do Cloud IAM.
  • Ativado por padrão em todas as instâncias criadas pela ferramenta de linha de comando gcloud e pelo Console do Cloud. É possível modificar isso especificando outra conta de serviço durante a criação da instância ou desativando a configuração de contas de serviço para a instância.

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

Quando você cria uma instância usando a ferramenta de linha de comando gcloud ou o Console do Google Cloud, você pode especificar qual conta de serviço a instância usa ao chamar as APIs do Google Cloud. A instância é 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

Os escopos de acesso definem os escopos padrão do OAuth para solicitações feitas por meio das bibliotecas de cliente e do gcloud. Consequentemente, eles podem limitar o acesso aos métodos de API ao autenticar por meio do OAuth. No entanto, eles não se estendem a outros protocolos de autenticação, como o gRPC. Portanto, uma prática recomendada é definir o escopo de acesso cloud-platform completo na instância e, em seguida, limitar com segurança o acesso da sua conta de serviço concedendo a ela papéis do IAM. Consulte Permissões da conta de serviço para detalhes.

Quando você cria uma instância fazendo uma solicitação diretamente à API sem usar a ferramenta de linha de comando gcloud ou o Console do Google Cloud, a conta de serviço padrão não é ativada com ela. Ative a conta padrão especificando-a como parte do payload da solicitação.

Contas de serviço gerenciadas pelo Google

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

Conta de serviço das 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 conta 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 Cloud. Por padrão, a conta recebe automaticamente o papel de editor de projeto no projeto e é listada na seção IAM do Console do 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.

Portanto, não modifique os papéis dessa conta de serviço.

Conta de serviço do sistema do Compute Engine

Todos os projetos que ativaram a API Compute Engine têm uma conta de serviço do sistema do Compute Engine, que é identificável por meio do seguinte endereço:

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 é específico para seu projeto e está listado nas seções Contas de serviço e IAM do Console do Cloud. 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, você não precisa modificar os papéis para essa conta de serviço.

Permissões da conta de serviço

Quando você configura uma instância para ser executada como uma conta de serviço, determina o nível de acesso que a conta de serviço tem pelos papéis do IAM concedidas à conta de serviço. Se a conta de serviço não tiver papéis do IAM, nenhum método de API poderá ser executado por ela 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 ferramenta 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, limitar com segurança 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 ao autenticar por meio do OAuth.

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

Há muitos escopos de acesso que você pode escolher, mas você também pode definir o escopo de acesso cloud-platform, que é um escopo OAuth para todos os serviços do Google Cloud, e depois limitar com segurança o acesso da conta de serviço por meio da atribuição de papéis do IAM.

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

Por exemplo, 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 do IAM. Essa conta não pode realizar ações fora dessas funções, 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 ferramenta 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.

Geralmente, a documentação de cada método de API relaciona 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.

Papéis do 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 intervalos do Cloud Storage, ou ambos, o que limita a conta às permissões concedidas por esses papéis.

Os papéis do IAM são específicos à conta. Isso significa que, depois que você conceder um papel do IAM a uma conta de serviço, qualquer instância executada como essa conta poderá usar o papel. Lembre-se de que:

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

    Se não houver um papel predefinido do IAM para o nível de acesso pretendido, conceda um dos papéis primários, como editor do projeto, ou 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 do IAM concedidos a ela, os escopos de acesso de uma instância determinam os escopos padrão do OAuth para as solicitações feitas por meio da ferramenta 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. Os escopos de acesso não são um mecanismo de segurança. Em vez disso, eles definem os escopos padrão do OAuth usados nas solicitações da ferramenta gcloud ou das bibliotecas de cliente. Observe que eles não têm efeito ao fazer solicitações não autenticadas por meio do OAuth, como gRPC ou APIs do SignBlob.

É preciso definir os escopos de acesso ao configurar uma instância para execução como uma conta de serviço.

Uma prática recomendada é definir o escopo de acessocloud-platform completo na instância e, em seguida, limitar com segurança o acesso à API da conta de serviço com papéis do Cloud IAM.

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.

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.

Os exemplos de escopo de acesso incluem:

  • https://www.googleapis.com/auth/cloud-platform. Acesso total a todos os recursos 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

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine