Vista geral das contas de serviço

Esta página explica o que são as contas de serviço e descreve considerações importantes para gerir as suas contas de serviço em cada fase do respetivo ciclo de vida.

O que são contas de serviço?

Uma conta de serviço é um tipo especial de conta normalmente usado por uma aplicação ou uma carga de trabalho de computação, como uma instância do Compute Engine, em vez de uma pessoa. Uma conta de serviço é identificada pelo respetivo endereço de email, que é exclusivo da conta.

As aplicações usam contas de serviço para fazer chamadas de API autorizadas através da autenticação como a própria conta de serviço. Quando uma aplicação se autentica como uma conta de serviço, tem acesso a todos os recursos aos quais a conta de serviço tem autorização de acesso.

A forma mais comum de permitir que uma aplicação se autentique como uma conta de serviço é anexar uma conta de serviço ao recurso que executa a aplicação. Por exemplo, pode anexar uma conta de serviço a uma instância do Compute Engine para que as aplicações executadas nessa instância possam autenticar-se como a conta de serviço. Em seguida, pode conceder funções de IAM à conta de serviço para permitir que a conta de serviço, e, por extensão, as aplicações na instância, acedam aos Trusted Cloud recursos.

Existem outras formas de permitir que as aplicações façam a autenticação como contas de serviço, além de anexar uma conta de serviço. Por exemplo, pode configurar a federação de identidades da carga de trabalho para permitir que as cargas de trabalho externas se autentiquem como contas de serviço ou criar uma chave de conta de serviço e usá-la em qualquer ambiente para obter chaves de acesso OAuth 2.0.

Para saber mais sobre a autenticação de contas de serviço para aplicações, consulte o artigo Vista geral das identidades para cargas de trabalho.

Os principais, como os utilizadores e outras contas de serviço, também podem autenticar-se como contas de serviço. Para mais informações, consulte a secção Roubo de identidade de conta de serviço nesta página.

Tipos de contas de serviço

No Trusted Cloud, existem vários tipos diferentes de contas de serviço:

  • Contas de serviço geridas pelo utilizador: contas de serviço que cria e gere. Estas contas de serviço são frequentemente usadas como identidades para cargas de trabalho.

  • Contas de serviço predefinidas: contas de serviço geridas pelo utilizador que são criadas automaticamente quando ativa determinados Trusted Cloud serviços. É responsável pela gestão destas contas de serviço.

  • Agentes de serviço: contas de serviço criadas e geridas pela Trusted Cloud, e que permitem que os serviços acedam a recursos em seu nome.

Para saber mais sobre os diferentes tipos de contas de serviço, consulte o artigo Tipos de contas de serviço.

Credenciais da conta de serviço

As aplicações e os principais autenticam-se como uma conta de serviço através de uma das seguintes opções:

  • Obter credenciais de curta duração. Em muitos casos, como contas de serviço anexadas e comandos que usam a flag --impersonate-service-account da CLI gcloud, estas credenciais são obtidas automaticamente. Não precisa de as criar nem gerir.
  • Usar uma chave de conta de serviço para assinar um símbolo da Web JSON (JWT) e trocá-lo por um token de acesso. Uma vez que as chaves de contas de serviço representam um risco de segurança se não forem geridas corretamente, deve escolher uma alternativa mais segura às chaves de contas de serviço sempre que possível.

Para saber mais sobre a autenticação de contas de serviço, consulte o artigo Credenciais da conta de serviço.

Simulação de identidade de conta de serviço

Quando um principal autenticado, como um utilizador ou outra conta de serviço, se autentica como uma conta de serviço para obter as autorizações da conta de serviço, chama-se roubar a identidade da conta de serviço. A utilização da identidade de uma conta de serviço permite que um principal autenticado aceda a tudo o que a conta de serviço pode aceder. Apenas os principais autenticados com as autorizações adequadas podem fazer-se passar por contas de serviço.

A representação é útil quando quer alterar as autorizações de um utilizador sem alterar as suas políticas de gestão de identidade e acesso (IAM). Por exemplo, pode usar a representação para conceder temporariamente a um utilizador acesso elevado ou para testar se um conjunto específico de autorizações é suficiente para uma tarefa. Também pode usar a representação para desenvolver localmente aplicações que só podem ser executadas como uma conta de serviço ou para autenticar aplicações que são executadas fora do Trusted Cloud.

Para saber mais sobre a simulação da conta de serviço, consulte o artigo Simulação da conta de serviço.

Autorizações da conta de serviço

As contas de serviço são diretores. Isto significa que pode conceder às contas de serviço acesso a Trusted Cloud recursos. Por exemplo, pode conceder à conta de serviço a função de administrador de computação (roles/compute.admin) num projeto. Em seguida, a conta de serviço pode gerir os recursos do Compute Engine nesse projeto.

No entanto, as contas de serviço também são recursos. Isto significa que pode conceder a outros responsáveis autorização para aceder à conta de serviço. Por exemplo, pode conceder a um utilizador a função de utilizador da conta de serviço (roles/iam.serviceAccountUser) numa conta de serviço para permitir que o utilizador anexe essa conta de serviço a recursos. Em alternativa, pode conceder a um utilizador a função de administrador da conta de serviço (roles/iam.serviceAccountAdmin) para lhe permitir realizar ações como ver, editar, desativar e eliminar a conta de serviço.

