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

O Workflows usa contas de serviço para oferecer e fluxos de trabalho aos recursos do Google Cloud. As contas de serviço são especiais contas que servem como a identidade de uma pessoa, como uma função, um aplicativo ou uma VM. Elas oferecem uma maneira de autenticar essas pessoas que não são pessoas. Um conta de serviço pode ser considerada como uma identidade e um recurso.

  • Ao pensar em uma conta de serviço como uma identidade, você pode conceder um papel a uma conta de serviço, permitindo que ela acesse um recurso (como um fluxo de trabalho).

  • Ao considerar uma conta de serviço como um recurso, você pode conceder papéis outros usuários acessem ou gerenciem 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, consulte Faça autenticação como uma conta de serviço.

Conta padrão de serviço

Todo fluxo de trabalho é associado a um serviço do Identity and Access Management (IAM). no momento em que o fluxo de trabalho é criado. Se você não especificar um serviço durante a criação do fluxo de trabalho, ele usará o fluxo de trabalho conta de serviço do Compute Engine para a própria identidade. É possível verificar a disponibilidade conta de serviço associada. Neste documento, consulte Verificar a conta de serviço associada a um fluxo de trabalho.

Recomendamos usar a conta de serviço padrão para teste e desenvolvimento . Para ambientes de produção, recomendamos criar uma nova conta de serviço e concedendo a ela um ou mais papéis do IAM que contêm os permissões mínimas necessárias para gerenciar fluxos de trabalho.

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ê quer que o fluxo de trabalho envie registros para Cloud Logging, verifique se a conta de serviço que executa o fluxo de trabalho recebeu um papel que inclui a permissão logging.logEntries.create Por exemplo, o papel Logs Writer.

A conta de serviço do fluxo de trabalho não requer o 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 Invoque o Workflows.

Para mais informações sobre como conceder papéis aos principais, incluindo contas de serviço, consulte Gerenciar o acesso a projetos, pastas e organizações.

Como anexar contas de serviço a recursos

Para criar um recurso e anexar uma conta de serviço, você precisa de permissões para criar esse recurso e anexar a conta de serviço a ele. A permissão para anexar a conta de serviço a um recurso é fornecida por qualquer papel. que inclua a permissão iam.serviceAccounts.actAs.

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

Invocar o Cloud Functions (2nd gen)

No Cloud Functions (2nd gen), as permissões de invocação estão disponíveis ao gerenciar o serviço subjacente do Cloud Run. Se seu fluxo de trabalho está chamando do Google função do Cloud (2a geração), não é preciso conceder à conta de serviço do autor da chamada, o Invocador do Cloud Functions (roles/cloudfunctions.invoker). Em vez disso, você precisa conceder papel Invocador do Cloud Run (roles/run.invoker).

Para mais informações, consulte Comparação de versões do Cloud Functions.

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

Você pode criar sua própria conta de serviço gerenciado pelo usuário para ter flexibilidade no controle do acesso ao seu fluxo de trabalho.

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

  2. Conceder à conta de serviço as funções apropriadas, com base nos recursos que o fluxo de trabalho precisa acessar para realizar o trabalho.

  3. Verifique se todos os principais que implantam fluxos de trabalho podem anexar da conta de serviço aos recursos. Se você criou a conta de serviço, concedeu essa permissão automaticamente. Para mais informações, consulte Funções para autenticação da conta de serviço.

    Para receber a permissão necessária para anexar uma conta de serviço a um recurso, peça ao administrador para conceder a você Usuário da conta de serviço (roles/iam.serviceAccountUser) no projeto ou na conta de serviço. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

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

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

    Conceda o papel no projeto:

    gcloud projects add-iam-policy-binding WORKFLOWS_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:

    • WORKFLOWS_PROJECT_ID: seu projeto do Google Cloud ID que contém os recursos do fluxo de trabalho
    • PRINCIPAL: um identificador para o implantador de fluxo de trabalho. no formato user|group|serviceAccount:email ou domain:domain Exemplo:

      • user:test-user@gmail.com
      • group:admins@example.com
      • serviceAccount:test123@example.domain.com
      • domain:example.domain.com
    • SERVICE_ACCOUNT_RESOURCE_NAME: o recurso completo o nome da conta de serviço. Exemplo:

      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.
  4. Implantar seu 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 para um fluxo de trabalho em outro projeto. É possível usar 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, no projeto em que a conta de serviço está localizada, faça o seguinte:

  1. No console do Google Cloud, acesse a página Políticas da organização:

    Acessar as políticas da organização

    Verifique a política da organização para o projeto e garantir que a A restrição booleana iam.disableCrossProjectServiceAccountUsage não é aplicadas para o projeto. Para mais informações, consulte Ative as contas de serviço que serão anexadas aos projetos.

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

  3. Conceder à conta de serviço as funções apropriadas, com base nos recursos que o fluxo de trabalho precisa acessar para realizar o trabalho.

  4. Conceder o papel de Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) para os Workflows agente de serviço. Isso permite que o agente de serviço gerencie o o acesso à conta de serviço. Um agente de serviço é a identidade de um 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 Fluxos de trabalho página:

      Acessar fluxos de trabalho

    2. Clique em . Criar para criar um fluxo de trabalho ou selecione o nome do fluxo de trabalho que que você 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 solicitado, conceda o papel roles/iam.serviceAccountTokenCreator a o 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. Exemplo:

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

        Em que:

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

  5. Verifique se todos os principais que implantam fluxos de trabalho podem anexar da conta de serviço aos recursos. Se você criou a conta de serviço, concedeu essa permissão automaticamente. Para mais informações, consulte Funções para autenticação da conta de serviço.

    Para receber a permissão necessária para anexar uma conta de serviço a um recurso, peça ao administrador para conceder a você Usuário da conta de serviço (roles/iam.serviceAccountUser) no projeto ou na conta de serviço. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

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

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

    Console

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

      Acessar fluxos de trabalho

    2. Clique em . Criar para criar um fluxo de trabalho ou selecione o nome do fluxo de trabalho que que você 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 solicitado, conceda o papel roles/iam.serviceAccountUser na projeto.

    gcloud

    Conceda o papel no projeto:

    gcloud projects add-iam-policy-binding WORKFLOWS_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:

    • WORKFLOWS_PROJECT_ID: seu Google Cloud ID do projeto que contém os recursos do fluxo de trabalho
    • PRINCIPAL: um identificador para o fluxo de trabalho. implantador no formato user|group|serviceAccount:email ou domain:domain. 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. Exemplo:

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

      Em que:

      • SERVICE_ACCOUNT_PROJECT_ID é o ID do projeto do Google Cloud que contém a conta de serviço.
      • SERVICE_ACCOUNT_NAME é o nome do conta de serviço.
  6. Implantar seu 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 fluxo de trabalho. nome.

  3. Na página Detalhes do fluxo de trabalho, clique na guia Detalhes.

    A conta de serviço associada ao fluxo de trabalho será exibida.

gcloud

  1. Abra um terminal.

  2. Digite este comando:

    gcloud workflows describe MY_WORKFLOW
    

    Substitua MY_WORKFLOW pelo nome do seu de desenvolvimento de software.

    Uma descrição completa do fluxo de trabalho, incluindo a conta de serviço associada, retornados. 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: [...]

A seguir