Contas de serviço

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), reveja um dos seguintes documentos:

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

O que é uma conta de serviço?

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

Tenha em atenção o seguinte quando usar contas de serviço com as suas VMs:

  • 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 anexar a mesma conta de serviço a várias VMs, todas as alterações subsequentes que fizer à conta de serviço afetam todas as VMs que usam a conta de serviço. Isto inclui quaisquer alterações que faça às funções da IAM concedidas à conta de serviço. Por exemplo, se remover uma função, todas as VMs que usam a conta de serviço perdem as autorizaçõ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:

Pode anexar uma conta de serviço gerida pelo utilizador a uma instância do Compute Engine para fornecer credenciais a aplicações em execução na instância. Estas credenciais são usadas pela aplicação para autenticação nas APIs Trusted Cloud e autorização para aceder a recursos Trusted Cloud . Apenas as contas de serviço geridas pelo utilizador podem ser anexadas a uma instância, e uma instância só pode ter uma conta de serviço anexada. Pode alterar a conta de serviço associada a uma instância no momento da criação ou mais tarde.

Os agentes de serviço são usados pela instância para aceder a processos internos em seu nome.

Além disso, pode criar regras de firewall que permitem ou negam o tráfego de e para instâncias com base na conta de serviço que associa a cada instância.

Como é determinada a autorização

A autorização fornecida às aplicações alojadas numa instância do Compute Engine está limitada por duas configurações separadas: as funções concedidas à conta de serviço anexada e os âmbitos de acesso que define na instância. Ambas as configurações têm de permitir o acesso antes de a aplicação em execução na instância poder aceder a um recurso.

Suponhamos que tem uma app que lê e escreve ficheiros no Cloud Storage. Esta tem de se autenticar primeiro na API Cloud Storage. Pode criar uma instância com o âmbito cloud-platform e anexar uma conta de serviço à instância. Em seguida, pode conceder funções de gestão de identidade e de acesso (IAM) à conta de serviço para dar à sua app acesso aos recursos adequados. A sua app usa as credenciais da conta de serviço para autenticar na Cloud Storage API sem incorporar chaves secretas nem credenciais de utilizador na sua instância, imagem ou código da app. A sua app também usa a autorização fornecida pelas funções de IAM na conta de serviço para aceder aos recursos. Para mais informações sobre a autorização, consulte a secção Autorização nesta página.

Contas de serviço geridas pelo utilizador

As contas de serviço geridas pelo utilizador incluem novas contas de serviço que cria explicitamente e a conta de serviço predefinida do Compute Engine.

Novas contas de serviço

Pode criar e gerir as suas próprias contas de serviço através do IAM. Depois de criar uma conta, concede funções do IAM à conta e configura instâncias para serem executadas como a conta de serviço. As apps executadas em instâncias com a conta de serviço anexada podem usar as credenciais da conta para fazer pedidos a outras APIs Google.

Para criar e configurar uma nova conta de serviço, consulte o artigo Crie uma VM que use uma conta de serviço gerida pelo utilizador.

Conta de serviço predefinida do Compute Engine

Os novos projetos que têm a API Compute Engine ativada têm uma conta de serviço predefinida do Compute Engine com o seguinte email:

PROJECT_NUMBER-compute@developer.s3ns-system.iam.gserviceaccount.com

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

  • Criada automaticamente, com um nome e um endereço de email gerados automaticamente, e adicionada ao seu projeto quando ativa a API Compute Engine. Tem total controlo sobre a conta.
  • Anexado por predefinição a todas as VMs que criou através da CLI Google Cloud ou da Trusted Cloud consola. Pode substituir este comportamento especificando uma conta de serviço diferente quando cria a VM ou especificando explicitamente que não seja anexada nenhuma conta de serviço à VM.
  • Consoante a configuração da política da organização, a conta de serviço predefinida pode receber automaticamente a função de editor no seu projeto. Recomendamos vivamente que desative a concessão automática de funções aplicando a restrição da política da organização iam.automaticIamGrantsForDefaultServiceAccounts. Se tiver criado a sua organização após 3 de maio de 2024, esta restrição é aplicada por predefinição.

    Se desativar a concessão automática de funções, tem de decidir que funções conceder às contas de serviço predefinidas e, em seguida, conceder estas funções.

    Se a conta de serviço predefinida já tiver a função de editor, recomendamos que substitua a função de editor por funções menos permissivas.

Pode desativar ou eliminar esta conta de serviço do seu projeto, mas fazê-lo pode fazer com que as aplicações que dependem das credenciais da conta de serviço falhem. Se eliminar acidentalmente a conta de serviço predefinida do Compute Engine, pode tentar recuperá-la no prazo de 30 dias. Para mais informações, consulte o artigo Elimine e anule a eliminação de contas de serviço.

Se a conta de serviço predefinida do Compute Engine tiver sido eliminada há mais de 30 dias, pode tentar recuperá-la seguindo o processo descrito na secção Resolução de problemas de contas de serviço predefinidas.

Agentes do serviço

