Conceder permissão a um fluxo de trabalho para acessar os recursos do Google Cloud

O Workflows usa contas de serviço para conceder aos fluxos de trabalho acesso aos recursos do Google Cloud . Contas de serviço são contas especiais que servem como a identidade de um usuário que não é uma pessoa, como uma função, um aplicativo ou uma VM. É uma maneira de autenticar esses usuários que não são pessoas. Pense em uma conta de serviço como uma identidade e um recurso:

  • Ao pensar em uma conta de serviço como uma identidade, é possível conceder um papel a uma conta de serviço, permitindo que ela acesse um recurso (como um fluxo de trabalho).

  • Ao pensar em uma conta de serviço como um recurso, é possível conceder papéis a outros usuários para acessar ou gerenciar essa conta de serviço.

Uma conta de serviço é identificada por seu endereço de e-mail, que é exclusivo.

Para mais informações sobre como configurar a autenticação com um aplicativo de produção, consulte Autenticar como uma conta de serviço.

Conta padrão de serviço

Cada fluxo de trabalho é associado a uma conta de serviço do Identity and Access Management (IAM) quando você cria o fluxo de trabalho. Se você não especificar uma conta de serviço durante a criação do fluxo de trabalho, ele usará a conta de serviço padrão do Compute Engine como identidade. Para verificar qual conta de serviço está associada a um fluxo de trabalho, consulte Verificar a conta de serviço associada a um fluxo de trabalho neste documento.

  • Recomendamos usar a conta de serviço padrão apenas para testes e desenvolvimento. Para ambientes de produção, é altamente recomendável criar uma nova conta de serviço e conceder a ela um ou mais papéis do IAM que contenham as permissões mínimas necessárias para acessar os recursos orquestrados pelos fluxos de trabalho.

  • Os únicos papéis necessários para sua conta de serviço são aqueles necessários para acessar os recursos orquestrados pelos fluxos de trabalho. Para mais informações, neste documento, consulte Permissões de contas de serviço.

Permissões de conta de serviço

Como as contas de serviço são identidades, é possível permitir que uma conta de serviço acesse recursos em seu projeto ao conceder a ela um papel, assim como você faria para qualquer outro principal. Por exemplo, se você quiser permitir que o fluxo de trabalho envie registros ao Cloud Logging, verifique se a conta de serviço que executa o fluxo de trabalho tem um papel que inclua a permissão logging.logEntries.create, como o papel do IAM de Gravador de registros (roles/logging.logWriter). Em geral, os papéis necessários para sua conta de serviço dependem dos recursos que você está orquestrando com seus fluxos de trabalho. Para determinar quais papéis são necessários, consulte a documentação do produto para o recurso que você está orquestrando ou escolha papéis predefinidos.

A conta de serviço do fluxo de trabalho não requer o papel do IAM de Invocador do Workflows (roles/workflows.invoker), a menos que o fluxo de trabalho invoque a si mesmo ou outros fluxos de trabalho (ou seja, crie novas execuções de fluxo de trabalho). Para mais informações, consulte Invocar fluxos de trabalho.

Anexar contas de serviço a recursos

Para criar um fluxo de trabalho e anexar uma conta de serviço, é preciso ter permissões para criar o fluxo de trabalho e anexar a conta de serviço a ele.

Para receber a permissão necessária para anexar uma conta de serviço a um recurso, peça ao administrador que conceda a você o papel do IAM de Usuário da conta de serviço (roles/iam.serviceAccountUser) na conta de serviço ou no projeto que contém a conta de serviço. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Esse papel predefinido contém a permissão iam.serviceAccounts.actAs, que é necessária para anexar uma conta de serviço a um recurso.

Também é possível receber essa permissão com papéis personalizados ou outros papéis predefinidos.

Ao atualizar o código-fonte ou a conta de serviço de um fluxo de trabalho, você também precisa da permissão iam.serviceAccounts.actAs:

  • Atualizar apenas o código-fonte do fluxo de trabalho (sem atualizar a conta de serviço): é necessário ter a permissão iam.serviceAccounts.actAs na conta de serviço associada ao fluxo de trabalho.
  • Atualizar a conta de serviço ou o código-fonte e a conta de serviço: você precisa da permissão iam.serviceAccounts.actAs na nova conta de serviço que está associando ao fluxo de trabalho.

Para mais informações sobre os papéis de autenticação da conta de serviço, consulte Papéis para autenticação da conta de serviço.

Invocar funções do Cloud Run

No Cloud Run functions, as permissões de invocação estão disponíveis ao gerenciar o serviço subjacente do Cloud Run. Se o fluxo de trabalho estiver invocando um serviço do Cloud Run functions, não será necessário conceder à conta de serviço do autor da chamada o papel do IAM de Invocador do Cloud Functions (roles/cloudfunctions.invoker). Em vez disso, é necessário conceder o papel do IAM de Invocador do Cloud Run (roles/run.invoker).

Para mais informações, consulte Comparar o Cloud Run functions.

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

