Conceda uma autorização de fluxo de trabalho para aceder aos recursos de Google Cloud

Os fluxos de trabalho usam contas de serviço para dar aos fluxos de trabalho acesso a Google Cloud recursos. As contas de serviço são contas especiais que servem como identidade de uma entidade que não é uma pessoa, como uma função, uma aplicação ou uma VM. Dão-lhe uma forma de autenticar estas entidades não humanas. Pode considerar uma conta de serviço como uma identidade e um recurso.

  • Quando pensa numa conta de serviço como uma identidade, pode conceder uma função a uma conta de serviço, o que lhe permite aceder a um recurso (como um fluxo de trabalho).

  • Quando pensa numa conta de serviço como um recurso, pode conceder funções a outros utilizadores para acederem ou gerirem essa conta de serviço.

Uma conta de serviço é identificada pelo respetivo endereço de email, que é exclusivo da conta.

Para mais informações sobre a configuração da autenticação com uma aplicação de produção, consulte o artigo Autenticar como uma conta de serviço.

Conta de serviço predefinida

Cada fluxo de trabalho está associado a uma conta de serviço de gestão de identidade e de acesso (IAM) no momento em que o fluxo de trabalho é criado. Se não especificar uma conta de serviço durante a criação do fluxo de trabalho, o fluxo de trabalho usa a conta de serviço predefinida do Compute Engine para a respetiva identidade. Pode validar a conta de serviço associada a um fluxo de trabalho. Neste documento, consulte a secção Verifique a conta de serviço associada de um fluxo de trabalho.

  • Recomendamos que use a conta de serviço predefinida apenas para testes e desenvolvimento. Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções da IAM que contenham as autorizações mínimas necessárias para gerir fluxos de trabalho.

  • As únicas funções necessárias para a sua conta de serviço são as necessárias para aceder aos recursos orquestrados pelos seus fluxos de trabalho. Para mais informações, consulte a secção Autorizações da conta de serviço neste documento.

Autorizações da conta de serviço

Uma vez que as contas de serviço são identidades, pode permitir que uma conta de serviço aceda a recursos no seu projeto concedendo-lhe uma função, tal como faria para qualquer outro principal. Por exemplo, se quiser permitir que o seu fluxo de trabalho envie registos para o Cloud Logging, certifique-se de que foi concedida à conta de serviço que executa o fluxo de trabalho uma função que inclua a autorização logging.logEntries.create (por exemplo, a função Logs Writer). Em geral, as funções necessárias para a sua conta de serviço dependem dos recursos que está a orquestrar com os seus fluxos de trabalho. Para determinar as funções necessárias, reveja a documentação do produto para o recurso que está a orquestrar ou escolha funções predefinidas.

Tenha em atenção que a conta de serviço do fluxo de trabalho não requer a função workflows.invoker, a menos que o fluxo de trabalho se invoque a si próprio ou outros fluxos de trabalho (ou seja, crie novas execuções de fluxos de trabalho). Para mais informações, consulte o artigo Invocar fluxos de trabalho.

Para mais informações sobre a concessão de funções a responsáveis, incluindo contas de serviço, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Anexar contas de serviço a recursos

Para criar um recurso e anexar uma conta de serviço, precisa de autorizações para criar esse recurso e anexar a conta de serviço ao recurso. A autorização para anexar a conta de serviço a um recurso é fornecida por qualquer função que inclua a autorização iam.serviceAccounts.actAs.

Para mais informações, consulte o artigo Funções para autenticação de contas de serviço.

Invocar funções do Cloud Run

Nas funções do Cloud Run, as autorizações de invocação estão disponíveis através da gestão do serviço do Cloud Run subjacente. Se o seu fluxo de trabalho estiver a invocar um serviço de funções do Cloud Run, não precisa de conceder à conta de serviço do autor da chamada a função de invocador do Cloud Functions (roles/cloudfunctions.invoker). Em alternativa, tem de conceder a função Cloud Run Invoker (roles/run.invoker).

Para mais informações, consulte o artigo Compare as funções do Cloud Run.

Implemente um fluxo de trabalho com uma conta de serviço personalizada

Pode criar a sua própria conta de serviço gerida pelo utilizador para ter maior flexibilidade no controlo do acesso ao seu fluxo de trabalho.

  1. Crie a sua conta de serviço e anote o respetivo nome.

  2. Conceda à conta de serviço as funções adequadas, com base nos recursos aos quais o fluxo de trabalho tem de aceder para realizar o seu trabalho.

  3. Certifique-se de que todos os responsáveis que implementam fluxos de trabalho têm a capacidade de anexar a conta de serviço aos recursos. Se criou a conta de serviço, esta autorização é-lhe concedida automaticamente. Para mais informações, consulte o artigo Funções para a autenticação de contas de serviço.

    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 de IAM Utilizador da conta de serviço (roles/iam.serviceAccountUser) no seu projeto ou 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.

    Conceda a função no projeto:

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Em alternativa, conceda a função na conta de serviço:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Substitua o seguinte:

    • WORKFLOWS_PROJECT_ID: o ID do Google Cloud projeto que contém os recursos do fluxo de trabalho
    • PRINCIPAL: um identificador do implementador do fluxo de trabalho no 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
    • SERVICE_ACCOUNT_RESOURCE_NAME: o nome completo do recurso da conta de serviço. Por exemplo:

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      Onde:

      • SERVICE_ACCOUNT_PROJECT_ID é o Google Cloud ID do projeto que contém a conta de serviço.
      • SERVICE_ACCOUNT_NAME é o nome da conta de serviço.
  4. Implemente o seu fluxo de trabalho com a conta de serviço personalizada.

Implemente um fluxo de trabalho com uma conta de serviço entre projetos