Os agentes de serviço são criados e geridos pela Trusted Cloud by S3NS e atribuídos automaticamente ao seu projeto. Estas contas representam diferentes serviços e, normalmente, cada conta tem algum nível de acesso aos seus recursos. Trusted Cloud Trusted Cloud

Não pode anexar agentes de serviço a uma instância do Compute Engine.

Agente de serviço das APIs Google

Além da conta de serviço predefinida, todos os projetos ativados com o Compute Engine incluem um agente de serviço das APIs Google, identificável através do email:

PROJECT_NUMBER@cloudservices.s3ns-system.iam.gserviceaccount.com

Este agente de serviço foi concebido especificamente para executar processos internos da Google em seu nome. Este agente do serviço é propriedade da Google e não está listado na secção Contas de serviço da Trusted Cloud consola. Por predefinição, este agente de serviço recebe automaticamente a função de editor do projeto no projeto e é apresentado na secção IAM da consola Trusted Cloud . Este agente de serviço só é eliminado quando o projeto é eliminado. No entanto, pode alterar as funções concedidas a esta conta, incluindo revogar todo o acesso ao seu projeto.

Determinados recursos dependem das autorizações de editor predefinidas concedidas a este agente do serviço. Por exemplo, os grupos de instâncias geridos e o escalamento automático usam as credenciais deste agente do serviço para criar, eliminar e gerir instâncias. Se revogar as autorizações deste agente de serviço ou modificar as autorizações de forma que não concedam autorizações para criar instâncias, isto fará com que os grupos de instâncias geridos e o dimensionamento automático deixem de funcionar.

Por estes motivos, não deve modificar as funções deste agente de serviço, a menos que uma recomendação de função sugira explicitamente que as modifique.

Agente de serviço do Compute Engine

Todos os projetos que ativaram a API Compute Engine têm um agente do serviço Compute Engine, que tem o seguinte email:

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

Este agente de serviço foi concebido especificamente para o Compute Engine para desempenhar as respetivas funções de serviço no seu projeto. Baseia-se na Política IAM do agente de serviço concedida no seu Trusted Cloud projeto. Também é o agente de serviço que o Compute Engine usa para aceder à conta de serviço gerida pelo utilizador em instâncias de VMs. A Google é proprietária desta conta, mas esta é específica do seu projeto. Este agente de serviço está oculto na página IAM na consola, a menos que selecione Incluir S3NSconcessões de funções fornecidas pela Google. Por predefinição, este agente de serviço recebe automaticamente a função compute.serviceAgent no seu projeto.

Este agente de serviço só é eliminado quando elimina o seu projeto. Pode alterar as funções concedidas a este agente de serviço e revogar todo o acesso ao seu projeto a partir deste agente. A revogação ou a alteração das autorizações deste agente de serviço impede o Compute Engine de aceder às identidades das suas contas de serviço nas VMs e pode causar interrupções do software em execução nas VMs.

Por estes motivos, deve evitar modificar as funções deste agente de serviço o máximo possível.

Associar uma conta de serviço a uma instância

Para evitar conceder a uma aplicação autorizações excessivas, recomendamos que crie uma conta de serviço gerida pelo utilizador, conceda-lhe apenas as funções de que a sua aplicação precisa para funcionar corretamente e anexe-a à sua instância do Compute Engine. Em seguida, o seu código pode usar as credenciais predefinidas da aplicação para fazer a autenticação com as credenciais fornecidas pela conta de serviço.

Pode anexar uma conta de serviço a uma instância do Compute Engine quando criar a instância ou mais tarde. Só é possível anexar uma conta de serviço a uma instância de cada vez. Se anexar uma conta de serviço a uma instância que já tenha uma conta de serviço anexada, a instância deixa de usar a conta de serviço anterior.

Quando anexa uma conta de serviço a uma instância do Compute Engine, também tem de garantir que os âmbitos definidos na instância estão corretos. Caso contrário, a sua app pode não conseguir aceder a todas as APIs de que precisa. Para mais informações, consulte a secção Âmbitos de acesso nesta página.

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

Autorização

Quando 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 pelas funções do IAM que concede à conta de serviço. Se a conta de serviço não tiver funções do IAM, não é possível aceder a recursos através da conta de serviço nessa instância.

Além disso, os âmbitos de acesso de uma instância determinam os âmbitos OAuth predefinidos para pedidos feitos através da CLI gcloud e das bibliotecas cliente na instância. Como resultado, os âmbitos de acesso limitam potencialmente ainda mais o acesso aos métodos da API quando a autenticação é feita através do OAuth. No entanto, não se aplicam a outros protocolos de autenticação, como o gRPC.

A prática recomendada é definir o âmbito de acesso cloud-platform completo na instância e, em seguida, controlar o acesso da conta de serviço através de 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 âmbitos de acesso podem limitar ainda mais o acesso aos métodos da API.

Os âmbitos de acesso e as funções de IAM estão descritos detalhadamente nas secções seguintes.

Funções de IAM

Tem de conceder as funções de IAM adequadas a uma conta de serviço para permitir que essa conta de serviço aceda aos métodos API relevantes.

