Como gerenciar a representação de uma conta de serviço

Nesta página, descrevemos como permitir que principais e recursos representem ou ajam como uma conta de serviço de gerenciamento de identidade e acesso (IAM, na sigla em inglês). Ela também explica como ver quais principais podem representar uma determinada conta de serviço do IAM.

Antes de começar

Entenda como as contas de serviço funcionam no IAM.

Como permitir que os principais representem contas de serviço

Há vários papéis predefinidos que permitem que um principal represente uma conta de serviço:

  • Usuário da conta de serviço (roles/iam.serviceAccountUser): permite que os principais acessem indiretamente todos os recursos que a conta de serviço pode acessar. Por exemplo, se um principal tiver o papel de usuário da conta de serviço em uma conta de serviço e a conta de serviço tiver o papel de administrador do Cloud SQL (roles/cloudsql.admin) no projeto, o principal poderá representar a conta de serviço para criar um instância do Cloud SQL.

    Esse papel também permite que os principais anexem uma conta de serviço a um recurso, conforme explicado nesta página.

  • Criador de token de conta de serviço (roles/iam.serviceAccountTokenCreator): os principais podem representar contas de serviço para criar tokens de acesso OAuth 2.0, assinar JSON Web Tokens (JWTs) e assinar blobs binários que podem ser usados para autenticação. Consulte os detalhes em Como criar credenciais da conta de serviço de curta duração.

  • Usuário de identidade de carga de trabalho (roles/iam.workloadIdentityUser): permite que os principais representem contas de serviço das cargas de trabalho do GKE.

Como alternativa, é possível conceder um papel predefinido diferente, ou um papel personalizado, que inclua as mesmas permissões desses papéis.

As seções a seguir descrevem como conceder esses papéis em projetos, pastas e organizações, e como concedê-los em contas de serviço individuais. Escolha o nível com base na quantidade de acesso que você quer conceder:

Como permitir que um principal represente várias contas de serviço

Para permitir que um principal represente todas as contas de serviço criadas em um projeto, pasta ou organização, conceda um papel no projeto, pasta ou organização:

Console

  1. No Console do Cloud, acesse a página IAM.

    Acessar a página do IAM

  2. No seletor de projetos na parte superior da página, escolha o projeto, a pasta ou a organização em que você quer conceder o papel.

  3. Clique em Add.

  4. Insira o endereço de e-mail do principal.

  5. Selecione um papel que permita ao principal representar as contas de serviço. Veja a lista de papéis para representar contas de serviço.

  6. Clique em Salvar.

gcloud