Por predefinição, não pode criar uma conta de serviço num projeto e anexá-la a um recurso noutro projeto. As instruções seguintes mostram como anexar uma conta de serviço num projeto a um fluxo de trabalho noutro projeto. Em seguida, pode usar a conta de serviço em diferentes projetos para implementar um fluxo de trabalho.

Se a conta de serviço e os recursos do fluxo de trabalho estiverem em projetos diferentes, no projeto onde a conta de serviço está localizada, conclua o seguinte:

  1. Na Google Cloud consola, aceda à página Políticas da organização:

    Aceda às políticas da organização

    Verifique a política da organização para o projeto e certifique-se de que a restrição booleana iam.disableCrossProjectServiceAccountUsage não é aplicada para o projeto. Para mais informações, consulte o artigo Ative a associação de contas de serviço a vários projetos.

  2. Crie a sua conta de serviço e anote o respetivo nome.

  3. Conceda à conta de serviço as funções adequadas, com base nos recursos aos quais o fluxo de trabalho tem de aceder para realizar o seu trabalho.

  4. Conceda a função Criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço dos Workflows. Isto permite que o agente do serviço faça a gestão do acesso entre projetos para a conta de serviço. Um agente de serviço é a identidade de um determinado Google Cloud serviço para um projeto específico. Para mais informações, consulte o artigo Agentes de serviços.

    Consola

    1. Na Google Cloud consola, aceda à página Fluxos de trabalho:

      Aceda a Fluxos de trabalho

    2. Clique em Criar para criar um fluxo de trabalho ou selecione o nome do fluxo de trabalho que quer atualizar.

    3. Na lista Conta de serviço, clique em Mudar de projeto.

    4. Selecione uma conta de serviço de um projeto diferente.

    5. Se lhe for pedido, conceda a função roles/iam.serviceAccountTokenCreator ao agente do serviço Workflows.

    gcloud

    1. Conceda a função roles/iam.serviceAccountTokenCreator ao agente do serviço Workflows:

      gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
          --member='serviceAccount:service-WORKFLOWS_PROJECT_NUMBER@gcp-sa-workflows.iam.gserviceaccount.com' \
          --role='roles/iam.serviceAccountTokenCreator'

      Substitua o seguinte:

      • SERVICE_ACCOUNT_RESOURCE_NAME: o nome do recurso completo da conta de serviço. Por exemplo:

        projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

        Onde:

        • SERVICE_ACCOUNT_PROJECT_ID é o Google Cloud ID do projeto que contém a conta de serviço.
        • SERVICE_ACCOUNT_NAME é o nome da conta de serviço.
      • WORKFLOWS_PROJECT_NUMBER: o Google Cloud número do projeto que contém os recursos do fluxo de trabalho.

  5. Certifique-se de que todos os responsáveis que implementam fluxos de trabalho têm a capacidade de anexar a conta de serviço aos recursos. Se criou a conta de serviço, esta autorização é-lhe concedida automaticamente. Para mais informações, consulte o artigo Funções para a autenticação de contas de serviço.

    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 de IAM Utilizador da conta de serviço (roles/iam.serviceAccountUser) no seu projeto ou 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.

    Consola

    1. Na Google Cloud consola, aceda à página Fluxos de trabalho:

      Aceda a Fluxos de trabalho

    2. Clique em Criar para criar um fluxo de trabalho ou selecione o nome do fluxo de trabalho que quer atualizar.

    3. Na lista Conta de serviço, clique em Mudar de projeto.

    4. Selecione uma conta de serviço de um projeto diferente.

    5. Se lhe for pedido, conceda a função roles/iam.serviceAccountUser no projeto.

    gcloud

    Conceda a função no projeto:

    gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Em alternativa, conceda a função na conta de serviço:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \
        --member=PRINCIPAL \
        --role='roles/iam.serviceAccountUser'

    Substitua o seguinte:

    • WORKFLOWS_PROJECT_ID: o ID do seu Google Cloud projeto que contém os recursos do fluxo de trabalho
    • PRINCIPAL: um identificador do implementador do fluxo de trabalho no 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
    • SERVICE_ACCOUNT_RESOURCE_NAME: o nome do recurso completo da conta de serviço. Por exemplo:

      projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com

      Onde:

      • SERVICE_ACCOUNT_PROJECT_ID é o Google Cloud ID do projeto que contém a conta de serviço.
      • SERVICE_ACCOUNT_NAME é o nome da conta de serviço.
  6. Implemente o seu fluxo de trabalho usando a conta de serviço entre projetos.

Valide a conta de serviço associada a um fluxo de trabalho

Pode verificar que conta de serviço está associada a um fluxo de trabalho específico.

Consola

  1. Na Google Cloud consola, aceda à página Fluxos de trabalho:

    Aceda a Fluxos de trabalho

  2. Na página Fluxos de trabalho, clique no nome do fluxo de trabalho.

  3. Na página Detalhes do fluxo de trabalho, clique no separador Detalhes.

    É apresentada a conta de serviço associada ao fluxo de trabalho.

gcloud

  1. Abra um terminal.

  2. Introduza o seguinte comando:

    gcloud workflows describe MY_WORKFLOW

    Substitua MY_WORKFLOW pelo nome do seu fluxo de trabalho.

    É devolvida uma descrição completa do fluxo de trabalho, incluindo a conta de serviço associada. Por exemplo:

    createTime: '2020-06-05T23:45:34.154213774Z'
    name: projects/myProject/locations/us-central1/workflows/myWorkflow
    serviceAccount: projects/my-project/serviceAccounts/012345678901-compute@developer.gserviceaccount.com
    sourceContents: [...]

O que se segue?