Anexe contas de serviço a recursos

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

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:

  1. 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.
  2. Identifique o projeto onde vai criar o recurso.
  3. 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.

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

  5. Conceda a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) aos agentes de serviço:

    Consola

    1. Na Trusted Cloud consola, aceda à página Contas de serviço.

      Aceda às contas de serviço

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

    3. Clique no endereço de email da conta de serviço que vai anexar a um recurso.

    4. Aceda ao separador Autorizações e encontre a secção Membros com acesso a esta conta de serviço.

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

    6. Clique em Selecionar uma função, escreva Service Account Token Creator e clique na função.

    7. Clique em Guardar para guardar as alterações.

    8. 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, como my-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ço
    • SERVICE_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, como my-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.disableCrossProjectServiceAccountUsagerestriçã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?