Crie e conceda funções a agentes de serviço

No Trusted Cloud by S3NS, os agentes de serviço ao nível do projeto, da pasta e da organização são criados automaticamente à medida que ativa e usa osTrusted Cloud serviços. Por vezes, estes agentes de serviço também recebem automaticamente funções que lhes permitem criar e aceder a recursos em seu nome.

Se necessário, também pode pedir Trusted Cloud para criar agentes de serviços ao nível do projeto, da pasta e da organização para um serviço antes de usar o serviço. Pedir Trusted Cloud para criar agentes de serviço permite-lhe conceder funções a agentes de serviço antes de usar um serviço. Se ainda não tiver sido criado um agente de serviço, não pode conceder funções ao agente de serviço.

Esta opção é útil se usar uma das seguintes estratégias para gerir as suas políticas de autorização:

  • Uma estrutura declarativa como o Terraform. Se a sua configuração do Terraform não incluir as funções dos agentes de serviço, essas funções são revogadas quando aplica a configuração. Ao criar agentes de serviço e conceder-lhes funções na sua configuração do Terraform, garante que estas funções não são revogadas.
  • Um sistema de políticas como código que armazena cópias das suas políticas de permissão atuais num repositório de código. Se permitir Trusted Cloud conceder funções aos agentes de serviço automaticamente, essas funções aparecem na sua política de permissão real, mas não na cópia armazenada da política de permissão. Para resolver esta inconsistência, pode revogar incorretamente estas funções. Ao criar agentes de serviço e atribuir-lhes funções de forma proativa, pode ajudar a evitar a deriva entre o repositório de código e as políticas de autorização reais.

Depois de acionar a criação de agentes de serviço, tem de conceder aos agentes de serviço as funções que normalmente lhes são concedidas automaticamente. Se não o fizer, alguns serviços podem não funcionar corretamente. Isto acontece porque não são concedidas funções automaticamente aos agentes de serviço criados a pedido de um utilizador.

Antes de começar

Funções necessárias

A criação de agentes de serviço não requer autorizações de IAM. No entanto, precisa de autorizações de IAM específicas para outras tarefas nesta página:

  • Para receber a autorização de que precisa para listar os serviços disponíveis e os respetivos pontos finais, peça ao seu administrador para lhe conceder a função do IAM Visualizador de utilização de serviços (roles/serviceusage.serviceUsageViewer) no projeto, na pasta ou na organização para os quais quer listar os serviços disponíveis. 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 serviceusage.services.list , que é necessária para listar os serviços disponíveis e os respetivos pontos finais.

    Também pode receber esta autorização com funções personalizadas ou outras funções predefinidas.

  • Para receber as autorizações necessárias para conceder acesso aos agentes de serviço, peça ao seu administrador que lhe conceda as seguintes funções do IAM no projeto, na pasta ou na organização aos quais está a conceder acesso:

    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.

    Estas funções predefinidas contêm as autorizações necessárias para conceder acesso aos agentes de serviço. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

    Autorizações necessárias

    São necessárias as seguintes autorizações para conceder acesso aos agentes de serviço:

    • Conceda aos agentes de serviço acesso a um projeto:
      • resourcemanager.projects.getIamPolicy
      • resourcemanager.projects.setIamPolicy
    • Conceda aos agentes de serviço acesso a uma pasta:
      • resourcemanager.folders.getIamPolicy
      • resourcemanager.folders.setIamPolicy
    • Conceda aos agentes de serviço acesso a uma organização:
      • resourcemanager.organizations.getIamPolicy
      • resourcemanager.organizations.setIamPolicy

    Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Identifique agentes de serviço a criar