Para conceder a um principal um papel que permita a representação de uma conta de serviço, modifique a política do IAM para uo projeto, para a pasta ou para a organização.

  1. Leia a política do IAM para o recurso:

    gcloud resource get-iam-policy resource-id \
        --format=json > policy.json
    

    Substitua os seguintes valores:

    • resource: o tipo de recurso em que você quer definir a política. Esse valor precisa ser um dos seguintes: projects, resource-manager folders ou organizations.
    • resource-id: o ID do recurso em que você quer definir a política.

    O comando armazena a política do recurso em um arquivo policy.json.

    Se uma política já estiver definida no recurso, o arquivo policy.json será semelhante ao seguinte:

    {
      "bindings": [
        {
          "members": [
            "user:hollis@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    

    Se não houver política no recurso, o arquivo policy.json conterá apenas o etag padrão.

    Quando não houver política, crie-a manualmente usando o JSON nas etapas a seguir como um modelo.

  2. Modifique a política para conceder os papéis apropriados aos principais. Para conceder um papel, siga um destes procedimentos:

    • Se uma vinculação para o papel não existir, adicione um objeto à matriz bindings que indica o papel que você quer conceder e o principal a quem você quer conceder.
    • Se já houver uma vinculação para o papel, adicione o novo principal à lista de principais existentes. Se a política incluir vinculações de papéis condicionais, verifique também se a vinculação tem as condições apropriadas antes de adicionar o principal.

    Se a matriz bindings ainda não existir, é possível criá-la.

    Exemplo

    Para conceder o papel do usuário da conta de serviço (roles/iam.serviceAccountUser) a robin@example.com, altere o exemplo mostrado na etapa anterior da seguinte maneira:

    {
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/owner",
          "members": [
            "user:hollis@example.com"
          ]
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    
  3. Grave a política atualizada:

    gcloud resource set-iam-policy resource-id \
        policy-file
    

    Substitua os seguintes valores:

    • resource: o tipo de recurso em que você quer definir a política. Esse valor precisa ser um dos seguintes: projects, resource-manager folders ou organizations.
    • resource-id: o ID do recurso em que você quer definir a política.
    • policy-file: o caminho para o arquivo que contém a política atualizada.

    O comando imprime a política atualizada com um valor etag atualizado.

REST

Para conceder um papel usando a API REST do Resource Manager, você precisa ler a política atual do IAM para seu projeto, pasta ou organização, modificar a política para conceder os papéis desejados e gravar a política atualizada.

Leia a política do IAM para o recurso.

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

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • API_VERSION: a versão da API a ser usada. Para projetos e organizações, use v1. Para pastas, use v2.
  • RESOURCE_TYPE: o tipo de recurso com a política que você quer gerenciar. Use o valor projects, folders ou organizations.
  • RESOURCE_ID: seu projeto do Google Cloud, a organização ou o ID da pasta. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos de pastas e organizações são numéricos, como 123456789012.
  • POLICY_VERSION: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política de IAM do projeto. Exemplo:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

Quando não houver política, a resposta conterá apenas o padrão etag. Se você receber essa resposta, adicione um campo version, definido como 3 e um campo bindings, definidos como uma matriz vazia.

Modificar a política para conceder os papéis apropriados aos principais.

Para conceder um papel, siga um destes procedimentos:

  • Se uma vinculação para o papel não existir, adicione um objeto à matriz bindings que indique o papel que você quer conceder e o principal a quem você quer conceder.
  • Se já houver uma vinculação para o papel, adicione o novo principal à lista de existentes.

Exemplo:

Para conceder o papel do usuário da conta de serviço (roles/iam.serviceAccountUser) a robin@example.com, altere o exemplo mostrado na etapa anterior da seguinte maneira:

{
  "version": 1,
  "etag": "BwUqLaVeua8=",
  "bindings": [
    {
      "role": "roles/iam.serviceAccountUser",
      "members": [
        "user:robin@example.com"
      ]
    },
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

Grave a política atualizada.

O método setIamPolicy da API Resource Manager define a política na solicitação como a nova política do IAM para o projeto, a pasta ou a organização.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • API_VERSION: a versão da API a ser usada. Para projetos e organizações, use v1. Para pastas, use v2.
  • RESOURCE_TYPE: o tipo de recurso com a política que você quer gerenciar. Use o valor projects, folders ou organizations.
  • RESOURCE_ID: seu projeto do Google Cloud, a organização ou o ID da pasta. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos de pastas e organizações são numéricos, como 123456789012.
  • POLICY: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.

    Por exemplo, para definir a política mostrada na etapa anterior, substitua POLICY pelo seguinte:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/owner",
          "members": [
            "user:owner@example.com"
          ]
        }
      ]
    }
    

Método HTTP e URL:

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

Corpo JSON da solicitação:

{
  "policy": POLICY
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política atualizada.

Como permitir que um principal represente uma única conta de serviço

Para permitir que um principal represente uma única conta de serviço, conceda um papel na conta de serviço:

Console

  1. No Console do Cloud, acesse a página Contas de serviço:

    Acessar a página "Contas de Serviço"

  2. Selecione um projeto.

  3. Clique no endereço de e-mail da conta de serviço que você quer permitir que o principal personifique.

  4. Clique na guia Permissões..

  5. Em Principais com acesso a esta conta de serviço, clique em Conceder acesso.

  6. Insira o endereço de e-mail do principal.

  7. Selecione um papel que conceda ao principal permissão para representar as contas de serviço. Veja a lista de papéis para representar contas de serviço.

  8. Clique em Salvar para aplicar o papel ao principal.

Para conceder papéis em várias contas de serviço, repita essas etapas para cada uma.

gcloud

Para conceder a um principal um papel que permita a representação de uma conta de serviço, modifique a política do IAM da conta de serviço.

  1. Use o comando service-accounts get-iam-policy para ler a política atual:

    gcloud iam service-accounts get-iam-policy sa-id \
        --format=json > policy.json
    

    Substitua os seguintes valores:

    • sa-id: o ID da sua conta de serviço. Pode ser o endereço de e-mail da conta de serviço no formato sa-name@project-id.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

    O comando armazena a política da conta de serviço em um arquivo policy.json.

    Se uma política já estiver definida na conta de serviço, o arquivo policy.json será semelhante ao seguinte:

    {
      "bindings": [
        {
          "members": [
            "user:hollis@example.com"
          ],
          "role": "roles/iam.serviceAccountAdmin"
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    

    Se não houver uma política definida na conta de serviço, o arquivo policy.json conterá apenas o etag padrão.

    Quando não houver política, crie-a manualmente usando o JSON nas etapas a seguir como um modelo.

  2. Em um editor de texto, modifique a matriz de vinculações no arquivo policy.json para conceder os papéis apropriados aos seus principais. Para conceder um papel, siga um destes procedimentos:

    • Se uma vinculação para o papel não existir, adicione um novo objeto à matriz bindings que defina o papel que você quer conceder e o principal a quem você quer conceder.
    • Se já houver uma vinculação para o papel, adicione o novo principal à lista de principais existentes. Se a política incluir vinculações de papéis condicionais, verifique também se a vinculação tem as condições apropriadas antes de adicionar o principal.

    Se a matriz bindings ainda não existir, é possível criá-la.

    Exemplo

    Para conceder o papel do usuário da conta de serviço (roles/iam.serviceAccountUser) a robin@example.com, altere o exemplo mostrado na etapa anterior da seguinte maneira:

    {
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/iam.serviceAccountAdmin",
          "members": [
            "user:hollis@example.com"
          ]
        }
      ],
      "etag": "BwUqLaVeua8=",
      "version": 1
    }
    
  3. Use o comando service-accounts set-iam-policy para gravar a política atualizada:

    gcloud iam service-accounts set-iam-policy sa-id \
        policy-file
    

    Substitua os seguintes valores:

    • sa-id: o ID da sua conta de serviço. Pode ser o endereço de e-mail da conta de serviço no formato sa-name@project-id.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.
    • policy-file: o caminho para o arquivo que contém a política atualizada.

    O comando imprime a política atualizada com um valor etag atualizado.

REST

Para conceder um papel usando a API REST do IAM, você precisa ler a política atual do IAM da conta de serviço, modificá-la para conceder os papéis desejados e, em seguida, gravar a política atualizada.

Leia a política do IAM da conta de serviço.

O método serviceAccounts.getIamPolicy recebe a política do IAM de uma conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de e-mail da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • POLICY_VERSION: a versão da política a ser retornada. As solicitações precisam especificar a versão mais recente da política, que é a versão 3 da política. Para saber mais detalhes, consulte Como especificar uma versão da política ao receber uma política.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política do IAM da conta de serviço. Exemplo:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

Quando não houver política, a resposta conterá apenas o padrão etag. Se você receber essa resposta, adicione um campo version, definido como 3 e um campo bindings, definidos como uma matriz vazia.

Modificar a política para conceder os papéis apropriados aos principais.

Em um editor de texto, modifique a matriz de vinculações pelo corpo da resposta para conceder os papéis apropriados aos principais. Para conceder um papel, siga um destes procedimentos:

  • Se uma vinculação para o papel não existir, adicione um novo objeto à matriz bindings que defina o papel que você quer conceder e o principal a quem você quer conceder.
  • Se já houver uma vinculação para o papel, adicione o novo principal à lista de existentes.

Exemplo:

Para conceder o papel do usuário da conta de serviço (roles/iam.serviceAccountUser) a robin@example.com, altere o exemplo mostrado na etapa anterior da seguinte maneira:

{
  "version": 1,
  "etag": "BwUqLaVeua8=",
  "bindings": [
    {
      "role": "roles/iam.serviceAccountUser",
      "members": [
        "user:robin@example.com"
      ]
    },
    {
      "role": "roles/iam.serviceAccountAdmin",
      "members": [
        "user:admin@example.com"
      ]
    }
  ]
}

Grave a política atualizada.

O método serviceAccounts.setIamPolicy define uma política atualizada do IAM para a conta de serviço.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de e-mail da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • POLICY: uma representação JSON da política que você quer definir. Para mais informações sobre o formato de uma política, consulte a referência da política.

    Por exemplo, para definir a política mostrada na etapa anterior, substitua policy pelo seguinte:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "user:robin@example.com"
          ]
        },
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:admin@example.com"
          ]
        }
      ]
    }
    

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:setIamPolicy