As secções seguintes abordam a gestão de contas de serviço como principais e como recursos.

Contas de serviço como responsáveis

Uma vez que as contas de serviço são principais, pode gerir o acesso das contas de serviço tal como faria com qualquer outra principal. Por exemplo, se quiser permitir que a conta de serviço da sua aplicação aceda a objetos num contentor do Cloud Storage, pode conceder à conta de serviço a função de leitor de objetos de armazenamento (roles/storage.objectViewer) no contentor. Em alternativa, se quiser garantir que a conta de serviço de uma aplicação não pode alterar as políticas de IAM de um projeto, pode usar uma política de recusa para impedir que a conta de serviço use a autorização resourcemanager.projects.setIamPolicy nesse projeto. Para saber mais sobre a gestão do acesso para os principais, consulte o artigo Acesso no Trusted Cloud.

Pode gerir o acesso para contas de serviço individuais ou para todas as contas de serviço num projeto, pasta ou organização específicos. Quando gerir o acesso para contas de serviço, use os seguintes identificadores principais para se referir às contas de serviço:

Tipo de principal Identificador principal
Uma conta de serviço individual

serviceAccount:SA_EMAIL_ADDRESS

Exemplo: serviceAccount:my-service-account@my-project.s3ns-system.iam.gserviceaccount.com

Todas as contas de serviço num projeto

principalSet://cloudresourcemanager.googleapis.com/projects/PROJECT_NUMBER/type/ServiceAccount

Exemplo: principalSet://cloudresourcemanager.googleapis.com/projects/123456789012/type/ServiceAccount

Todas as contas de serviço em todos os projetos numa pasta

principalSet://cloudresourcemanager.googleapis.com/folders/FOLDER_NUMBER/type/ServiceAccount

Exemplo: principalSet://cloudresourcemanager.googleapis.com/folders/123456789012/type/ServiceAccount

Todas as contas de serviço em todos os projetos de uma organização

principalSet://cloudresourcemanager.googleapis.com/organizations/ORGANIZATION_NUMBER/type/ServiceAccount

Exemplo: principalSet://cloudresourcemanager.googleapis.com/organizations/123456789012/type/ServiceAccount

Tal como acontece com todos os tipos de principais, só deve conceder à conta de serviço o conjunto mínimo de autorizações necessárias para atingir o respetivo objetivo.

Se as contas de serviço num projeto, numa pasta ou numa organização específicos partilharem requisitos, use conjuntos principais de contas de serviço para lhes conceder funções em vez de usar grupos personalizados.

Para saber como conceder funções a responsáveis, incluindo contas de serviço, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Contas de serviço como recursos

As contas de serviço também são recursos que podem ter as suas próprias políticas de autorização. Como resultado, pode permitir que outros principais acedam a uma conta de serviço concedendo-lhes uma função na conta de serviço ou num dos recursos principais da conta de serviço. Por exemplo, para permitir que um utilizador use a identidade de uma conta de serviço, pode conceder ao utilizador a função Criador de tokens da conta de serviço (roles/iam.serviceAccountTokenCreator) na conta de serviço.

Quando atribui uma função que permite a um utilizador representar uma conta de serviço, tenha em atenção que o utilizador pode aceder a todos os recursos aos quais a conta de serviço pode aceder. Tenha cuidado ao permitir que os utilizadores se façam passar por contas de serviço com privilégios elevados, como a conta de serviço predefinida do Compute Engine.

Para mais informações sobre as funções que pode conceder a responsáveis em contas de serviço, consulte o artigo Autorizações da conta de serviço.

Para saber como conceder uma função a um principal numa conta de serviço, consulte o artigo Faça a gestão do acesso às contas de serviço.

Ciclo de vida da conta de serviço

À medida que gere os seus projetos, é provável que crie, faça a gestão e elimine muitas contas de serviço diferentes. Esta secção descreve as principais considerações para gerir as suas contas de serviço nas várias fases do respetivo ciclo de vida.

Onde criar contas de serviço

Cada conta de serviço está localizada num projeto. Depois de criar uma conta de serviço, não a pode mover para um projeto diferente.

Existem algumas formas de organizar as suas contas de serviço em projetos:

  • Crie contas de serviço e recursos no mesmo projeto.

    Esta abordagem facilita o início da utilização das contas de serviço. No entanto, pode ser difícil acompanhar as suas contas de serviço quando estão distribuídas por muitos projetos.

  • Centralize as contas de serviço em projetos separados.

    Esta abordagem coloca todas as contas de serviço da sua organização num pequeno número de projetos, o que pode facilitar a gestão das contas de serviço. No entanto, requer uma configuração adicional se anexar contas de serviço a recursos noutros projetos, o que permite que esses recursos usem a conta de serviço como respetiva identidade.

    Quando uma conta de serviço está num projeto e acede a um recurso noutro projeto, normalmente tem de ativar a API para esse recurso em ambos os projetos. Por exemplo, se tiver uma conta de serviço no projeto my-service-accounts e uma instância do Cloud SQL no projeto my-application, tem de ativar a API Cloud SQL em my-service-accounts e my-application.

    Por predefinição, pode criar até 100 contas de serviço num projeto. Se precisar de criar contas de serviço adicionais, peça um ajuste da quota.