Para identificar os agentes de serviço ao nível do projeto, da pasta e da organização que tem de pedir Trusted Cloud para criar, faça o seguinte:

  1. Crie uma lista dos serviços que usa e dos respetivos pontos finais da API. Para ver todos os serviços disponíveis e os respetivos pontos finais, use um dos seguintes métodos:

    Consola

    Aceda à página Biblioteca de APIs na Trusted Cloud consola.

    Aceder à biblioteca de APIs

    O ponto final da API é o nome do serviço indicado na secção Detalhes adicionais.

    gcloud

    O comando gcloud services list lista todos os serviços disponíveis para um projeto.

    Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

    • EXPRESSION: opcional. Uma expressão para filtrar os resultados. Por exemplo, a seguinte expressão filtra todos os serviços cujos nomes contêm googleapis.com, mas não contêm sandbox:

      name ~ googleapis.com AND name !~ sandbox

      Para ver uma lista de expressões de filtro, consulte gcloud topic filters.

    • LIMIT: opcional. O número máximo de resultados a apresentar. A predefinição é unlimited.

    Execute o seguinte comando:

    Linux, macOS ou Cloud Shell

    gcloud services list --available --filter='EXPRESSION' --limit=LIMIT

    Windows (PowerShell)

    gcloud services list --available --filter='EXPRESSION' --limit=LIMIT

    Windows (cmd.exe)

    gcloud services list --available --filter='EXPRESSION' --limit=LIMIT

    A resposta contém os nomes e os títulos de todos os serviços disponíveis. O ponto final da API é o valor no campo NAME.

    REST

    O método services.list da API Service Usage lista todos os serviços disponíveis para um projeto.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • RESOURCE_TYPE: o tipo de recurso para o qual quer listar os serviços disponíveis. Use projects, folders, ou organizations.
    • RESOURCE_ID: O ID do projeto, da pasta ou da organização para os quais quer listar os serviços disponíveis. Trusted CloudOs IDs dos projetos são strings alfanuméricas, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.
    • PAGE_SIZE: opcional. O número de serviços a incluir na resposta. O valor predefinido é 50 e o valor máximo é 200. Se o número de serviços for superior ao tamanho da página, a resposta contém um token de paginação que pode usar para obter a página seguinte de resultados.
    • NEXT_PAGE_TOKEN: opcional. O token de paginação devolvido numa resposta anterior deste método. Se for especificado, a lista de serviços começa onde o pedido anterior terminou.

    Método HTTP e URL:

    GET https://serviceusage.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/services?pageSize=PAGE_SIZE&pageToken=NEXT_PAGE_TOKEN

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém os nomes e os títulos de todos os serviços disponíveis para o recurso. Se o número de serviços disponíveis for superior ao tamanho da página, a resposta também contém um token de paginação.

    O ponto final da API é o valor no campo name.

  2. Na página Referência do agente de serviço, pesquise cada ponto final da API.

    Se o ponto final estiver listado na tabela, encontre todos os agentes de serviço para esse ponto final. Ignore todos os agentes de serviço cujo endereço de email contenha o marcador de posição IDENTIFIER. Esses agentes de serviço destinam-se a recursos específicos do serviço e não a projetos, pastas ou organizações.

    Para cada agente de serviço ao nível do projeto, da pasta e da organização, registe o seguinte:

    • O formato do endereço de email do agente de serviço.
    • A função que é concedida ao agente do serviço, se existir.

Acione a criação de um agente de serviço

Depois de saber que agentes de serviço tem de criar, pode pedir Trusted Cloud para os criar.

Quando pede ao Trusted Cloud para criar agentes de serviço, fornece-lhe um serviço e um recurso. Em seguida, Trusted Cloud cria todos os agentes de serviço para esse serviço e esse recurso.

gcloud