Corpo JSON da solicitação:

{
  "policy": POLICY
}

Para enviar a solicitação, expanda uma destas opções:

A resposta contém a política atualizada.

Como listar principais que podem acessar uma conta de serviço

Use o Console do Cloud para ver todos os principais que têm acesso a uma conta de serviço, seja por papéis concedidos na conta de serviço, seja por papéis concedidos no projeto, na pasta ou na organização:

  1. No Console do Cloud, acesse a página Contas de serviço:

    Acessar a página "Contas de serviço"

  2. Selecione um projeto.

  3. Clique no endereço de e-mail da conta de serviço que você quer permitir que o principal personifique.

  4. Clique na guia Permissões.. A seção Principais com acesso a esta conta de serviço lista os principais que podem acessar a conta de serviço.

Como anexar uma conta de serviço a um recurso

Para alguns recursos do Google Cloud, é possível especificar uma conta de serviço gerenciada pelo usuário que o recurso usa como sua identidade padrão. Esse processo é conhecido como anexar a conta de serviço ao recurso ou a associação da conta de serviço a ele.

Quando um recurso precisa acessar outros serviços e recursos do Google Cloud, ele representa a conta de serviço anexada a si mesma. Por exemplo, se você anexar uma conta de serviço a uma instância do Compute Engine; e os aplicativos na instância usarem uma biblioteca de cliente para chamar as APIs do Google Cloud, esses aplicativos representam automaticamente a conta de serviço anexada.