Para saber como criar uma conta de serviço, consulte o artigo Criar contas de serviço.

Impeça a criação de contas de serviço

Para controlar melhor onde as contas de serviço são criadas, pode querer impedir a criação de contas de serviço em alguns projetos da sua organização.

Pode impedir a criação de contas de serviço aplicando a constraints/iam.disableServiceAccountCreation restrição da política da organização numa organização, projeto ou pasta.

Antes de aplicar esta restrição, considere as seguintes limitações:

Monitorize as contas de serviço

Ao longo do tempo, à medida que cria mais e mais contas de serviço, pode perder o controlo de qual conta de serviço é usada para que finalidade.

O nome a apresentar de uma conta de serviço é uma boa forma de captar informações adicionais sobre a conta de serviço, como a finalidade da conta de serviço ou uma pessoa de contacto para a conta. Para novas contas de serviço, pode preencher o nome a apresentar quando cria a conta de serviço. Para contas de serviço existentes, use o método serviceAccounts.update() para modificar o nome a apresentar.

Use contas de serviço com o Compute Engine

As instâncias do Compute Engine têm de ser executadas como contas de serviço para terem acesso a outros Trusted Cloud recursos. Para ajudar a proteger as suas instâncias do Compute Engine, considere o seguinte:

  • Pode criar instâncias no mesmo projeto com contas de serviço diferentes. Para alterar a conta de serviço de uma instância depois de criada, use o método instances.setServiceAccount.

  • Para configurar a autorização para contas de serviço anexadas, tem de configurar os âmbitos de acesso, além de configurar as funções do IAM.

  • Uma vez que as instâncias dependem das respetivas contas de serviço para ter acesso aos recursos doTrusted Cloud , evite eliminar contas de serviço quando ainda são usadas por instâncias em execução.

Para saber mais sobre a utilização de contas de serviço com o Compute Engine, consulte o artigo Contas de serviço na documentação do Compute Engine.

Identifique contas de serviço não usadas

Após algum tempo, pode ter contas de serviço nos seus projetos que já não usa.

As contas de serviço não usadas criam um risco de segurança desnecessário, pelo que recomendamos que desative as contas de serviço não usadas e, em seguida, elimine as contas de serviço quando tiver a certeza de que já não precisa delas. Pode usar as métricas de utilização da conta de serviço para acompanhar a utilização da conta de serviço e da chave.

Elimine contas de serviço

Antes de eliminar uma conta de serviço, desative a conta de serviço para se certificar de que não é necessária. As contas de serviço desativadas podem ser reativadas se ainda estiverem em utilização.

Depois de confirmar que uma conta de serviço não é necessária, pode eliminar a conta de serviço.

Recrie contas de serviço eliminadas

É possível eliminar uma conta de serviço e, em seguida, criar uma nova conta de serviço com o mesmo nome.

Quando elimina uma conta de serviço, as respetivas vinculações de funções não são eliminadas imediatamente. Em alternativa, as vinculações de funções listam a conta de serviço com o prefixo deleted:. Para ver um exemplo, consulte o artigo Políticas com responsáveis eliminados.

Se criar uma nova conta de serviço com o mesmo nome de uma conta de serviço eliminada recentemente, as vinculações antigas podem continuar a existir. No entanto, não se aplicam à nova conta de serviço, mesmo que ambas as contas tenham o mesmo endereço de email. Este comportamento ocorre porque é atribuído um ID exclusivo às contas de serviço na gestão de identidade e de acesso (IAM) no momento da criação. Internamente, todas as vinculações de funções são concedidas através destes IDs, e não através do endereço de email da conta de serviço. Por isso, quaisquer vinculações de funções que existiam para uma conta de serviço eliminada não se aplicam a uma nova conta de serviço que use o mesmo endereço de email.

Da mesma forma, se anexar uma conta de serviço a um recurso e, em seguida, eliminar a conta de serviço e criar uma nova conta de serviço com o mesmo nome, a nova conta de serviço não é anexada ao recurso.

Para evitar este comportamento inesperado, considere usar um nome novo e exclusivo para cada conta de serviço. Além disso, se eliminar acidentalmente uma conta de serviço, pode tentar anular a eliminação da conta de serviço em vez de criar uma nova conta de serviço.

Se não conseguir anular a eliminação da conta de serviço original e precisar de criar uma nova conta de serviço com o mesmo nome e as mesmas funções, tem de conceder as funções à nova conta de serviço. Para ver detalhes, consulte o artigo Políticas com responsáveis eliminados.

Se também precisar que a nova conta de serviço esteja associada aos mesmos recursos que a conta de serviço original, faça uma das seguintes ações:

O que se segue?