Contas de serviço

Os aplicativos em execução nas instâncias podem autorizar APIs do Google Cloud Platform e interagir com elas por meio de uma conta de serviço. Com as contas de serviço que têm os papéis necessários do gerenciamento de identidade e acesso (IAM, na sigla em inglês), é possível usar o código do aplicativo para executar solicitações específicas da API.

Para saber como criar e usar contas de serviço, leia a documentação Como criar e ativar contas de serviço em instâncias.

Uma conta de serviço é uma conta especial usada por serviços e aplicativos em execução na instância do Compute Engine para interagir com outras APIs do Google Cloud Platform. Os aplicativos usam as credenciais de conta de serviço para conseguir autorização em um conjunto de APIs e executar ações dentro das permissões concedidas à instância da conta de serviço e da máquina virtual. Além disso, é possível criar regras de firewall que permitem ou negam o tráfego de e para instâncias com base na conta de serviço associada a cada instância.

O que são contas 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 executados em instâncias de máquina virtual para outros serviços do Google Cloud Platform. Por exemplo, se você escrever um aplicativo que leia e grave arquivos no Google Cloud Storage, ele precisará primeiro se autenticar na API Google Cloud Storage. Crie uma conta de serviço e conceda acesso à conta de serviço à API Cloud Storage. Em seguida, você atualiza o código do aplicativo para passar as credenciais da conta de serviço para a API Cloud Storage. O aplicativo se autentica sem problemas na API sem incorporar nenhuma chave secreta nem credencial de usuário na instância, na imagem ou no código do aplicativo.

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 Google Identity and Access Management. Depois de criar uma conta, conceda os papéis do IAM da conta e configure instâncias para serem executadas como a conta de serviço. Aplicativos em execução 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 conta de serviço, consulte Criar e ativar contas de serviço para instâncias.

Conta de serviço padrão do Compute Engine

Os projetos recém-criados vêm com a conta de serviço padrão do Compute Engine, que pode ser identificada usando este e-mail:

[PROJECT_NUMBER]-compute@developer.gserviceaccount.com

A conta de serviço padrão é criada pelo Google e adicionada automaticamente à sua conta, mas você tem total controle sobre ela.

Quando você cria uma instância usando a ferramenta de linha de comando gcloud ou o Console do Google Cloud Platform, ela é automaticamente ativada para ser executada como a conta de serviço padrão com os seguintes escopos de acesso:

  • acesso somente de leitura ao Google Cloud Storage:
    https://www.googleapis.com/auth/devstorage.read_only
  • acesso de gravação 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 ao Google Cloud Endpoints(Alfa):
    https://www.googleapis.com/auth/servicecontrol

A conta de serviço padrão pode ser alterada no Console do Google Cloud Platform.

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

É possível 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 acidentalmente a conta de serviço padrão, entre em contato com a equipe do Compute Engine para adicioná-la novamente ao projeto.

Atributos de uma conta de serviço padrão:

  • É criada automaticamente pelo projeto do Console do Google Cloud Platform, com nome e endereço de e-mail.
  • É adicionada automaticamente como tela de edição ao seu projeto.
  • É ativada em todas as instâncias criadas pela ferramenta de linha de comando gcloud e pelo Console do GCP com um conjunto específico de permissões. É 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.

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. Elas representam diferentes serviços do Google e cada uma tem um nível de acesso ao seu projeto do Google Cloud Platform.

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. Ela é de propriedade do Google, não sendo listada na seção Contas de serviço do Console do GCP. Por padrão, a conta recebe automaticamente o papel de editor no projeto e está listada na seção IAM do Console do GCP. 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 usando o seguinte endereço:

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