Por exemplo, pode conceder a uma conta de serviço as funções de IAM para gerir objetos do Cloud Storage ou para gerir contentores do Cloud Storage, ou ambos, o que limita a conta às autorizações concedidas por essas funções.

Quando concede uma função do IAM a uma conta de serviço, qualquer aplicação executada numa instância que tenha essa conta de serviço anexada tem a autorização conferida por essa função.

Alguns aspetos a ter em conta:

  • Algumas funções de IAM estão na versão beta.

    Se não existir uma função predefinida para o nível de acesso pretendido, pode criar e conceder funções personalizadas.

  • Tem de definir âmbitos 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 âmbitos de acesso de uma instância determinam os âmbitos OAuth predefinidos para pedidos feitos através da CLI gcloud e das bibliotecas de cliente na instância. Como resultado, os âmbitos de acesso podem limitar ainda mais o acesso aos métodos da API quando a autenticação é feita através do OAuth.

Âmbitos de acesso

Os âmbitos de acesso são o método antigo de especificar a autorização para a sua instância de VM. Definem os âmbitos de OAuth predefinidos usados em pedidos da CLI gcloud ou das bibliotecas cliente. Os âmbitos de acesso não se aplicam a chamadas feitas através do gRPC.

Os âmbitos de acesso aplicam-se por VM e persistem apenas durante a vida útil da VM. Pode definir âmbitos de acesso quando cria uma VM ou atualiza o âmbito de acesso numa VM existente.

Geralmente, a documentação de cada método da API indica os âmbitos necessários para esse método. Por exemplo, o método instances.insert fornece uma lista de âmbitos válidos na respetiva secção de autorização.

Os âmbitos de acesso não têm efeito se não tiver ativado a API relacionada no projeto ao qual pertence a conta de serviço. Por exemplo, conceder um âmbito de acesso para o Cloud Storage numa instância de máquina virtual permite que a instância chame a API Cloud Storage apenas se tiver ativado a API Cloud Storage no projeto.

Âmbitos predefinidos

Quando cria uma nova instância do Compute Engine, esta é configurada automaticamente com os seguintes âmbitos de acesso:

  • Acesso de leitura ao Cloud Storage:
    https://www.googleapis.com/auth/devstorage.read_only
  • Acesso de escrita para escrever registos do Compute Engine:
    https://www.googleapis.com/auth/logging.write
  • Acesso de escrita para publicar dados de métricas nos seus Trusted Cloud by S3NS projetos:
    https://www.googleapis.com/auth/monitoring.write
  • Acesso só de leitura às funcionalidades de gestão de serviços necessárias para Trusted Cloud by S3NS Pontos finais(alfa):
    https://www.googleapis.com/auth/service.management.readonly
  • Acesso de leitura ou escrita às funcionalidades do controlo de serviços necessário para Trusted Cloud by S3NS Pontos finais(alfa):
    https://www.googleapis.com/auth/servicecontrol
  • O acesso de escrita ao Cloud Trace permite que uma aplicação executada numa VM escreva dados de rastreio num projeto.
    https://www.googleapis.com/auth/trace.append

Prática recomendada para âmbitos

Existem muitos âmbitos de acesso disponíveis para escolher, mas uma prática recomendada é definir o cloud-platformâmbito de acesso, que é um âmbito do OAuth para serviços Trusted Cloud by S3NS , e, em seguida, controlar o acesso da conta de serviço concedendo-lhe funções do IAM.

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

Exemplos de âmbitos

Seguindo a prática recomendada dos âmbitos, se ativou o âmbito de acesso cloud-platform numa instância e, em seguida, concedeu as seguintes funções predefinidas do IAM:

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

Em seguida, a conta de serviço tem apenas as autorizações incluídas nessas três funções. As aplicações que se fazem passar por essa conta de serviço não podem realizar ações fora destas funções, apesar do Trusted Cloud by S3NS âmbito de acesso.

Por outro lado, se conceder um âmbito mais restritivo na instância, como o âmbito de 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 predefinição, os pedidos da CLI gcloud e das bibliotecas de cliente não vão poder gerir objetos do Cloud Storage a partir dessa instância, mesmo que tenha concedido à conta de serviço a função roles/storage.ObjectAdmin. Isto deve-se ao facto de o âmbito só de leitura do Cloud Storage não autorizar a instância a manipular dados do Cloud Storage.

Seguem-se alguns exemplos de âmbitos de acesso:

  • https://www.googleapis.com/auth/cloud-platform. Veja e faça a gestão dos seus dados em Trusted Cloud serviços no Trusted Cloud projeto especificado.
  • https://www.googleapis.com/auth/compute. Acesso de controlo total aos métodos do Compute Engine.
  • https://www.googleapis.com/auth/compute.readonly. Acesso só de leitura aos métodos do Compute Engine.
  • https://www.googleapis.com/auth/devstorage.read_only. Acesso de leitura apenas ao armazenamento na nuvem.
  • https://www.googleapis.com/auth/logging.write. Acesso de escrita aos registos do Compute Engine.

O que se segue?