Para alguns Trusted Cloud recursos, pode especificar uma conta de serviço gerida pelo utilizador que o recurso usa como identidade predefinida. Este processo é conhecido como anexar a conta de serviço ao recurso ou associar a conta de serviço ao recurso. Quando o código executado no recurso acede a Trusted Cloud serviços e recursos, usa a conta de serviço anexada ao recurso como a respetiva identidade. Por exemplo, se anexar uma conta de serviço a uma instância do Compute Engine e as aplicações na instância usarem uma biblioteca cliente para chamar Trusted Cloud APIs, essas aplicações usam automaticamente a conta de serviço anexada para autenticação e autorização.
Esta página descreve como configurar contas de serviço para que as possa anexar a recursos.
Antes de começar
Enable the IAM and Resource Manager APIs.
Certifique-se de que compreende como funcionam as contas de serviço no IAM.
Funções necessárias
Para receber a autorização de que
precisa para anexar uma conta de serviço a um recurso,
peça ao seu administrador para lhe conceder a função
Utilizador da conta de serviço (roles/iam.serviceAccountUser
)
do IAM na conta de serviço.
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Esta função predefinida contém a autorização
iam.serviceAccounts.actAs
, que é necessária para
anexar uma conta de serviço a um recurso.
Também pode receber esta autorização com funções personalizadas ou outras funções predefinidas.
Anexe uma conta de serviço a um recurso
Na maioria dos casos, tem de anexar uma conta de serviço a um recurso quando cria esse recurso. Depois de o recurso ser criado, não pode alterar a conta de serviço associada ao recurso. As instâncias do Compute Engine são uma exceção a esta regra. Pode alterar a conta de serviço associada a uma instância conforme necessário.
Antes de anexar uma conta de serviço a um recurso, tem de configurar a conta de serviço. Este processo varia consoante a conta de serviço e o recurso estejam no mesmo projeto ou em projetos diferentes. Depois de configurar a conta de serviço, pode criar o recurso e anexar a conta de serviço a esse recurso.
Configure para um recurso no mesmo projeto
Antes de anexar uma conta de serviço a outro recurso no mesmo projeto, conceda funções à conta de serviço para que possa aceder aos recursos adequados, tal como concederia funções a qualquer outro principal.
Configure para um recurso num projeto diferente
Em alguns casos, pode ter de anexar uma conta de serviço a um recurso que se encontra num projeto diferente. Por exemplo, se criar todas as suas contas de serviço num único projeto, pode ter de anexar uma delas a um novo recurso num projeto diferente.
Antes de anexar uma conta de serviço a um recurso noutro projeto, faça o seguinte:
- No projeto onde a conta de serviço está localizada, siga os passos indicados nesta página para permitir que as contas de serviço sejam anexadas em vários projetos.
- Identifique o projeto onde vai criar o recurso.
Identifique o tipo de recurso ao qual vai associar a conta de serviço, bem como o serviço proprietário desse tipo de recurso.
Por exemplo, se estiver a criar uma subscrição do Pub/Sub, o Pub/Sub é o serviço proprietário do recurso.
Encontre o endereço de email do agente de serviço para o serviço.
Os diferentes serviços usam diferentes agentes de serviço. Para obter detalhes, consulte o artigo Agentes de serviços.
Conceda a função de criador de tokens de conta de serviço (
roles/iam.serviceAccountTokenCreator
) aos agentes de serviço:Consola
Na Trusted Cloud consola, aceda à página Contas de serviço.
Selecione o projeto proprietário da conta de serviço que vai anexar a um recurso.
Clique no endereço de email da conta de serviço que vai anexar a um recurso.
Aceda ao separador Autorizações e encontre a secção Membros com acesso a esta conta de serviço.
Clique em
Conceder acesso e, de seguida, introduza o endereço de email do agente do serviço.Clique em Selecionar uma função, escreva
Service Account Token Creator
e clique na função.Clique em Guardar para guardar as alterações.
Opcional: se precisar de conceder a função a outro agente de serviço, repita os passos anteriores.
gcloud
Use o comando
gcloud iam service-accounts add-iam-policy-binding
:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \ --member=serviceAccount:SERVICE_AGENT_EMAIL \ --role=roles/iam.serviceAccountTokenCreator
Substitua os seguintes valores:
SERVICE_ACCOUNT_NAME
: O nome da conta de serviço gerida pelo utilizador que está a anexar a um recurso.PROJECT_ID
: o ID do projeto onde se encontra a conta de serviço gerida pelo utilizador.SERVICE_AGENT_EMAIL
: o endereço de email do agente do serviço.
O comando imprime a política de autorização atualizada para a conta de serviço gerida pelo utilizador.
Opcional: se precisar de conceder a função a outro agente de serviço, execute o comando novamente.
REST
Para conceder esta função, use o padrão de leitura-modificação-escrita para atualizar a política de autorização para a sua conta de serviço gerida pelo utilizador.
Primeiro, leia a política de autorização para a conta de serviço gerida pelo utilizador:
O método
projects.serviceAccounts.getIamPolicy
devolve a política de autorização para a conta de serviço.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, comomy-project
.-
USER_SA_NAME
: o nome da conta de serviço gerida pelo utilizador que está a associar a um recurso.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com:getIamPolicy
Corpo JSON do pedido:
{ "requestedPolicyVersion": 3 }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.s3ns-system.iam.gserviceaccount.com" ] } ] }
Em seguida, modifique a política de permissão para conceder a função de criador de tokens de contas de serviço ao agente do serviço.
{ "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com" ] } ] }
Substitua o seguinte:
SERVICE_AGENT_EMAIL
: o endereço de email do agente do serviçoSERVICE_ACCOUNT_NAME
: o nome da conta de serviço gerida pelo utilizador.PROJECT_ID
: o ID do projeto onde se encontra a conta de serviço gerida pelo utilizador.
Por último, escreva a política de permissão atualizada:
O método
projects.serviceAccounts.setIamPolicy
atualiza a política de autorização para a sua conta de serviço.Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:
PROJECT_ID
: O ID do seu Trusted Cloud projeto. Os IDs dos projetos são strings alfanuméricas, comomy-project
.-
USER_SERVICE_ACCOUNT_NAME
: O nome da conta de serviço gerida pelo utilizador que está a associar a um recurso. -
SERVICE_AGENT_EMAIL
: o endereço de email do agente de serviço que vai criar tokens de acesso para a sua conta de serviço gerida pelo utilizador.
Método HTTP e URL:
POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com:setIamPolicy
Corpo JSON do pedido:
{ "policy": { "version": 1, "etag": "BwWl3KCTUMY=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com" ] } ] } }
Para enviar o seu pedido, expanda uma destas opções:
Deve receber uma resposta JSON semelhante à seguinte:
{ "version": 1, "etag": "BwWo331TkHE=", "bindings": [ { "role": "roles/iam.serviceAccountTokenCreator", "members": [ "serviceAccount:SERVICE_AGENT_EMAIL" ] }, { "role": "roles/iam.serviceAccountUser", "members": [ "serviceAccount:my-service-account@my-project.s3ns-system.iam.gserviceaccount.com" ] } ] }
Associe a conta de serviço ao novo recurso
Depois de configurar a conta de serviço gerida pelo utilizador, pode criar um novo recurso e anexar a conta de serviço a esse recurso. Certifique-se de que cria o novo recurso no projeto adequado.
Consulte as instruções para o tipo de recurso que quer criar:
Anexar uma conta de serviço ao criar um recurso | |
---|---|
Compute Engine | |
Google Kubernetes Engine | |
Pub/Sub | Subscrições |
Depois de criar o recurso e anexar a conta de serviço a esse recurso, pode conceder funções à conta de serviço para que possa aceder aos recursos adequados. Este processo é igual ao de conceder uma função a qualquer outro principal.
Para saber como conceder funções, consulte o artigo Conceder, alterar e revogar o acesso a recursos.
Anexe uma conta de serviço a um recurso noutro projeto
Por predefinição, não pode criar uma conta de serviço num projeto e anexá-la a um recurso noutro projeto. Se quiser manter todas as suas contas de serviço num único projeto, tem de atualizar a política da organização para esse projeto.
Ative a associação de contas de serviço a vários projetos
Para permitir que os utilizadores anexem contas de serviço num projeto a recursos noutro projeto, verifique as seguintes restrições booleanas na política da organização para o projeto onde as suas contas de serviço estão localizadas:
Certifique-se de que a
iam.disableCrossProjectServiceAccountUsage
restrição booleananão é aplicada ao projeto.Esta restrição booleana controla se pode anexar uma conta de serviço a um recurso noutro projeto. É aplicada por predefinição e só pode ser configurada ao nível do projeto e não ao nível da pasta ou da organização.
Quando esta restrição não é aplicada, o IAM adiciona uma hipoteca do projeto que impede a eliminação do projeto. Esta hipoteca tem a origem
iam.googleapis.com/cross-project-service-accounts
. Desaconselhamos vivamente a eliminação desta hipoteca.Recomendado: certifique-se de que a restrição booleana
iam.restrictCrossProjectServiceAccountLienRemoval
é aplicada ao projeto.Esta restrição booleana garante que os responsáveis podem remover a caução do projeto apenas se tiverem a autorização
resourcemanager.projects.updateLiens
ao nível da organização. Se esta restrição não for aplicada, os responsáveis podem remover o ónus do projeto se tiverem esta autorização ao nível do projeto.
Para saber como ver ou alterar uma restrição booleana numa política da organização, consulte o artigo Criar e gerir políticas da organização.
Desative a associação de contas de serviço em vários projetos
Se ativou anteriormente a associação de contas de serviço a vários projetos, recomendamos vivamente que não desative esta funcionalidade, especialmente em ambientes de produção.
Especificamente, no projeto onde as suas contas de serviço estão localizadas, não deve fazer nenhuma destas alterações:
- Não atualize a política da organização do projeto para aplicar a restrição booleana
iam.disableCrossProjectServiceAccountUsage
. - Não atualize a política da organização do projeto para não aplicar a restrição booleana
iam.restrictCrossProjectServiceAccountLienRemoval
. - Não remova a restrição do projeto com a origem
iam.googleapis.com/cross-project-service-accounts
, o que impede a eliminação do projeto. - Não elimine o projeto.
Se quiser aceitar o risco de desativar esta funcionalidade, pode reduzir o risco desativando as contas de serviço que está a usar em todos os projetos e, em seguida, monitorizando o seu ambiente Trusted Cloud para detetar problemas. Se detetar problemas, pode reativar as contas de serviço. Se não vir problemas, significa que não tem Trusted Cloud recursos que dependam de uma conta de serviço num projeto diferente.
Registos de auditoria para anexar contas de serviço
Quando um principal usa a autorização iam.serviceAccounts.actAs
para anexar uma conta de serviço a um recurso, o IAM gera um registo de auditoria. Este registo de auditoria contém as seguintes informações:
- O endereço de email do principal que anexou a conta de serviço ao recurso
- Detalhes sobre a conta de serviço que foi anexada ao recurso
Para ver uma lista de recursos aos quais pode anexar contas de serviço, consulte a secção Anexe a conta de serviço ao novo recurso nesta página.
Para ver um exemplo deste tipo de registo de auditoria, consulte Registos para usar a autorização iam.serviceAccounts.actAs
. Para saber mais sobre os registos de auditoria em geral, consulte a vista geral dos registos de auditoria do Cloud.
O que se segue?
- Saiba como anexar uma conta de serviço a uma instância do Compute Engine.
- Reveja e aplique as práticas recomendadas para proteger as contas de serviço.
- Saiba mais sobre o registo de auditoria para o IAM.