Essa conta de serviço foi criada especificamente para o Google Compute Engine para executar as tarefas de serviço no projeto. Ela depende da política de IAM do Service Agent 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 própria do cliente em instâncias de VM. O Google é proprietário dessa conta, mas ela é específica do projeto e está listada nas seções "Contas de serviço" e "IAM" do console do GCP. Por padrão, a conta recebe automaticamente o papel compute.serviceAgent no 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, o nível de acesso dessa conta é determinado pela combinação dos escopos de acesso concedidos à instância e dos papéis do IAM concedidos à conta. É preciso configurar ambos, escopos de acesso e papéis do IAM, para ter sucesso na configuração de uma instância como conta de serviço. Basicamente:

  • os escopos de acesso autorizam o acesso potencial que uma instância tem aos métodos da API;
  • o IAM restringe esse acesso aos papéis concedidos à conta de serviço.

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

Há muitas opções de escopo de acesso para escolher, mas também é possível definir apenas o escopo cloud-platform, que autoriza o acesso a todos os serviços do Cloud Platform, e limitar o acesso concedendo 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 concedeu os seguintes papéis do IAM:

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

A conta de serviço só tem as permissões concedidas pelos três papéis do IAM. Mesmo com o escopo de acesso do Cloud Platform, não é possível executar ações não cobertas por esses papéis.

Por outro lado, se você concede um escopo mais restritivo, como o de somente leitura do Cloud Storage (https://www.googleapis.com/auth/devstorage.read_only), e define o papel roles/storage.objectAdmin na conta de serviço, a instância não consegue gerenciar os objetos do Google Cloud Storage, mesmo com o papel roles/storage.ObjectAdmin. Isso porque, com o escopo somente leitura do Cloud Storage, você proíbe a manipulação de dados do Cloud Storage na instância.

Em geral, a documentação de cada método de API também listará os escopos necessários para esse método. Por exemplo, o método instances.insert conta com uma lista de escopos válidos na seção de autorização.

Escopos de acesso

Escopos de acesso são o método legado de especificação das permissões da sua instância. Quando não havia papéis do IAM, os escopos de acesso eram a única forma de conceder permissões a contas de serviço. Hoje eles não são a principal maneira de conceder permissões, mas ainda é preciso definir escopos de acesso ao configurar uma instância como conta de serviço.

Os escopos de acesso são aplicados por instância: você define os escopos de acesso ao criar uma instância e eles persistem apenas durante a vida da instância. Para eles funcionarem, você precisa ter ativado a API correspondente no projeto ao qual a conta de serviço pertence. Por exemplo, mesmo se houver um escopo de acesso para o Google Cloud Storage na instância de máquina virtual, só será possível chamar a Cloud Storage API se ela tiver sido ativada no projeto. O escopo de acesso não tem efeito sem a ativação da API 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 Platform
  • https://www.googleapis.com/auth/compute: acesso total aos métodos do Google Compute Engine
  • https://www.googleapis.com/auth/compute.readonly: acesso somente de leitura aos métodos do Google Compute Engine
  • https://www.googleapis.com/auth/devstorage.read_only: acesso somente de leitura ao Google Cloud Storage
  • https://www.googleapis.com/auth/logging.write: acesso de gravação aos registros do Google Compute Engine

Papéis do IAM

Além de definir escopos de acesso, é preciso conceder os papéis corretos do IAM a uma conta de serviço para determinar o nível de acesso dela. Por exemplo, conceda a uma conta de serviço papéis do IAM para gerenciar objetos ou intervalos do Google Cloud Storage, ou ambos, limitando a conta às permissões concedidas por esses papéis.

Os papéis do IAM são específicos à conta. Isso significa que, quando você concede um papel do IAM a uma conta de serviço, o papel pode ser usado por qualquer instância executada como essa conta. Lembre-se de que:

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

    Se não houver um papel do IAM para o nível de acesso desejado, conceda à instância um dos papéis primários, como tela de edição do projeto.

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

    Não é possível só definir papéis do IAM na conta de serviço e omitir os escopos de acesso ao criar a instância de máquina virtual. Como o nível de acesso de uma conta de serviço é determinado pela combinação dos escopos de acesso e dos papéis do IAM, defina ambos para garantir o funcionamento correto da conta de serviço.

Próximos passos

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

Enviar comentários sobre…

Documentação do Compute Engine