Esta página descreve como as contas de serviço funcionam com o Compute Engine.
Para obter informações passo a passo sobre como anexar uma conta de serviço a uma instância de máquina virtual (VM), revise um dos seguintes documentos:
- Para configurar a conta de serviço durante a criação da VM, consulte Criar uma VM que use uma conta de serviço gerenciada pelo usuário .
- Para configurar uma conta de serviço em uma VM existente, consulte Alterar a conta de serviço anexada .
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 .
Experimente você mesmo
Se você é novo no Google Cloud, crie uma conta para avaliar o desempenho do Compute Engine em cenários do mundo real. Novos clientes também recebem US$ 300 em créditos gratuitos para executar, testar e implantar cargas de trabalho.
Experimente o Compute Engine gratuitamenteO 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, e não por uma pessoa. As contas de serviço são gerenciadas pelo Identity and Access Management (IAM) .
Lembre-se do seguinte ao usar contas de serviço com suas VMs:
- Você pode anexar a mesma conta de serviço a várias VMs, mas uma única VM só pode ter uma conta de serviço anexada.
- Se você anexar a mesma conta de serviço a várias VMs, quaisquer alterações subsequentes feitas na conta de serviço afetarão 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 uma função, todas as VMs que usam a conta de serviço perderão as permissões concedidas por essa função.
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 aos aplicativos em execução na instância. Essas credenciais são usadas pelo aplicativo para autenticação para Google CloudAPIs e autorização de acesso Google Cloud recursos. 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. Você pode alterar a conta de serviço anexada a uma instância no momento da criação ou posteriormente.
Os agentes de serviço são usados pela instância para acessar processos internos em seu nome.
Além disso, você pode criar regras de firewall que permitem ou negam 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 a aplicativos hospedados em uma instância do Compute Engine é limitada por duas configurações distintas: os papéis concedidos à conta de serviço anexada e os escopos de acesso definidos na instância. Ambas as configurações devem permitir acesso antes que o aplicativo em execução na instância possa acessar um recurso.
Suponha que você tenha um aplicativo que lê e grava arquivos no Cloud Storage. Ele deve primeiro ser autenticado na API Cloud Storage. Você pode criar uma instância com o escopo cloud-platform
e anexar uma conta de serviço à instância. Em seguida, você pode conceder funções de gerenciamento de identidade e acesso (IAM) à conta de serviço para conceder ao seu aplicativo acesso aos recursos apropriados. Seu 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 na instância, na imagem ou no código do aplicativo. Seu aplicativo também usa a autorização fornecida pelas funções do IAM na conta de serviço para acessar recursos. Para obter mais informações sobre autorização, consulte Autorização nesta página.
Contas de serviço gerenciadas pelo usuário
As contas de serviço gerenciadas pelo usuário incluem novas contas de serviço que você cria explicitamente e a conta de serviço padrão do Compute Engine.
Novas contas de serviço
Você pode criar e gerenciar suas próprias contas de serviço usando o IAM . Depois de criar uma conta, você concede funções do IAM à conta e configura instâncias para execução como conta de serviço. Os aplicativos 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 use uma conta de serviço gerenciada pelo usuário .
Conta de serviço padrão do Compute Engine
Novos projetos que ativaram a API Compute Engine têm uma conta de serviço padrão do Compute Engine, que contém o seguinte e-mail:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
A conta de serviço padrão do Compute Engine tem os seguintes atributos:
- Criado automaticamente, com nome e endereço de e-mail gerados automaticamente, e adicionado ao seu projeto quando você ativa a API Compute Engine. Você tem controle total sobre a conta.
- Anexado por padrão a todas as VMs criadas usando a Google Cloud CLI ou o console do Google Cloud. Você pode substituir esse comportamento especificando uma conta de serviço diferente ao criar a VM ou especificando explicitamente que nenhuma conta de serviço seja anexada à VM.
Dependendo da configuração da política da sua organização, a conta de serviço padrão poderá receber automaticamente a função de Editor no seu projeto. É altamente recomendável desativar a concessão automática de função aplicando a restrição de política da organização
iam.automaticIamGrantsForDefaultServiceAccounts
. Se você criou sua organização após 3 de maio de 2024, essa restrição será aplicada por padrão.Se você desabilitar a concessão automática de funções, deverá decidir quais funções conceder às contas de serviço padrão e, em seguida, conceder essas funções você mesmo.
Se a conta de serviço padrão já tiver a função de Editor, recomendamos que você substitua a função de Editor por funções menos permissivas.Para modificar com segurança as funções da conta de serviço, use o Simulador de políticas para ver o impacto da alteração e, em seguida , conceda e revogue as funções apropriadas .
Você pode desabilitar ou excluir essa conta de serviço do seu projeto, mas isso pode causar falha em qualquer aplicativo que dependa das credenciais da conta de serviço. Se você excluir acidentalmente a conta de serviço padrão do Compute Engine, tente recuperá-la em 30 dias. Para obter mais informações, consulte Excluir e recuperar 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 de contas de serviço padrão .
Agentes de serviço
Os agentes de serviço são criados e gerenciados por Google Cloud e atribuído ao seu projeto automaticamente. Essas contas representam diferentes Google Cloud serviços, e cada conta normalmente tem algum nível de acesso ao seu Google Cloud recursos.
Não é possível anexar agentes de serviço a uma instância do Compute Engine.
Agente de serviço de APIs do Google
Além da conta de serviço padrão, todos os projetos habilitados com Compute Engine vêm com um agente de serviço de APIs do Google , identificável pelo e-mail:
PROJECT_NUMBER@cloudservices.gserviceaccount.com
Este agente de serviço foi projetado especificamente para executar processos internos do Google em seu nome. Este agente de serviço é propriedade do Google e não está listado na seção Contas de serviço do console do Google Cloud. Por padrão, esse agente de serviço recebe automaticamente a função de editor do projeto e é listado na seção IAM do console do Google Cloud. Este agente de serviço é excluído somente quando o projeto é excluído. No entanto, você pode alterar as funções concedidas a esta conta, inclusive revogando todo o acesso ao seu projeto.
Determinados recursos dependem das permissões de editor padrão concedidas a esse agente de serviço. Por exemplo, grupos de instâncias gerenciadas e escalonamento automático usam as credenciais desse agente de serviço para criar, excluir e gerenciar instâncias. Se você revogar permissões para esse agente de serviço ou modificar as permissões de forma que ele não conceda permissões para criar instâncias, isso fará com que os grupos de instâncias gerenciadas e o escalonamento automático parem de funcionar.
Por esses motivos, você não deve modificar as funções desse agente de serviço, a menos que uma recomendação de função sugira explicitamente que você as 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 , que possui o seguinte e-mail:
service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com
Esse agente de serviço foi projetado especificamente para que o Compute Engine execute suas tarefas de serviço no seu projeto. Depende da Política IAM do Agente de Serviço concedida ao seuGoogle Cloud Projeto. É também o agente de serviço que o Compute Engine usa para acessar a conta de serviço gerenciada pelo usuário em instâncias de VM. O Google possui esta conta, mas ela é específica para o seu projeto. Esse agente de serviço fica oculto na página do IAM no console, a menos que você selecione Incluir Google-fornecidos subsídios de função . Por padrão, esse agente de serviço recebe automaticamente a função compute.serviceAgent
em seu projeto.
Este agente de serviço é excluído somente quando você exclui seu projeto. Você pode alterar as funções concedidas a esse agente de serviço e revogar todo o acesso desse agente ao seu projeto. Revogar ou alterar as permissões desse agente de serviço impede que o Compute Engine acesse 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ê deve evitar ao máximo modificar as funções desse agente de serviço.
Anexar uma conta de serviço a uma instância
Para evitar fornecer permissões excessivas a um aplicativo, recomendamos que você crie uma conta de serviço gerenciada pelo usuário, conceda a ela apenas os papéis necessários para o aplicativo funcionar corretamente e anexe-a à instância do Compute Engine. Seu código poderá então usar credenciais padrão do aplicativo para autenticar com as credenciais fornecidas pela conta de serviço.
Você pode anexar uma conta de serviço a uma instância do Compute Engine ao criar a instância ou posteriormente. Apenas uma conta de serviço pode ser anexada 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 por essa instância.
Ao anexar uma conta de serviço a uma instância do Compute Engine, você também precisa garantir que os escopos definidos na instância estejam corretos. Caso contrário, seu aplicativo poderá não conseguir acessar todas as APIs necessárias. Para obter 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, revise um dos seguintes documentos:
Autorização
Ao configurar 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 pelas funções do IAM que você concede à conta de serviço . Se a conta de serviço não tiver funções 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 OAuth padrão para solicitações feitas por meio da CLI gcloud e das bibliotecas de cliente na instância. Como resultado, os escopos de acesso limitam 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 completo de acesso cloud-platform
na instância e, em seguida, controlar o acesso da conta de serviço usando funções do IAM.
Essencialmente:
- O IAM restringe o acesso às APIs com base nas funções do IAM concedidas à conta de serviço.
- Os escopos de acesso potencialmente limitam ainda mais o acesso aos métodos de API.
Os escopos de acesso e as funções do IAM são descritos detalhadamente nas seções a seguir.
Funções do IAM
Você deve conceder os papéis apropriados do IAM a uma conta de serviço para permitir que essa conta de serviço acesse métodos de API relevantes.
Por exemplo, você pode conceder a uma conta de serviço os papéis do IAM para gerenciar objetos do Cloud Storage ou para gerenciar buckets do Cloud Storage, ou ambos, o que limita a conta às permissões concedidas por esses papéis.
Quando você concede uma função 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 terá a autorização conferida por essa função.
Algumas coisas para manter em mente:
Algumas funções do IAM estão na versão Beta.
Se não houver uma função predefinida para o nível de acesso desejado, você poderá criar e conceder funções personalizadas .
Você deve definir escopos de acesso na instância para autorizar o acesso.
Embora o nível de acesso de uma conta de serviço seja determinado pelas funções concedidas à conta de serviço, os escopos de acesso de uma instância determinam os escopos OAuth padrão para solicitações feitas por meio da CLI gcloud e das bibliotecas de cliente na instância. Como resultado, os escopos de acesso limitam ainda mais o acesso aos métodos de API durante a autenticação por meio do OAuth.
Escopos de acesso
Os escopos de acesso são o método legado de especificação de autorização para sua instância de VM. Eles definem os escopos OAuth padrão usados em solicitações da CLI gcloud ou das bibliotecas de cliente. Os escopos de acesso não se aplicam a chamadas feitas usando gRPC.
Os escopos de acesso se aplicam por VM e persistem apenas durante a vida útil da VM. Você pode definir escopos de acesso ao criar uma VM ou atualizar o escopo de acesso em uma VM existente.
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
fornece uma lista de escopos válidos em sua 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 ao qual 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 somente se você tiver ativado a API Cloud Storage no projeto.
Escopos padrão
Quando você cria uma nova instância do Compute Engine, ela é automaticamente configurada com os seguintes escopos de acesso:
- Acesso somente leitura ao 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étricas em seu Google Cloud projetos:
https://www.googleapis.com/auth/monitoring.write
- Acesso somente leitura aos recursos de gerenciamento de serviços necessários para Google CloudPontos finais (Alfa) :
https://www.googleapis.com/auth/service.management.readonly
- Acesso de leitura ou gravação aos recursos do Service Control necessários para Google CloudPontos finais (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 rastreamento em um projeto.
https://www.googleapis.com/auth/trace.append
Melhores práticas de 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 OAuth para Google Cloud serviços e, em seguida, controlar o acesso à conta de serviço concedendo-lhe funções do IAM.
https://www.googleapis.com/auth/cloud-platform
Exemplos de escopos
Seguindo as práticas recomendadas de escopos, se você habilitou o escopo de acesso cloud-platform
em uma instância e, em seguida, concedeu as seguintes funções predefinidas do IAM :
-
roles/compute.instanceAdmin.v1
-
roles/storage.objectViewer
-
roles/compute.networkAdmin
Então, a conta de serviço terá apenas as permissões incluídas nessas três funções. Os aplicativos que representam essa conta de serviço não podem executar ações fora dessas funções, apesar da Google Cloud escopo de acesso.
Por outro lado, se você conceder um escopo mais restritivo à instância, como o escopo somente leitura do Cloud Storage ( https://www.googleapis.com/auth/devstorage.read_only
), e definir a função de administrador roles/storage.objectAdmin
na conta de serviço, por padrão, as solicitações da CLI gcloud e das bibliotecas de cliente não poderão gerenciar objetos do Cloud Storage dessa instância, mesmo que você tenha concedido à conta de serviço o roles/storage.ObjectAdmin
. Isso ocorre porque o escopo somente leitura do Cloud Storage não autoriza a instância a manipular dados do Cloud Storage.
Exemplos de escopos de acesso incluem o seguinte:
-
https://www.googleapis.com/auth/cloud-platform
. Visualize e gerencie seus dados em Google Cloud serviços no projeto especificado do Google Cloud. -
https://www.googleapis.com/auth/compute
. Acesso com 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.
O que vem a seguir
- Autentique cargas de trabalho usando contas de serviço .
- Saiba mais sobre como criar e gerenciar contas de serviço .
- Saiba mais sobre o IAM .
- Saiba mais sobre outras opções de controle de acesso do Compute Engine .
- Saiba como visualizar registros de auditoria para monitorar como os recursos do Compute Engine são modificados.
- Se você precisar usar uma conta de serviço de um projeto diferente, leia sobre como configurar contas de serviço para um recurso em um projeto diferente .