Na maioria dos casos, você precisa anexar uma conta de serviço a um recurso ao criá-lo. Após a criação do recurso, não será possível alterar a conta de serviço anexada ao recurso. As instâncias do Compute Engine são uma exceção a essa regra. É possível alterar a conta de serviço anexada a uma instância conforme necessário.

Antes de anexar uma conta de serviço a um recurso, é preciso configurar a conta de serviço. Esse processo será diferente se a conta de serviço e o recurso estiverem no mesmo projeto ou em projetos diferentes. Depois de configurar a conta de serviço, crie o recurso e anexe a conta de serviço a esse recurso.

Como configurar um recurso no mesmo projeto

Antes de anexar uma conta de serviço a outro recurso no mesmo projeto, conceda papéis à conta de serviço para que ela possa acessar os recursos adequados, assim como você faria com papéis a qualquer outro principal.

Como configurar um recurso em um projeto diferente

Em alguns casos, pode ser necessário anexar uma conta de serviço a um recurso localizado em outro projeto. Por exemplo, se você criar todas as suas contas de serviço em um único projeto, talvez seja necessário anexar uma delas a um novo recurso em um projeto diferente.

Antes de anexar uma conta de serviço a um recurso em outro projeto, faça o seguinte:

  1. No projeto em que a conta de serviço está localizada, siga as etapas nesta página para ativar a representação da conta de serviço entre projetos.
  2. Identifique o projeto em que você criará o recurso.
  3. Identifique o tipo de recurso ao qual a conta de serviço será anexada, bem como o serviço que possui esse tipo de recurso.

    Por exemplo, se você estiver criando uma assinatura do Pub/Sub, o Pub/Sub será o serviço proprietário do recurso.

  4. Encontre o endereço de e-mail do agente de serviços.

    Diferentes serviços usam agentes de serviço distintos. Para detalhes, consulte Agentes de serviço.

  5. Conceda o papel Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) aos agentes de serviço:

    Console

    1. No Console do Cloud, acesse a página Contas de serviço.

      Acessar a página "Contas de serviço"

    2. Selecione o projeto proprietário da conta de serviço que você anexará a um recurso.

    3. Encontre a conta de serviço que você anexará a um recurso e marque a caixa de seleção correspondente.

    4. No painel Permissões, clique em Adicionar principal.

    5. No campo Novos membros, insira o endereço de e-mail do agente de serviço.

    6. Na lista suspensa Selecione um papel, digite Service Account Token Creator e clique em um papel.

    7. Clique em Salvar.

    8. Opcional: se você precisar conceder o papel a outro agente de serviço, repita as etapas anteriores.

    gcloud

    Use o comando gcloud iam service-accounts add-iam-policy-binding:

    gcloud iam service-accounts add-iam-policy-binding \
        user-sa-name@project-id.iam.gserviceaccount.com \
        --member=serviceAccount:service-agent-email \
        --role=roles/iam.serviceAccountTokenCreator
    

    Substitua os seguintes valores:

    • user-sa-name: o nome da conta de serviço gerenciada pelo usuário que você está anexando a um recurso.
    • project-id: o ID do projeto em que a conta de serviço gerenciada pelo usuário está localizada.
    • service-agent-email: o endereço de e-mail da do agente de serviço.

    O comando imprime a política do IAM atualizada na conta de serviço gerenciada pelo usuário.

    Opcional: se você precisar conceder o papel a outro agente de serviço, execute o comando novamente.

    REST

    Para conceder esse papel, use o padrão read-modify-write para atualizar a política do IAM para sua conta de serviço gerenciada pelo usuário.

    Primeiro, leia a política do IAM da conta de serviço gerenciada pelo usuário:

    O método projects.serviceAccounts.getIamPolicy retorna a política do IAM da conta de serviço.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
    • USER_SA_NAME: o nome da conta de serviço gerenciada pelo usuário que você está vinculando a um recurso.

    Método HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:getIamPolicy

    Corpo JSON da solicitação:

    {
      "requestedPolicyVersion": 3
    }
    

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

    Em seguida, altere a política para conceder o papel de Criador de token da conta de serviço ao agente de serviço. Substitua SERVICE_AGENT_EMAIL pelo endereço de e-mail do agente de serviço:

    {
      "version": 1,
      "etag": "BwWl3KCTUMY=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountTokenCreator",
          "members": [
            "serviceAccount:SERVICE_AGENT_EMAIL"
          ]
        },
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

    Por fim, grave a política atualizada:

    O método projects.serviceAccounts.setIamPolicy atualiza a política do IAM para sua conta de serviço.

    Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

    • PROJECT_ID: o ID do projeto do Google Cloud. Os IDs do projeto são strings alfanuméricas, como my-project.
    • USER_SA_NAME: o nome da conta de serviço gerenciada pelo usuário que você está vinculando a um recurso.
    • SERVICE_AGENT_EMAIL: o endereço de e-mail do agente de serviço que criará tokens de acesso para a conta de serviço gerenciada pelo usuário.

    Método HTTP e URL:

    POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/USER_SA_NAME@PROJECT_ID.iam.gserviceaccount.com:setIamPolicy

    Corpo JSON da solicitação:

    {
      "policy": {
        "version": 1,
        "etag": "BwWl3KCTUMY=",
        "bindings": [
          {
            "role": "roles/iam.serviceAccountTokenCreator",
            "members": [
              "serviceAccount:SERVICE_AGENT_EMAIL"
            ]
          },
          {
            "role": "roles/iam.serviceAccountUser",
            "members": [
              "serviceAccount:my-service-account@my-project.iam.gserviceaccount.com"
            ]
          }
        ]
      }
    }
    

    Para enviar a solicitação, expanda uma destas opções:

    Você receberá uma resposta JSON semelhante a esta:

    {
      "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.iam.gserviceaccount.com"
          ]
        }
      ]
    }
    