É possível criar sua própria conta de serviço gerenciado pelo usuário para ter mais flexibilidade no controle de acesso ao fluxo de trabalho.

  1. Crie uma conta de serviço e anote o nome dela.

  2. Conceda à conta de serviço os papéis apropriados, com base nos recursos que o fluxo de trabalho precisa acessar para realizar o trabalho.

  3. Verifique se todos os principais que implantam ou atualizam fluxos de trabalho têm permissão para anexar ou atuar como a conta de serviço (roles/iam.serviceAccountUser). Se você criou a conta de serviço, essa permissão será concedida automaticamente.

    Conceda o papel no projeto:

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

    Também é possível conceder o papel na conta de serviço:

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

    Substitua:

    • PROJECT_ID: o ID do projeto do Google Cloud que contém o fluxo de trabalho e a conta de serviço.
    • PRINCIPAL: um identificador para o implantador do fluxo de trabalho no formato user|group|serviceAccount:email ou domain:domain. Exemplo:

      • user:dana@example.com
      • group:admins@example.com
      • serviceAccount:my-service-account@example.com
      • domain:example.com
    • SERVICE_ACCOUNT_RESOURCE_NAME: o nome completo do recurso da conta de serviço, no seguinte formato:

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

      Em que SERVICE_ACCOUNT_NAME é o nome da conta de serviço.

  4. Implante o fluxo de trabalho usando a conta de serviço personalizada.

Implantar um fluxo de trabalho com uma 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. As instruções a seguir mostram como anexar uma conta de serviço em um projeto a um fluxo de trabalho em outro projeto. Em seguida, use a conta de serviço em diferentes projetos para implantar um fluxo de trabalho.

Se a conta de serviço e os recursos do fluxo de trabalho estiverem em projetos diferentes, faça o seguinte:

  1. No console do Google Cloud , acesse a página Políticas da organização do projeto em que a conta de serviço está localizada:

    Acessar a página Políticas da organização

    Verifique a política da organização do projeto e confira se a restrição booleana iam.disableCrossProjectServiceAccountUsage não está aplicada ao projeto. Para mais informações, consulte Ativar a vinculação de contas de serviço entre projetos.

  2. No projeto em que a conta de serviço está localizada, crie uma conta de serviço e anote o nome dela.

  3. Conceda à conta de serviço os papéis apropriados, com base nos recursos que o fluxo de trabalho precisa acessar para realizar o trabalho.

  4. Conceda o papel de Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço do Workflows no projeto do fluxo de trabalho. Isso permite que o agente de serviço gerencie o acesso entre projetos para a conta de serviço. Um agente de serviço é a identidade de um determinado serviço do Google Cloud para um projeto específico. Para mais informações, consulte Agentes de serviço.

    Console

    1. No console do Google Cloud , acesse a página Fluxos de trabalho.

      Acessar fluxos de trabalho

    2. Para criar um fluxo de trabalho, clique em Criar ou, para atualizar um fluxo de trabalho, clique no nome dele.

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

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

    5. Se solicitado, conceda o papel roles/iam.serviceAccountTokenCreator ao agente de serviço do Workflows.

    gcloud

    1. Conceda o papel roles/iam.serviceAccountTokenCreator ao agente de serviço do 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:

      • SERVICE_ACCOUNT_RESOURCE_NAME: o nome completo do recurso da conta de serviço, no seguinte formato:

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

        Em que:

        • 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. Verifique se todos os principais que implantam ou atualizam fluxos de trabalho têm permissão para anexar ou atuar como a conta de serviço (roles/iam.serviceAccountUser). Se você criou a conta de serviço, essa permissão será concedida automaticamente.

    Console

    1. No console do Google Cloud , acesse a página Fluxos de trabalho.

      Acessar fluxos de trabalho

    2. Para criar um fluxo de trabalho, clique em Criar ou, para atualizar um fluxo de trabalho, clique no nome dele.

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

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

    5. Se solicitado, conceda o papel roles/iam.serviceAccountUser no projeto da conta de serviço.

    gcloud

    Conceda o papel no projeto que contém a conta de serviço:

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

    Também é possível conceder o papel na conta de serviço:

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

    Substitua:

    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto doGoogle Cloud que contém a conta de serviço.
    • PRINCIPAL: um identificador para o implantador do fluxo de trabalho no formato user|group|serviceAccount:email ou domain:domain. Exemplo:
      • user:dana@example.com
      • group:admins@example.com
      • serviceAccount:my-service-account@example.com
      • domain:example.com
    • SERVICE_ACCOUNT_RESOURCE_NAME: o nome completo do recurso da conta de serviço, no seguinte formato:

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

      Em que SERVICE_ACCOUNT_NAME é o nome da conta de serviço.

  6. Implante o fluxo de trabalho usando a conta de serviço entre projetos.

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

É possível verificar qual conta de serviço está associada a um fluxo de trabalho específico.

Console

  1. No console do Google Cloud , acesse a página Fluxos de trabalho.

    Acessar 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 na guia Detalhes.

    A guia Detalhes exibe a conta de serviço associada ao fluxo de trabalho.

gcloud

Recupere a descrição do fluxo de trabalho executando o comando gcloud workflows describe:

gcloud workflows describe WORKFLOW_NAME \
    --location=LOCATION

Substitua:

  • WORKFLOW_NAME: o nome do fluxo de trabalho.
  • LOCATION: a região em que o fluxo de trabalho está implantado (por exemplo, us-central1).

A saída é semelhante à seguinte e inclui a conta de serviço associada:

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

A seguir