O Workflows usa contas de serviço para dar aos fluxos de trabalho acesso aos recursos do Google Cloud. As contas de serviço são contas especiais que servem como identidade de uma pessoa, como uma função, um aplicativo ou uma VM. Eles oferecem uma maneira de autenticar essas pessoas. Uma conta de serviço pode ser considerada uma identidade e um recurso.
Ao pensar em uma conta de serviço como uma identidade, atribua 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, conceda 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
Todo fluxo de trabalho está associado a uma conta de serviço do Identity and Access Management (IAM) no momento em que o fluxo é criado. Se você não especificar uma conta de serviço durante a criação do fluxo de trabalho, o fluxo de trabalho usará a conta de serviço padrão do Compute Engine como identidade. É possível verificar a conta de serviço associada a um fluxo de trabalho. Neste documento, consulte Verificar a conta de serviço associada a um fluxo de trabalho.
Recomendamos o uso da conta de serviço padrão apenas para teste e desenvolvimento.
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 para o
Cloud Logging, verifique se a conta de serviço que executa o fluxo de trabalho recebeu
um papel que inclua a permissão logging.logEntries.create
(por exemplo, o papel Logs Writer
).
A conta de serviço do fluxo de trabalho não exige o papel 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.
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, é preciso ter 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 pelo gerenciamento
do serviço do Cloud Run subjacente. Se o fluxo de trabalho estiver invocando um
serviço do função do Cloud (2a geração), não será necessário conceder o
papel de Invocador do Cloud Functions (roles/cloudfunctions.invoker
) à
conta de serviço do autor da chamada. Em vez disso, é necessário conceder o
papel de 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
É possível criar sua própria conta de serviço gerenciado pelo usuário para ter mais flexibilidade no controle do acesso ao seu fluxo de trabalho.
Crie uma conta de serviço e anote o nome dela.
Conceda à conta de serviço os papéis adequados com base nos recursos que o fluxo de trabalho precisa acessar para realizar o trabalho.
Verifique se todos os principais que implantam fluxos de trabalho conseguem anexar a conta de serviço aos recursos. Se você criou a conta de serviço, recebe essa permissão automaticamente. Para mais informações, consulte Papéis para autenticação de conta de serviço.
Para ter a permissão necessária para anexar uma conta de serviço a um recurso, peça ao administrador para conceder a você o papel do IAM de Usuário da conta de serviço (
roles/iam.serviceAccountUser
) no seu projeto ou na conta de serviço. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.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 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
: o ID do projeto do Google Cloud que contém os recursos do fluxo de trabalhoPRINCIPAL
: um identificador para o implantador de fluxo de trabalho no formatouser|group|serviceAccount:email
oudomain: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 da conta de serviço.
Implante 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 a um fluxo de trabalho em outro. Assim, é possível usar essa 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, conclua o seguinte:
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 garanta que a restrição booleana
iam.disableCrossProjectServiceAccountUsage
não seja aplicada. Para mais informações, consulte Ativar contas de serviço para serem anexadas entre projetos.Crie uma conta de serviço e anote o nome dela.
Conceda à conta de serviço os papéis adequados com base nos recursos que o fluxo de trabalho precisa acessar para realizar o trabalho.
Conceda o papel Criador de token da conta de serviço (
roles/iam.serviceAccountTokenCreator
) ao agente de serviço do Workflows. 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ços.Console
No console do Google Cloud, acesse a página Fluxos de trabalho:
Clique em
Criar para gerar um fluxo de trabalho ou selecione o nome do fluxo que você quer atualizar.Na lista Conta de serviço, clique em Alternar projeto.
Selecione uma conta de serviço de um projeto diferente.
Se solicitado, conceda o papel
roles/iam.serviceAccountTokenCreator
ao agente de serviço do Workflows.
gcloud
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 da conta de serviço.
WORKFLOWS_PROJECT_NUMBER
: o número do projeto do Google Cloud que contém os recursos do fluxo de trabalho.
Verifique se todos os principais que implantam fluxos de trabalho conseguem anexar a conta de serviço aos recursos. Se você criou a conta de serviço, recebe essa permissão automaticamente. Para mais informações, consulte Papéis para autenticação de conta de serviço.
Para ter a permissão necessária para anexar uma conta de serviço a um recurso, peça ao administrador para conceder a você o papel do IAM de Usuário da conta de serviço (
roles/iam.serviceAccountUser
) no seu projeto ou na conta de serviço. Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.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 conseguir essa permissão com papéis personalizados ou outros papéis predefinidos.
Console
No console do Google Cloud, acesse a página Fluxos de trabalho:
Clique em
Criar para gerar um fluxo de trabalho ou selecione o nome do fluxo que você quer atualizar.Na lista Conta de serviço, clique em Alternar projeto.
Selecione uma conta de serviço de um projeto diferente.
Se solicitado, conceda o papel
roles/iam.serviceAccountUser
no 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
: o ID do projeto do Google Cloud que contém os recursos do fluxo de trabalhoPRINCIPAL
: um identificador para o implantador de fluxo de trabalho no formatouser|group|serviceAccount:email
oudomain: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 da conta de serviço.
Implante 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
No console do Google Cloud, acesse a página Fluxos de trabalho.
Na página Fluxos de trabalho, clique no nome do fluxo de trabalho.
Na página Detalhes do fluxo de trabalho, clique na guia Detalhes.
A conta de serviço associada ao fluxo de trabalho é exibida.
gcloud
Abra um terminal.
Digite este comando:
gcloud workflows describe MY_WORKFLOW
Substitua
MY_WORKFLOW
pelo nome do seu fluxo de trabalho.Uma descrição completa do fluxo de trabalho, incluindo a conta de serviço associada, é retornada. 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: [...]