Como anexar a conta de serviço ao novo recurso

Depois de configurar a conta de serviço gerenciada pelo usuário, é possível criar um novo recurso e anexar a conta a esse recurso. Certifique-se de criar o novo recurso no projeto apropriado.

Veja as instruções para o tipo de recurso que você quer criar:

Como anexar uma conta de serviço ao criar um recurso
AI Platform Prediction Versões do modelo
AI Platform Training Jobs
Cloud Composer Ambientes
Cloud Functions Função do Cloud
Cloud Life Sciences Pipelines
Cloud Run Serviços
Cloud Scheduler Jobs
Cloud Source Repositories
Compute Engine
Dataflow Jobs
Datalab Instâncias
Dataproc Clusters
Google Kubernetes Engine
Notebooks Instâncias de notebook
Pub/Sub Assinaturas
Vertex AI

Depois de criar o recurso e anexar a conta de serviço a ele, é possível conceder papéis à conta de serviço para que ela possa acessar os recursos apropriados. Esse processo é o mesmo que conceder um papel a qualquer outro principal.

Para aprender a conceder papéis, consulte Como conceder, alterar e revogar acesso a recursos.

Como interpretar registros de auditoria

Os registros de auditoria do Cloud ajudam você a responder às perguntas "quem fez o quê, onde e quando?" para os recursos do Google Cloud.

