Um serviço ou uma revisão do Cloud Run tem uma identidade de serviço que é usada como a conta autenticada para aceder às Google Cloud APIs a partir do contentor da instância do Cloud Run. Para saber mais sobre a identidade do serviço, consulte o guia Introdução à identidade do serviço.
Como a identidade do serviço é usada
No Cloud Run, a identidade do serviço é uma conta de serviço que é um recurso e uma conta principal.
- Identidade do serviço como recurso: para anexar uma conta de serviço como identidade do serviço, a conta do implementador tem de ter acesso ao recurso de identidade do serviço. Determinadas operações, como a criação ou a atualização de um serviço ou uma revisão, requerem que a conta do implementador tenha autorizações no recurso de identidade do serviço.
- Identidade de serviço como principal: para aceder às Google Cloud APIs a partir de um serviço ou uma revisão do Cloud Run, tem de conceder à identidade de serviço as funções ou as autorizações necessárias para as operações que quer que o seu serviço ou revisão execute.
A secção seguinte aborda as funções necessárias para conceder acesso à conta de implementação no recurso de identidade do serviço e conceder as funções ou as autorizações de que o principal da conta de serviço precisa.
Funções necessárias
O utilizador ou o administrador tem de conceder funções e autorizações de IAM para a conta de implementação e a identidade do serviço.
Clique para ver as funções necessárias para a conta do implementador
Para receber as autorizações necessárias para anexar uma conta de serviço como a identidade do serviço no serviço ou na revisão, o utilizador ou o administrador tem de conceder à conta de implementação a função Utilizador da conta de serviço (roles/iam.serviceAccountUser
) na conta de serviço que é usada como a identidade do serviço.
Esta função predefinida contém a autorização iam.serviceAccounts.actAs
, que é necessária para anexar uma conta de serviço ao serviço ou à revisão. Também pode obter esta autorização
configurando funções personalizadas
ou usando outras funções predefinidas.
Para obter instruções sobre como conceder esta função à conta do implementador na identidade do serviço, consulte autorizações de implementação. Se a conta de serviço estiver num projeto diferente do serviço ou da revisão do Cloud Run, o utilizador ou o administrador também tem de configurar uma função de IAM para o agente do serviço do Cloud Run e configurar uma política da organização. Consulte a secção sobre como usar contas de serviço noutros projetos para ver mais detalhes.
Clique para ver as funções necessárias para a identidade do serviço
Para permitir que a identidade do serviço aceda às Google Cloud APIs do Cloud Run, o administrador ou o utilizador tem de conceder à identidade do serviço as autorizações ou as funções necessárias para as operações que quer realizar. Para aceder a bibliotecas de cliente do Google Cloud específicas, consulte a documentação do serviço. Google Cloud Google Cloud
Se um serviço ou uma revisão do Cloud Run não aceder a outros serviços, não precisa de conceder à identidade do serviço funções nem autorizações, e pode usar a conta de serviço predefinida que foi atribuída ao projeto. Google Cloud
Receba recomendações para criar contas de serviço dedicadas
Quando cria uma nova conta de serviço a partir da consola Google Cloud , o passo opcional "Conceder a esta conta de serviço acesso ao projeto" destina-se a qualquer acesso adicional necessário. Por exemplo, um serviço do Cloud Run pode invocar outro serviço privado do Cloud Run ou aceder a uma base de dados do Cloud SQL, ambos os quais requerem funções específicas do IAM. Consulte a documentação sobre a gestão do acesso para mais informações.
O serviço de recomendações também fornece automaticamente recomendações para criar contas de serviço dedicadas com o conjunto mínimo de autorizações necessárias.
Configure a identidade do serviço
Se ainda não criou uma conta de serviço, pode criar uma conta de serviço gerida pelo utilizador na IAM ou no Cloud Run.
Para configurar a identidade do serviço, use a Google Cloud consola, a CLI gcloud, a API (YAML) quando cria um novo serviço ou implementa uma nova revisão, ou o Terraform:
Consola
Na Google Cloud consola, aceda ao Cloud Run:
Selecione Serviços no menu e clique em Implementar contentor para configurar um novo serviço. Se estiver a configurar um serviço existente, clique no serviço e, de seguida, em Editar e implementar nova revisão.
Se estiver a configurar um novo serviço, preencha a página de definições iniciais do serviço e, de seguida, clique em Contentores, volumes, rede, segurança para expandir a página de configuração do serviço.
Clique no separador Segurança.
- Clique no menu pendente Conta de serviço e selecione uma conta de serviço existente ou clique em Criar uma nova conta de serviço se aplicável.
Clique em Criar ou Implementar.
gcloud
Se ainda não tiver criado uma conta de serviço, pode criar uma conta de serviço gerida pelo utilizador na IAM.
Pode atualizar um serviço existente para ter uma nova conta de serviço através do seguinte comando:
gcloud run services update SERVICE --service-account SERVICE_ACCOUNT
Substitua o seguinte:
- SERVICE: o nome do seu serviço.
- SERVICE_ACCOUNT: a conta de serviço associada à nova identidade: este valor é o endereço de email da conta de serviço, por exemplo,
example@myproject.iam.gserviceaccount.com
.
Também pode definir uma conta de serviço durante a implementação com o comando:
gcloud run deploy --image IMAGE_URL --service-account SERVICE_ACCOUNT
Substitua o seguinte:
- IMAGE_URL: uma referência à imagem do contentor, por exemplo,
us-docker.pkg.dev/cloudrun/container/hello:latest
. Se usar o Artifact Registry, o repositório REPO_NAMEtem de já estar criado. O URL segue o formatoLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
. - SERVICE_ACCOUNT: a conta de serviço associada à nova identidade: este valor é o endereço de email da conta de serviço, por exemplo,
example@myservice.iam.gserviceaccount.com
.
YAML
Se ainda não tiver criado uma conta de serviço, pode criar uma conta de serviço gerida pelo utilizador na IAM.
Se estiver a criar um novo serviço, ignore este passo. Se estiver a atualizar um serviço existente, transfira a respetiva configuração YAML:
gcloud run services describe SERVICE --format export > service.yaml
Atualize o atributo
serviceAccountName:
:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: spec: serviceAccountName: SERVICE_ACCOUNT
Substitua o seguinte:
- SERVICE: o nome do seu serviço do Cloud Run.
- SERVICE_ACCOUNT: a conta de serviço associada à nova identidade. Este valor é o endereço de email da conta de serviço. Por exemplo,
SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
.
Crie ou atualize o serviço com o seguinte comando:
gcloud run services replace service.yaml
Terraform
Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform.
Adicione o seguinte a um recursogoogle_cloud_run_v2_service
na sua configuração do Terraform:Para criar uma conta de serviço, adicione o seguinte recurso ao seu ficheiro main.tf
existente:
Crie ou atualize um serviço do Cloud Run e inclua a sua conta de serviço:
Use contas de serviço noutros projetos
Se configurar uma conta de serviço a partir de um Google Cloud projeto diferente do recurso do Cloud Run, faça o seguinte:
O administrador ou o utilizador tem de conceder a função de utilizador da conta de serviço (
roles/iam.serviceAccountUser
) na conta de serviço que usa como identidade de serviço.Consola
Aceda à página Contas de serviço da Google Cloud consola:
Selecione o endereço de email da conta de serviço que está a usar como identidade do serviço.
Clique no separador Autorizações.
Clique no botão
Conceder acesso.Introduza o endereço de email da conta de implementação que corresponde ao principal ao qual está a conceder a função de administrador ou programador.
No menu pendente Selecionar uma função, selecione a função Contas de serviço > Utilizador da conta de serviço.
Clique em Guardar.
gcloud
Use o comando
gcloud iam service-accounts add-iam-policy-binding
, substituindo as variáveis realçadas pelos valores adequados:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member="PRINCIPAL" \ --role="roles/iam.serviceAccountUser"
Substitua o seguinte:
SERVICE_ACCOUNT_NAME
: o nome da conta de serviço à qual está a anexar o recurso do Cloud RunSERVICE_ACCOUNT_PROJECT_ID
: o ID do projeto onde a conta de serviço está localizadaPRINCIPAL: a conta de implementação à qual está a adicionar a associação, usando o formato
user|group|serviceAccount:email
oudomain:domain
, por exemplo:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
O utilizador ou o administrador tem de conceder ao agente de serviço do recurso do Cloud Run a função Criador de tokens da conta de serviço (
roles/iam.serviceAccountTokenCreator
) na conta de serviço que usa como identidade de serviço. O agente de serviço segue o formato deservice-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
.Consola
Aceda à página Contas de serviço da Google Cloud consola:
Selecione o endereço de email da conta de serviço que está a usar como identidade do serviço.
Clique no separador Autorizações.
Clique no botão
Conceder acesso.Introduza o endereço de email do agente de serviço. Por exemplo:
service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com
.No menu pendente Selecionar uma função, selecione a função Contas de serviço > Criador de tokens de contas de serviço.
Clique em Guardar.
gcloud
Use o comando
gcloud iam service-accounts add-iam-policy-binding
:gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \ --member="serviceAccount:service-CLOUD_RUN_RESOURCE_PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com" \ --role="roles/iam.serviceAccountTokenCreator"
Substitua o seguinte:
SERVICE_ACCOUNT_NAME
: o nome da conta de serviço à qual está a anexar o recurso do Cloud RunSERVICE_ACCOUNT_PROJECT_ID
: o ID do projeto onde a conta de serviço está localizadaCLOUD_RUN_RESOURCE_PROJECT_NUMBER
: o número do projeto onde o Cloud Run está localizado
O comando imprime a política de autorização atualizada para a conta de serviço gerida pelo utilizador.
O projeto que contém esta conta de serviço requer que a política da organização
iam.disableCrossProjectServiceAccountUsage
seja definida como falsa ou não aplicada ao nível da pasta ou herdada das definições ao nível do projeto. Por predefinição, esta opção está definida comotrue
.Consola
Aceda à página Políticas da organização na Google Cloud consola:
No selecionador de projetos, selecione a organização e o projeto para os quais quer desativar a utilização de contas de serviço entre projetos.
Selecione a política desativar utilização da conta de serviço entre projetos.
Clique em Gerir política.
Em Origem da política, selecione Substituir política do elemento principal.
Clique em Adicionar regra.
Em Aplicação, selecione Desativada.
Para aplicar a política, clique em Definir política.
gcloud
No projeto que tem a conta de serviço, certifique-se de que a
iam.disableCrossProjectServiceAccountUsage
restrição da política da organização não é aplicada. Esta restrição é aplicada por predefinição.Para desativar esta restrição de política da organização, execute o seguinte comando:
gcloud resource-manager org-policies disable-enforce iam.disableCrossProjectServiceAccountUsage --project=SERVICE_ACCOUNT_PROJECT_ID
Substitua SERVICE_ACCOUNT_PROJECT_ID pelo ID do projeto que contém a conta de serviço.
Pode aplicar associações de funções diretamente ao recurso da conta de serviço ou herdar de níveis superiores na hierarquia de recursos.
O que se segue?
- Para mais informações sobre contas de serviço, consulte os guias de contas de serviço IAM e contas de serviço geridas pelo utilizador.
- Se o seu serviço, tarefa ou conjunto de trabalhadores do Cloud Run aceder a APIs Google ou Google Cloud serviços, tem de configurar a sua conta de serviço como a identidade do serviço. Saiba mais.