Para cada serviço para o qual precisa de criar agentes de serviço, faça o seguinte:

  1. Reveja os endereços de email dos agentes de serviço para o serviço. Use os marcadores de posição nos endereços de email para determinar para que recursos tem de criar agentes de serviço:

    Placeholder Onde criar agentes de serviço
    PROJECT_NUMBER Cada projeto onde vai usar o serviço
    FOLDER_NUMBER Cada pasta onde vai usar o serviço
    ORGANIZATION_NUMBER Cada organização onde vai usar o serviço

  2. Crie agentes de serviço para cada recurso.

    O comando gcloud beta services identity create cria todos os agentes de serviço para a API e o recurso especificados.

    Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

    • ENDPOINT: o ponto final da API para a qual quer criar um agente de serviço, por exemplo, aiplatform.googleapis.com.
    • RESOURCE_TYPE: o tipo de recurso para o qual quer criar um agente de serviço. Use project, folder ou organization.
    • RESOURCE_ID: o ID do projeto, da pasta ou da organização para a qual quer criar um agente do serviço. Trusted CloudOs IDs dos projetos são strings alfanuméricas, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.

      Pode criar agentes de serviço para um recurso de cada vez. Se precisar de criar agentes de serviço para vários recursos, execute o comando uma vez para cada recurso.

    Execute o seguinte comando:

    Linux, macOS ou Cloud Shell

    gcloud beta services identity create --service=ENDPOINT \
        --RESOURCE_TYPE=RESOURCE_ID

    Windows (PowerShell)

    gcloud beta services identity create --service=ENDPOINT `
        --RESOURCE_TYPE=RESOURCE_ID

    Windows (cmd.exe)

    gcloud beta services identity create --service=ENDPOINT ^
        --RESOURCE_TYPE=RESOURCE_ID

    A resposta contém o endereço de email do agente de serviço principal do serviço. Este endereço de email inclui o ID numérico do projeto, da pasta ou da organização para os quais criou agentes de serviço.

    Se o serviço não tiver um agente de serviço principal, a resposta não contém um endereço de email.

    Segue-se um exemplo de uma resposta para um serviço que tem um agente de serviço principal.

    Service identity created: service-232332569935@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com
    

  3. Opcional: registe o endereço de email do agente de serviço na resposta, se existir. Este endereço de email identifica o agente de serviço principal do serviço. Pode usar este identificador para conceder funções ao agente de serviço principal.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform. Para mais informações, consulte a Terraform documentação de referência do fornecedor.

Para cada serviço para o qual precisa de criar agentes de serviço, faça o seguinte:

  1. Reveja os endereços de email dos agentes de serviço para o serviço. Use os marcadores de posição nos endereços de email para determinar para que recursos tem de criar agentes de serviço:

    Placeholder Onde criar agentes de serviço
    PROJECT_NUMBER Cada projeto onde vai usar o serviço
    FOLDER_NUMBER Cada pasta onde vai usar o serviço
    ORGANIZATION_NUMBER Cada organização onde vai usar o serviço

  2. Crie agentes de serviço para cada recurso. Por exemplo, o código seguinte cria todos os agentes de serviço ao nível do projeto para a AI Platform:

data "google_project" "default" {
}

# Create all project-level aiplatform.googleapis.com service agents
resource "google_project_service_identity" "default" {
  provider = google-beta

  project = data.google_project.default.project_id
  service = "aiplatform.googleapis.com"
}

REST

Para cada serviço para o qual precisa de criar agentes de serviço, faça o seguinte:

  1. Reveja os endereços de email dos agentes de serviço para o serviço. Use os marcadores de posição nos endereços de email para determinar para que recursos tem de criar agentes de serviço:

    Placeholder Onde criar agentes de serviço
    PROJECT_NUMBER Cada projeto onde vai usar o serviço
    FOLDER_NUMBER Cada pasta onde vai usar o serviço
    ORGANIZATION_NUMBER Cada organização onde vai usar o serviço

  2. Crie agentes de serviço para cada recurso.

    O método services.generateServiceIdentity da API Service Usage cria todos os agentes de serviço para a API e o recurso especificados.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • RESOURCE_TYPE: o tipo de recurso para o qual quer criar um agente de serviço. Use projects, folders, ou organizations.
    • RESOURCE_ID: o ID do projeto, da pasta ou da organização para os quais quer criar agentes de serviço. Trusted CloudOs IDs dos projetos são strings alfanuméricas, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.

      Pode criar agentes de serviço para um recurso de cada vez. Se precisar de criar agentes de serviço para vários recursos, envie um pedido para cada recurso.

    • ENDPOINT: o ponto final da API para a qual quer criar um agente de serviço, por exemplo, aiplatform.googleapis.com.

    Método HTTP e URL:

    POST https://serviceusage.googleapis.com/v1beta1/RESOURCE_TYPE/RESOURCE_ID/services/ENDPOINT:generateServiceIdentity

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém um Operation que indica o estado da sua solicitação. Para verificar o estado da operação, use o método operations.get.

    As operações concluídas contêm o endereço de email do agente de serviço principal do serviço. Este endereço de email inclui o ID numérico do projeto, da pasta ou da organização para os quais criou agentes de serviço.

    Se o serviço não tiver um agente de serviço principal, a resposta não contém um endereço de email.

    Segue-se um exemplo de uma operação concluída para um serviço que tem um agente de serviço principal.

    {
      "name": "operations/finished.DONE_OPERATION",
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.api.serviceusage.v1beta1.ServiceIdentity",
        "email": "service-232332569935@gcp-sa-aiplatform.s3ns-system.iam.gserviceaccount.com",
        "uniqueId": "112245693826560101651"
      }
    }
    

  3. Opcional: registe o endereço de email do agente de serviço na resposta, se existir. Este endereço de email identifica o agente de serviço principal do serviço. Pode usar este identificador para conceder funções ao agente de serviço principal.

Conceda funções a agentes do serviço

Depois de Trusted Cloud criar os agentes de serviço necessários para os seus projetos, pastas e organizações, use os endereços de email dos agentes de serviço para lhes conceder funções.

Se pediu Trusted Cloud para criar agentes de serviço, tem de conceder a esses agentes de serviço as funções que normalmente lhes são concedidas automaticamente. Caso contrário, alguns serviços podem não funcionar corretamente. Isto acontece porque não são concedidas automaticamente funções aos agentes de serviço criados a pedido de um utilizador.

Para saber como identificar funções concedidas automaticamente, consulte Identifique agentes de serviço para criar.

Encontre o endereço de email do agente de serviço

Para encontrar o endereço de email de um agente de serviços, faça o seguinte:

gcloud

  1. Se ainda não o fez, encontre o formato do endereço de email do agente de serviço. Este formato está documentado na referência do agente de serviço.

  2. Substitua todos os marcadores de posição no endereço de email pelo número do projeto, da pasta ou da organização correspondente.

Em alternativa, se o agente de serviço for um agente de serviço principal, pode obter o respetivo endereço de email acionando a criação do agente de serviço para o serviço. O comando para acionar a criação do agente de serviço devolve o endereço de email do agente de serviço principal.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform. Para mais informações, consulte a Terraform documentação de referência do fornecedor.

  1. Se ainda não o fez, encontre o formato do endereço de email do agente de serviço. Este formato está documentado na referência do agente de serviço.

  2. Substitua todos os marcadores de posição no endereço de email por expressões que façam referência ao número do projeto, da pasta ou da organização adequado.

    Por exemplo, considere a seguinte situação:

    • O formato do endereço de email é service-PROJECT_NUMBER@gcp-sa-aiplatform-cc.s3ns-system.iam.gserviceaccount.com
    • O agente de serviço é para um projeto etiquetado como default

    Neste caso, o endereço de email do agente de serviço é o seguinte:

    service-${data.google_project.default.number}@gcp-sa-aiplatform-cc.s3ns-system.iam.gserviceaccount.com
    

Em alternativa, se um agente de serviço for o agente de serviço principal de um serviço, pode obter o respetivo endereço de email a partir do atributo email do recurso google_project_service_identity.

Por exemplo, se tiver um bloco google_project_service_identity com a etiqueta default, pode obter o endereço de email do agente de serviço principal do serviço através da seguinte expressão:

${google_project_service_identity.default.email}

REST

  1. Se ainda não o fez, encontre o formato do endereço de email do agente de serviço. Este formato está documentado na referência do agente de serviço.

  2. Substitua todos os marcadores de posição no endereço de email pelo número do projeto, da pasta ou da organização correspondente.

Em alternativa, se o agente de serviço for um agente de serviço principal, pode obter o respetivo endereço de email acionando a criação do agente de serviço para o serviço. O comando para acionar a criação do agente de serviço devolve o endereço de email do agente de serviço principal.

Conceda uma função ao agente do serviço

Depois de encontrar o endereço de email do agente de serviço, pode conceder-lhe uma função tal como concederia uma função a qualquer outro principal.

Consola

  1. Na Trusted Cloud consola, aceda à página IAM.

    Aceda ao IAM

  2. Selecione um projeto, uma pasta ou uma organização.

  3. Clique em Conceder acesso e, de seguida, introduza o endereço de email do agente de serviços.

  4. Selecione uma função a conceder na lista pendente.

  5. Opcional: adicione uma condição à função.

  6. Clique em Guardar. A função é concedida ao agente do serviço no recurso.

gcloud

O comando add-iam-policy-binding permite-lhe conceder rapidamente uma função a um principal.

Antes de usar qualquer um dos dados de comandos abaixo, faça as seguintes substituições:

  • RESOURCE_TYPE: O tipo de recurso ao qual quer gerir o acesso. Use projects, resource-manager folders ou organizations.

  • RESOURCE_ID: o ID do projeto, da pasta ou da organização. Trusted Cloud Os IDs dos projetos são alfanuméricos, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.

  • PRINCIPAL: um identificador do principal ou membro, que normalmente tem o seguinte formato: PRINCIPAL_TYPE:ID. Por exemplo, principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com ou principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. Para ver uma lista completa dos valores que PRINCIPAL pode ter, consulte o artigo Identificadores principais.

  • ROLE_NAME: o nome da função que quer revogar. Use um dos seguintes formatos:

    • Funções predefinidas: roles/SERVICE.IDENTIFIER
    • Funções personalizadas ao nível do projeto: projects/PROJECT_ID/roles/IDENTIFIER
    • Funções personalizadas ao nível da organização: organizations/ORG_ID/roles/IDENTIFIER

    Para ver uma lista de funções predefinidas, consulte o artigo Compreender as funções.

  • CONDITION: A condição a adicionar à associação de funções. Se não quiser adicionar uma condição, use o valor None. Para mais informações sobre as condições, consulte a vista geral das condições.

Execute o seguinte comando:

Linux, macOS ou Cloud Shell

gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
    --member=PRINCIPAL --role=ROLE_NAME \
    --condition=CONDITION

Windows (PowerShell)

gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
    --member=PRINCIPAL --role=ROLE_NAME `
    --condition=CONDITION

