Como entender as contas de serviço

Contexto

Conta de serviço é um tipo especial de Conta do Google que pertence a seu aplicativo ou a uma máquina virtual (VM, na sigla em inglês) e não a um usuário final individual. Seu aplicativo assume a identidade da conta de serviço para chamar as APIs do Google para que os usuários não fiquem diretamente envolvidos. Uma conta de serviço pode conter zero ou mais pares de chaves que são usadas na autenticação do Google.

Após verificar se uma conta de serviço é necessária, responda as seguintes perguntas para entender como usá-la:

  • Quais recursos uma conta de serviço pode acessar?
  • Quais permissões são necessárias na conta de serviço?
  • Onde será executado o código que assume a identidade da conta de serviço: no Google Cloud Platform ou no local?

Use o fluxograma abaixo e descubra as respostas para essas perguntas:

Fluxograma da conta de serviço

Uma das características das contas de serviço do IAM é que elas podem ser tratadas como recurso e identidade.

Ao tratar a conta de serviço como identidade, você concede a ela um papel para acessar um recurso, por exemplo, um projeto.

Ao tratar a conta de serviço como recurso, você concede a um usuário uma permissão de acesso a essa conta. O usuário pode ter o papel de proprietário, editor, leitor ou usuário da conta de serviço.

Como conceder acesso a contas de serviço

O processo de conceder acesso a um recurso para uma conta de serviço é semelhante ao de qualquer outra identidade. Por exemplo, você tem um aplicativo em execução no Google Compute Engine e deseja que ele tenha permissão apenas para criar objetos no Google Cloud Storage. Nesse caso, crie uma conta de serviço para esse aplicativo e conceda o papel de Criador de objetos de armazenamento. No diagrama abaixo, esse exemplo está ilustrado:

Fluxograma da conta de serviço

Saiba mais sobre Como atribuir papéis a contas de serviço.

Como administrar uma conta de serviço

Digamos que você tenha um job de longa duração e que os funcionários tenham permissões para iniciá-lo. O ideal é que esse trabalho não seja interrompido quando o funcionário que iniciou esse trabalho saia da empresa.

Para resolver esse problema, crie uma conta de serviço que inicie e interrompa o job. Siga as etapas abaixo:

  1. Crie uma conta de serviço.

  2. Conceda o papel "Usuário da conta de serviço" (iam.serviceAccountUser) aos funcionários que precisam de permissão para iniciar o job. Nesse cenário, a conta de serviço é o recurso.

  3. Conceda o papel "Administrador da instância do Compute" (roles/compute.instanceAdmin.v1) aos mesmos funcionários.

  4. Agora, os funcionários podem criar instâncias do Compute Engine que executam essa conta de serviço, conectar-se a elas e usar a conta para iniciar o job. Exemplo:

    gcloud compute instances create my-instance --scopes=cloud-platform \
    --service-account=my-service-account@test9q.iam.gserviceaccount.com \
    --zone=us-central1-a
    

Para mais informações, consulte Papel serviceAccountUser.

Como migrar dados para o Google Cloud Platform

Suponha que alguns dados estejam sendo processados em outro provedor de nuvem e você quer transferi-los para o Google Cloud Platform. Use uma conta de serviço das máquinas virtuais na nuvem externa para inserir os dados no Google Cloud Platform. Quando essa conta for criada, crie e faça o download da chave dela. Use essa chave no processo externo para chamar as APIs do Cloud Platform.

Como controlar as contas de serviço

Com o tempo e à medida que mais contas de serviços são criadas, pode ficar difícil manter o controle sobre o uso e a finalidade de cada uma delas.

O nome de exibição é uma boa maneira de conseguir informações adicionais sobre a conta de serviço como, por exemplo, finalidade ou contato. Ao criar novas contas, preencha esse nome. Para modificá-lo no caso de contas de serviço atuais, use o método serviceAccounts.update().

Como excluir e recriar contas de serviço

É possível excluir uma conta de serviço e criar uma nova com o mesmo nome. Se você reutilizar o nome de uma conta de serviço excluída, isso poderá causar um comportamento inesperado.

Quando você exclui uma conta de serviço, as respectivas associações de papéis não são removidas imediatamente. Se você criar uma nova conta de serviço com o mesmo nome de uma recém-excluída, as associações antigas talvez ainda existam. No entanto, elas não se aplicarão à nova conta de serviço, mesmo que as duas contas tenham o mesmo endereço de e-mail. Isso ocorre porque as contas de serviço recebem um código exclusivo no Cloud IAM durante a criação. Internamente, todas as associações de papéis são concedidas usando esses códigos, e não o endereço de e-mail da conta de serviço. Portanto, as associações de papéis em uma conta de serviço excluída não se aplicam a uma nova conta com o mesmo endereço de e-mail.