Quando você usa credenciais de curta duração para representar uma conta de serviço, a maioria dos serviços do Google Cloud cria entradas de registro que mostram as seguintes identidades:

  • A conta de serviço que as credenciais de curta duração estão representando
  • A identidade que criou as credenciais de curta duração

Use essas entradas de registro para identificar o principal que criou as credenciais de curta duração, bem como a conta de serviço que o principal representa.

Para ver exemplos de entradas de registro de auditoria que mostram a representação da conta de serviço, consulte Como representar uma conta de serviço para acessar o Google Cloud.

Como ativar a representação da conta de serviço entre projetos

Por padrão, não é possível criar uma conta de serviço em um projeto e anexá-la a um recurso em outro projeto. Se você quiser manter todas as suas contas de serviço em um projeto, atualize a política da organização para esse projeto.

Na política da organização no projeto em que as contas de serviço estão localizadas, verifique as seguintes restrições booleanas:

  • Certifique-se de que a restrição booleana iam.disableCrossProjectServiceAccountUsage não seja aplicada ao projeto.

    Essa restrição booleana controla se é possível anexar uma conta de serviço a um recurso em outro projeto. A restrição é aplicada por padrão.

    Quando essa restrição não é aplicada, o IAM adiciona uma garantia de projeto que impede que ele seja excluído. Essa garantia tem a origem iam.googleapis.com/cross-project-service-accounts. Não é recomendável excluir essa garantia.

  • Recomendado: certifique-se de que a restrição booleana iam.restrictCrossProjectServiceAccountLienRemoval seja aplicada ao projeto.

    Essa restrição booleana garante que os principais removam a garantia do projeto somente se tiverem a permissão resourcemanager.projects.updateLiens no nível da organização. Se essa restrição não for aplicada, os principais poderão remover a garantia do projeto se tiverem essa permissão no nível do projeto.

Para saber como visualizar ou alterar uma restrição booleana em uma política da organização, consulte Como definir uma restrição booleana.

Como desativar a representação da conta de serviço entre projetos

Se você já ativou a representação da conta de serviço entre projetos, recomendamos que você desative esse recurso, principalmente em ambientes de produção.

Especificamente, não faça nenhuma dessas alterações no projeto em que estão localizadas as contas de serviço:

  • 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 garantia do projeto com a origem iam.googleapis.com/cross-project-service-accounts, que impede você de excluir o projeto.
  • Não exclua o projeto.

Se você quiser aceitar o risco de desativar esse recurso, desative as contas de serviço usadas em todos os projetos e monitore os problemas do ambiente do Google Cloud. Se você tiver algum problema, reative as contas de serviço. Se você não encontrar problemas, talvez não tenha os recursos do Google Cloud que dependam de uma conta de serviço em um projeto diferente.

A seguir