Windows (cmd.exe)

gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
    --member=PRINCIPAL --role=ROLE_NAME ^
    --condition=CONDITION

A resposta contém a política de IAM atualizada.

Terraform

Para saber como aplicar ou remover uma configuração do Terraform, consulte os comandos básicos do Terraform. Para mais informações, consulte a Terraform documentação de referência do fornecedor.

# Grant the AI Platform Custom Code Service Account the Vertex AI Custom
# Code Service Agent role (roles/aiplatform.customCodeServiceAgent)
resource "google_project_iam_member" "custom_code" {
  project = data.google_project.default.project_id
  role    = "roles/aiplatform.customCodeServiceAgent"
  member  = "serviceAccount:service-${data.google_project.default.number}@gcp-sa-aiplatform-cc.iam.gserviceaccount.com"
}

# Grant the primary aiplatform.googleapis.com service agent (AI Platform
# Service Agent) the Vertex AI Service Agent role
# (roles/aiplatform.serviceAgent)
resource "google_project_iam_member" "primary" {
  project = data.google_project.default.project_id
  role    = "roles/aiplatform.serviceAgent"
  member  = "serviceAccount:${google_project_service_identity.default.email}"
}

REST

Para conceder uma função com a API REST, use o padrão de leitura-modificação-escrita:

  1. Leia a política de permissão atual chamando getIamPolicy().

    O método getIamPolicy da API Resource Manager obtém a política de autorização de um projeto, uma pasta ou uma organização.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • API_VERSION: a versão da API a usar. Para projetos e organizações, use v1. Para pastas, use v2.
    • RESOURCE_TYPE: o tipo de recurso cuja política quer gerir. Use o valor projects, folders ou organizations.
    • RESOURCE_ID: o ID do Trusted Cloud projeto, da organização ou da pasta. Os IDs dos projetos são strings alfanuméricas, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.
    • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

    Método HTTP e URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:getIamPolicy

    Corpo JSON do pedido:

    {
      "options": {
        "requestedPolicyVersion": POLICY_VERSION
      }
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de autorização do recurso. Por exemplo:

    {
      "version": 1,
      "etag": "BwWKmjvelug=",
      "bindings": [
        {
          "role": "roles/owner",
          "members": [
            "principal://iam.googleapis.com/locations/global/workforcePools/my-pool/subject/my-user@example.com"
          ]
        }
      ]
    }
    

  2. Edite a política de autorização do recurso através de um editor de texto ou de forma programática para adicionar ou remover quaisquer responsáveis ou associações de funções. Por exemplo, pode adicionar uma nova associação de funções, remover uma associação de funções existente ou adicionar ou remover responsáveis de uma associação de funções existente.

  3. Escreva a política de permissão atualizada chamando setIamPolicy().

    O método setIamPolicy da API Resource Manager define a política no pedido como a nova política de permissão para o projeto, a pasta ou a organização.

    Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

    • API_VERSION: a versão da API a usar. Para projetos e organizações, use v1. Para pastas, use v2.
    • RESOURCE_TYPE: o tipo de recurso cuja política quer gerir. Use o valor projects, folders ou organizations.
    • RESOURCE_ID: o ID do Trusted Cloud projeto, da organização ou da pasta. Os IDs dos projetos são strings alfanuméricas, como my-project. Os IDs das pastas e das organizações são numéricos, como 123456789012.
    • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

    Método HTTP e URL:

    POST https://cloudresourcemanager.googleapis.com/API_VERSION/RESOURCE_TYPE/RESOURCE_ID:setIamPolicy

    Corpo JSON do pedido:

    {
      "policy": POLICY
    }
    

    Para enviar o seu pedido, expanda uma destas opções:

    A resposta contém a política de permissão atualizada.

O que se segue?