Para evitar confusão, sugerimos que você use nomes exclusivos nas contas de serviço. Se isso não for possível, conceda um papel à nova conta de serviço ao:

  1. remover explicitamente quaisquer vinculações que concedam esse papel à conta de serviço antiga;
  2. conceder novamente esses papéis à nova conta de serviço.

É necessário remover as associações de papel antes de adicioná-las novamente. Haverá falhas se você simplesmente conceder o papel novamente à conta de serviço excluída.

Como conceder o mínimo de permissões a contas de serviço

Conceda somente o conjunto mínimo de permissões necessárias à conta de serviço. Saiba mais sobre Como atribuir papéis a uma conta de serviço para recursos específicos.

Ao conceder o acesso para uma conta de serviço aos usuários, lembre-se de que eles têm permissão para acessar todos os recursos dessa conta. Por esse motivo, é importante ter cuidado quando você configura permissões. Seja rigoroso ao escolher quem atuará como conta de serviço.

Os usuários com papéis do IAM que atualizam instâncias do App Engine e do Compute Engine como Implantador do App Engine ou Administrador de instâncias do Compute executam o código com eficiência, assim como as contas de serviço usadas para executar essas instâncias. Além disso, eles recebem acesso indiretamente aos mesmos recursos que essas contas. Da mesma maneira, o acesso do SSH a uma instância do Google Compute Engine também habilita a execução do código como essa instância.

Como gerenciar chaves de contas de serviço

Há dois tipos de chaves de contas de serviço:

  • Chaves gerenciadas pelo GCP. Essas chaves são usadas por serviços do Cloud Platform como o App Engine e o Compute Engine. Elas não podem ser transferidas por download, são trocadas automaticamente e usadas para assinatura por no máximo duas semanas. O processo de troca é baseado em probabilidades, e o uso da nova chave aumentará ou diminuirá a duração dela gradualmente. Recomendamos armazenar em cache o conjunto de chaves públicas de uma conta de serviço por no máximo 24 horas para garantir que você sempre tenha acesso ao conjunto de chaves atual.

  • Chaves gerenciadas pelo usuário. Os usuários criam, fazem o download e gerenciam essas chaves. Elas expiram 10 anos após a criação.

No caso de chaves gerenciadas pelo usuário, verifique se você tem processos no local para atender aos requisitos de gerenciamento de chaves:

  • armazenamento de chaves
  • distribuição de chaves
  • revogação de chaves
  • troca de chaves
  • proteção de chaves contra usuários não autorizados
  • recuperação de chaves

Qualquer pessoa que tenha as chaves consegue acessar os recursos por meio da conta de serviço. Não é recomendável que os desenvolvedores verifiquem as chaves no código-fonte nem que elas fiquem no diretório de downloads.

Para melhorar a segurança das chaves, siga as orientações abaixo:

Como usar as contas de serviço com o Google Compute Engine

As instâncias do Google Compute Engine precisam ser executadas como contas de serviço para terem acesso a outros recursos do Cloud Platform. Para garantir a segurança das instâncias do Google Compute Engine, pense no seguinte:

  • Crie VMs no mesmo projeto com diferentes contas de serviço. Para alterar a conta de serviço de uma VM após ela ser criada, use o método instances.setServiceAccount.

  • Conceda papéis do IAM a contas de serviço para definir o que pode ser acessado por elas. Em muitos casos, os escopos não são mais necessários. Com isso, você consegue modificar as permissões da conta de serviço de uma VM sem recriar a instância.

  • As instâncias dependem das contas de serviço para acessar os recursos do Cloud Platform. Por isso, evite excluí-las quando ainda estiverem sendo usadas pelas instâncias. Se as contas forem excluídas, podem ocorrer falhas nas operações das instâncias.

Práticas recomendadas

  • Restrinja quem pode atuar como conta de serviço. Os usuários com papéis de Usuários de contas de serviço têm acesso indireto a todos os recursos da conta. Portanto, tenha cuidado ao conceder esse papel.

  • Conceda somente o conjunto mínimo de permissões necessárias à conta de serviço. Saiba mais sobre Como atribuir papéis a uma conta de serviço de recursos específicos.

  • Crie contas para cada serviço apenas com as permissões necessárias.

  • Use o nome de exibição de uma conta de serviço para manter o controle dela. Ao criá-la, preencha o nome de exibição com a finalidade dela.

  • Defina uma convenção de nomenclatura para as contas de serviço.

  • Implemente processos para automatizar a troca de chaves de contas de serviço gerenciadas por usuários.

  • Use a API da conta de serviço do IAM para implementar a troca da chave.

  • Faça a auditoria das contas de serviço e das chaves usando o método serviceAccount.keys.list() ou a página Visualizador de registros no Console.

  • Não exclua contas de serviço em uso com a execução de instâncias no Google App Engine ou no Google Compute Engine.

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

Enviar comentários sobre…

Documentação do Cloud Identity and Access Management