Configure a identidade do serviço para serviços

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

  1. Na Google Cloud consola, aceda ao Cloud Run:

    Aceda ao Cloud Run

  2. 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.

  3. 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.

  4. Clique no separador Segurança.

    imagem

    • 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.
  5. 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 formato LOCATION-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.

  1. 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
  2. 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.
  3. 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 recurso google_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:

resource "google_service_account" "cloudrun_service_identity" {
  account_id = "my-service-account"
}

Crie ou atualize um serviço do Cloud Run e inclua a sua conta de serviço:

resource "google_cloud_run_v2_service" "default" {
  name     = "id-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    service_account = google_service_account.cloudrun_service_identity.email
  }
}

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:

  1. 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

    1. Aceda à página Contas de serviço da Google Cloud consola:

      Aceda a Contas de serviço

    2. Selecione o endereço de email da conta de serviço que está a usar como identidade do serviço.

    3. Clique no separador Autorizações.

    4. Clique no botão Conceder acesso.

    5. 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.

    6. No menu pendente Selecionar uma função, selecione a função Contas de serviço > Utilizador da conta de serviço.

    7. 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 Run
    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto onde a conta de serviço está localizada
    • PRINCIPAL: a conta de implementação à qual está a adicionar a associação, usando o formato user|group|serviceAccount:email ou domain:domain, por exemplo:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
  2. 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 de service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    Consola

    1. Aceda à página Contas de serviço da Google Cloud consola:

      Aceda a Contas de serviço

    2. Selecione o endereço de email da conta de serviço que está a usar como identidade do serviço.

    3. Clique no separador Autorizações.

    4. Clique no botão Conceder acesso.

    5. Introduza o endereço de email do agente de serviço. Por exemplo: service-PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com.

    6. No menu pendente Selecionar uma função, selecione a função Contas de serviço > Criador de tokens de contas de serviço.

    7. 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 Run
    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto onde a conta de serviço está localizada
    • CLOUD_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.

  3. O projeto que contém esta conta de serviço requer que a política da organizaçãoiam.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 como true.

    Consola

    1. Aceda à página Políticas da organização na Google Cloud consola:

      Aceda às políticas da organização

    2. 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.

    3. Selecione a política desativar utilização da conta de serviço entre projetos.

    4. Clique em Gerir política.

    5. Em Origem da política, selecione Substituir política do elemento principal.

    6. Clique em Adicionar regra.

    7. Em Aplicação, selecione Desativada.

    8. 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?