Contas de serviço compreensíveis
Conta de serviço
Uma conta de serviço é um tipo especial de conta Google destinada a representar usuários não humanos que precisam autenticar e estar autorizados a acessar os dados nas APIs do Google.
Tipicamente, contas de serviço são usadas em cenários como:
- Executar cargas de trabalho em máquinas virtuais (VMs).
- Executar cargas de trabalho em estações de trabalho locais ou centros de dados que chamam as APIs do Google.
- Executar cargas de trabalho que não estejam vinculadas ao ciclo de vida de um usuário humano.
A sua aplicação assume a identidade da conta do serviço para chamar as APIs do Google, para que os usuários não estejam diretamente envolvidos.
Gerenciando contas de serviço
Quando você decidir que precisa de uma conta de serviço, você pode se fazer as seguintes perguntas para entender como você vai usar a conta de serviço:
- Que recursos a conta de serviço pode acessar?
- De que permissões a conta de serviço precisa?
- Onde irá o código que assume a identidade da conta de serviço berunning- no Google Cloud ou no local?
Utilize o seguinte fluxograma para descobrir as respostas às perguntas acima:
Nota que as contas de serviço podem ser pensadas tanto como fonte quanto como anidentidade.
Ao pensar na conta de serviço como uma identidade, você pode conceder um papel à conta de serviço, permitindo que ela acesse um recurso (como um projeto).
Ao pensar na conta de serviço como um recurso, você pode conceder papéis a outros usuários para acessar ou gerenciar essa conta de serviço.
Aceder a contas de serviço
Aceder a uma conta de serviço para acessar um recurso é semelhante a conceder acesso a qualquer outra identidade. Por exemplo, se você tiver um aplicativo rodando noCompute Engine e quiser que o aplicativo só tenha acesso para criar objetos no Cloud Storage. Você pode criar uma conta de serviço para a aplicação e conceder-lhe o papel de Criador de Objetos de Armazenamento. O diagrama a seguir ilustra este exemplo:
Saiba mais sobre os papéis de agregação para todos os tipos de membros, incluindo contas de serviço.
>
Mantendo o rastro das contas de serviço
A medida que você cria mais e mais contas de serviço, você pode perder o rastro de qual conta de serviço é usada para que propósito.
O nome de exibição de uma conta de serviço é uma boa maneira de capturar informações adicionais sobre a conta de serviço, como o propósito da conta de serviço ou uma pessoa de contato para a conta. Para novas contas de serviço, você pode preencher o nome de exibição ao criar a conta de serviço. Para contas de serviço existentes use o método serviceAccounts.update()
tomodify the display name.
Identifying unused service accounts
Unused service accounts create an unnecessary security risk, so we recommenddisabling unused service accounts, thendeleting the service accounts when you are sure that you are no needed them longer. Você pode usar os seguintes métodos para identificar contas de serviço não utilizadas:
>
- As percepções da conta de serviço lhe dizem quais contas de serviço em seu projeto não foram autenticadas nos últimos 90 dias.
- As métricas de uso da conta de serviço permitem que você verifique quando a conta de serviço foi usada pela última vez.
Apagar e recriar contas de serviço
É possível apagar uma conta de serviço e depois criar uma nova conta de serviço com o mesmo nome.
Quando você apaga uma conta de serviço, as suas funções não são imediatamente apagadas. Em vez disso, as ligações de funções listam a conta de serviços com o prefixo deleted:
. Para um exemplo, veja Políticas com membros excluídos.
Se você criar uma nova conta de serviço com o mesmo nome de uma conta de serviço excluída recentemente, os bindings antigos ainda podem existir; no entanto, eles não se aplicarão à nova conta de serviço, mesmo que ambas as contas tenham o mesmo endereço de e-mail. Este comportamento ocorre porque as contas de serviço recebem um ID único no Gerenciamento de Identidade e Acesso (IAM) no momento da criação. Internamente, todas as funções vinculadas são atribuídas usando esses IDs, e não o endereço de e-mail da conta de serviço. Portanto, os bindings que existiam para uma conta de serviço excluída não se aplicam a uma conta de serviço de notícias que usa o mesmo endereço de e-mail.
Simplesmente, se você colocar uma conta de serviço em um recurso, então retire a conta de serviço e crie uma nova conta de serviço com o mesmo nome, a nova conta de serviço não será anexada ao recurso.
Para evitar este comportamento inesperado, considere o uso de um nome novo e único para cada conta de serviço. Além disso, se você acidentalmente apagar uma conta de serviço, você pode tentar apagar a conta de serviço em vez de criar uma nova conta de serviço.
Se você não conseguir apagar a conta de serviço original e precisar criar uma nova conta de serviço com o mesmo nome e as mesmas funções, você deve conceder os buracos para a nova conta de serviço. Para detalhes, veja Políticas com membros excluídos.
Se você também precisar que a nova conta de serviço seja anexada aos mesmos recursos como a conta de serviço original, faça um dos seguintes:
- Para as instâncias do Motor de Cálculo, você pode trocar a conta de serviço que está anexada à instância para substituir a conta de serviço original pela nova conta de serviço.
- Para todos os outros recursos, você deve excluir o recurso existente, depois criar um novo recurso do mesmo tipo e colocar a nova conta de serviço.
Permissões para contas de serviço
Esta seção descreve cenários comuns para permissões concedidas a contas de serviço, ou contas de usuário que têm as permissões para personificar contas de serviço:
- Permissões mínimas para contas de serviço
- Permissões para contas de serviço para cenários comuns
Permissões mínimas para contas de serviço
Como com todos os tipos de membros, você só deve conceder à conta de serviço o conjunto mínimo de permissões necessárias para atingir seu objetivo. Aprenda sobre a concessão de funções a todos os tipos de membros, incluindo contas de serviço.
Ao conceder permissões aos usuários para acessar uma conta de serviço, tenha em mente que o usuário pode acessar todos os recursos para os quais a conta de serviço tem permissões. Portanto, é importante configurar as permissões de suas contas de serviço cuidadosamente; ou seja, seja, seja rigoroso sobre quem em sua equipe pode agir como (ou personificar) uma conta de serviço. Tenha especial cuidado ao permitir que os usuários personifiquem contas de serviço altamente privilegiadas, como o Mecanismo de Computação e contas de serviço padrão do App Enginedefault.
Usuários com funções IAM para atualizar as instâncias do Mecanismo de Aplicação e do Mecanismo de Computação (como o Deployeror Compute Instance Admin do App Engine) podem efetivamente executar código como as contas de serviço usadas para executar essas instâncias, e indiretamente obter acesso a todos os recursos para os quais as contas de serviço têm acesso. Da mesma forma, o acesso SSH a uma instância do Compute Engine também pode fornecer a capacidade de executar código como aquela instância.
Permissões de contas de serviço para cenários comuns
Contas de serviço podem ser usadas em muitos cenários diferentes, e cada uma delas requer certas permissões. Esta seção descreve cenários comuns e quais permissões são necessárias.
Atacar contas de serviço para recursos
Se você deseja iniciar um trabalho de longa duração que se autentique como uma conta de serviço, você precisa anexar uma conta de serviço ao recurso que irá executar o trabalho.
Permissões:
- Permissões para criar o recurso
- >
iam.serviceAccounts.actAs
Para encontrar funções que incluem essas permissões, procure na lista de permissões.
Existem vários recursos diferentes do Google Cloud que podem executar trabalhos em execução como contas de serviço. Alguns exemplos desses recursos incluem:
- MVms de engine de cálculo
- Aplicações de engine de aplicação
- Funções em nuvem
>
Quando você cria esses recursos, você tem a opção de anexar uma conta de serviço. Essa conta de serviço funciona como a identidade do recurso.
Para criar um recurso e anexar uma conta de serviço, você precisa de permissões para criar esse recurso e permissão para personificar a conta de serviço que você irá anexar ao recurso. A permissão para personificar a conta de serviço é fornecida por qualquer função que inclua o recurso iam.serviceAccounts.actAs
permissão.
Após criar o recurso e anexar uma conta de serviço a ele, você pode começar um trabalho de longa duração no recurso. O trabalho é executado como a conta de serviço que está vinculada ao recurso, e usa essa conta de serviço para autorizar solicitações aoGoogle Cloud APIs.
Para saber mais sobre como anexar contas de serviço aos recursos, consulteAnexecução de uma conta de serviço a um recurso.
Imitindo diretamente uma conta de serviço
Permissões:
-
iam.serviceAccounts.getAccessToken
-
iam.serviceAccounts.signBlob
iam.serviceAccounts.signJwt
iam.serviceAccounts.implicitDelegation
Roles:
>
-
roles/iam.serviceAccountTokenCreator
(Criador do Token da Conta do Serviço)
Após conceder as permissões requeridas, um usuário (ou serviço) pode diretamente personalizar (ou afirmar) a identidade de uma conta de serviço em alguns cenários comuns.
Primeiro, o usuário pode obter credenciais de curto prazo para a conta de serviço usando a permissãoiam.serviceAccounts.getAccessToken
e ligando para o métodogenerateAccessToken()
. Usando credenciais de curto prazo, um usuário pode emitir comandos para oGoogle Cloud e pode acessar todos os recursos aos quais a conta do serviço tem acesso. Por exemplo, este fluxo permite que um usuário use agcloud --impersonate-service-account
bandeira para se fazer passar pela conta de serviço sem requerer o uso de uma chave de conta de serviço externa carregada. A chave privada gerida pelo Google é sempre guardada em caução e nunca é exposta directamente. signBlob()
permite a assinatura de cargas úteis arbitrárias (tais como URLs assinadas no ArmazémCloud), enquanto signJwt()
apenas permite assinar JWTs.
Finalmente, o utilizador pode fazer-se passar (ou afirmar) a conta de serviço sem nunca recuperar uma credencial para a conta de serviço. Este é um caso de uso avançado e só é suportado para acesso programático usando o métodogenerateAccessToken()
method. Em cenários com pelo menos 3 contas de serviço, nomeadamente A, B, e C: conta de serviço A pode obter um token de acesso para a conta de serviço C se a conta de serviço A tiver a permissão deiam.serviceAccounts.implicitDelegation
permissão em B, e B tiver a permissão de iam.serviceAccounts.getAccessToken
permissão em C.
Geração de fichas de identificação OpenID Connect (OIDC)
Permissões:
- >
iam.serviceAccounts.getOpenIdToken
Roles:
>
-
roles/iam.serviceAccountTokenCreator
(Criador de Tokens de Conta de Serviço)
Um usuário (ou serviço) pode gerar um OpenID Connect (OIDC)-compatível com os tokens JWT assinados pelo Provedor de OIDC do Google (contas.google.com) que representa a identidade da conta do serviço usando o iam.serviceAccounts.getOpenIdToken
permission.
Estes tokens não são aceitos diretamente pela maioria das APIs do Google sem que a sua organização implemente uma federação de identidade adicional para conceder acesso aoGoogle. Existem algumas exceções – por exemplo, o Proxy de Identity-Aware, que permite acesso baseado emOIDC a aplicativos executados pelo usuário.
Geração de chaves privadas externas
Permissões:
iam.serviceAccountKeys.create
Roles:
-
roles/editor
(Editor) -
roles/iam.serviceAccountAdmin
(Service Account Admin)
Um utilizador ou serviço pode gerar material de chave privada externa (RSA) que pode ser utilizado para autenticar directamente no Google como a conta de serviço. Este material de chave pode então ser utilizado com as bibliotecas Application Default Credentials (ADC), ou com o comandogcloud auth activate-service-account
. Qualquer pessoa que obtenha acesso ao material chave terá então acesso total a todos os recursos aos quais a conta de serviço tem acesso. Esse material de chave privada deve ser tratado com a maior preocupação, e deve tornar-se menos seguro quanto mais tempo o material existir. Portanto, o material de chave privada rotativa é fundamental para manter uma forte segurança.
Gerenciar chaves de conta de serviço
Existem dois tipos de chaves de conta de serviço:
-
Google Cloud-managed keys. Estas chaves são utilizadas pelo Google Cloudservices, tais como App Engine e Compute Engine. Elas não podem ser carregadas, e são automaticamente giradas e usadas para assinar por um máximo de duas semanas. O processo de rotação é probabilístico; o uso da nova chave aumentará e diminuirá gradualmente ao longo da vida útil da chave. Recomendamos o cache do conjunto de chaves públicas para 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. Estas chaves são criadas, transferíveis, e geridas pelos utilizadores. Depois de as apagar da conta de serviço, não as pode utilizar para autenticar.
Para chaves administradas pelo usuário, você precisa ter certeza de que você tem processos em vigor para atender aos requisitos de gerenciamento de chaves, tais como:
- Armazenamento de chaves
- Distribuição de chaves
- Revogação de chaves
- Rotação de chaves
- Proteger as chaves de usuários não autorizados
- Recuperação de chaves
A qualquer pessoa que tenha acesso a uma chave privada válida para uma conta de serviço poderá acessar recursos através da conta de serviço. Note que o ciclo de vida do acesso da chave à conta de serviço (e portanto, os dados a que a conta de serviço tem acesso) é independente do ciclo de vida do usuário que baixou a chave.
Sempre desencoraje os desenvolvedores de verificar chaves no código fonte ou deixá-las no diretório Downloads da sua estação de trabalho.
Para aumentar a segurança das chaves, siga a orientação abaixo:
-
Utilize a API da conta de serviço IAM para girar automaticamente as chaves da sua conta de serviço. Você pode girar uma chave criando uma nova chave, alternando aplicações para usar a nova chave e depois apagando a chave antiga. Use os métodos
serviceAccount.keys.create()
eserviceAccount.keys.delete()
juntos para automatizar a rotação. As chaves geridas pelo Google Cloud são rodadas aproximadamente uma semana.>
- Utilizar o método
serviceAccount.keys.list()
para auditar contas de serviço e chaves.
- Utilizar o método
Utilizar contas de serviço com Compute Engine
Executar como contas de serviço para ter acesso a outros recursos do Google Cloud. Para garantir que as suas instâncias do Compute Engine sejam mais seguras, considere o seguinte:
-
Você pode criar VMs no mesmo projeto com contas de serviço diferentes. Para alterar a conta de serviço de uma VM depois que ela for criada, use o método
instances.setServiceAccount
-
Você pode conceder funções de IAM para contas de serviço para definir o que elas podem acessar. Em muitos casos você não precisará contar mais com o escopo. Isto dá-lhe a vantagem de poder modificar as permissões da conta de serviço de uma MV sem recriar a instância.
-
Desde que as instâncias dependem das suas contas de serviço para ter acesso aos recursos do Google Cloud, evite eliminar as contas de serviço quando estas forem utilizadas pela execução de instâncias. Se você excluir as contas de serviço, as substâncias podem começar a falhar suas operações.
Best practices
-
Especifique quem pode agir como contas de serviço. Usuários que são Contas de Serviço Usuários de uma conta de serviço podem acessar indiretamente todos os recursos aos quais a conta de serviço tem acesso. Portanto, seja cauteloso ao conceder a um usuário o papel de Usuário da conta de serviço.
-
Grant a conta de serviço apenas o conjunto mínimo de permissões necessárias para atingir seu objetivo. Aprenda sobre a atribuição de funções a todos os tipos de membros, incluindo contas de serviço.
-
Criar contas de serviço para cada serviço com apenas as permissões necessárias para esse serviço.
-
Utilizar o nome de exibição de uma conta de serviço para manter o controle das contas de serviço. Quando você criar uma conta de serviço, preencha o nome de exibição com o propósito da conta de serviço.
-
Definir uma convenção de nomenclatura para suas contas de serviço.
-
Implementar processos para automatizar a rotação das chaves da conta de serviço gerenciada pelo usuário.
-
Tirar vantagem da API da conta de serviçoIAM para implementar a rotação de chaves.
-
Auditar contas de serviço e chaves usando ou o método
serviceAccount.keys.list()
ou a páginaLogs Viewer no console. -
Não exclua contas de serviço que estão em uso executando instâncias noApp Engine ou Compute Engine a menos que você queira que essas aplicações tolerem o acesso à conta de serviço.
Experimente você mesmo
Se você é novo no Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em cenários do mundo real. Novos clientes também recebem $300 em créditos grátis para executar, testar e implantar cargas de trabalho.
Comece de graça