Workflows 使用服务账号 对 Google Cloud 资源进行工作流访问。服务账号很特殊 充当非个人身份的账号,例如函数、 应用或虚拟机它们为您提供了验证这些非个人身份的方式。答 服务账号可以视为身份和资源
如果将服务账号视为身份,您可以授予角色 从而允许其访问资源(例如工作流)。
当将服务账号视为资源时,您可以向服务账号授予角色 访问或管理该服务账号的权限。
服务账号由其电子邮件地址(对该账号是唯一的)标识。
如需详细了解如何为生产环境设置身份验证, 请参阅 以服务账号身份进行身份验证。
默认服务账号
每个工作流都与一项 Identity and Access Management (IAM) 服务相关联 创建工作流。如果您未指定服务 创建工作流程时,工作流程会使用默认的 Compute Engine 服务账号作为其身份。你可以验证工作流的 关联的服务账号。在本文档中,请参阅 验证工作流的关联服务账号。
我们建议使用默认服务账号进行测试和开发 。对于生产环境,我们强烈建议您创建新的 并向其授予一个或多个 包含 所需的最低权限 用于管理工作流
服务账号权限
由于服务账号是身份,因此您可以为服务账号授予项目中的资源,就像为其他任何主账号授予这些角色一样。例如,如果您希望让工作流将日志发送到
Cloud Logging,请确保执行工作流的服务账号已
已被授予包含 logging.logEntries.create
权限的角色
(例如 Logs Writer
角色)。
请注意,工作流服务账号不需要 workflows.invoker
角色,除非工作流调用其自身或其他工作流(即创建
新工作流执行)。如需了解详情,请参阅
调用工作流。
如需详细了解如何向主账号(包括服务账号)授予角色, 请参阅管理对项目、文件夹和组织的访问权限。
将服务账号附加到资源
如需创建资源并关联服务账号,您需要具备以下权限:
创建该资源并将服务账号关联到该资源。
将服务账号附加到资源的权限由任何角色提供
包含 iam.serviceAccounts.actAs
权限的应用。
如需了解详情,请参阅服务账号身份验证角色。
调用 Cloud Functions (第 2 代)
在 Cloud Functions (第 2 代)中,可通过管理
运行底层 Cloud Run 服务如果您的工作流调用的是
Cloud Function (第 2 代) 服务,那么您无需授予
Cloud Functions Invoker 的服务账号
(roles/cloudfunctions.invoker
) 角色。相反,您必须将
Cloud Run Invoker (roles/run.invoker
) 角色。
如需了解详情,请参阅 Cloud Functions 版本比较。
使用自定义服务账号部署工作流
您可以创建自己的用户代管式服务账号, 让您可以灵活地控制对工作流的访问权限。
创建服务账号并记下其名称。
确保部署工作流的所有主账号都能够将 服务账号给资源如果服务账号是您创建的 已自动授予此权限。有关详情,请参阅 服务账号身份验证。
为了获得将服务账号附加到资源所需的权限, 请让管理员向您授予 Service Account User (
roles/iam.serviceAccountUser
) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限。此预定义角色包含
iam.serviceAccounts.actAs
权限,也就是 将服务账号附加到资源时需要使用它。授予对项目的角色:
gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
或者,向服务账号授予角色:
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
替换以下内容:
WORKFLOWS_PROJECT_ID
:您的 Google Cloud 项目 包含工作流资源的 IDPRINCIPAL
:工作流部署者的标识符 格式为user|group|serviceAccount:email
或domain:domain
。例如:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME
:完整资源 服务账号的名称。例如:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
其中:
SERVICE_ACCOUNT_PROJECT_ID
是 Google Cloud 包含服务账号的项目 ID。SERVICE_ACCOUNT_NAME
是服务账号的名称。
部署工作流 使用自定义服务账号
使用跨项目服务账号部署工作流
默认情况下,您无法将在一个项目中创建服务账号附加到其他项目中的资源上。以下说明介绍了如何将 将一个项目中的服务账号关联到另一个项目中的工作流。然后,您可以 跨不同项目使用服务账号来部署工作流。
如果服务账号和工作流资源位于不同的项目中, 在服务账号所在的项目中,完成以下操作:
在 Google Cloud 控制台中,前往组织政策页面:
查看组织政策 为项目指定访问权限,并确保 “
iam.disableCrossProjectServiceAccountUsage
”布尔值限制条件不适用 对项目强制执行的限制条件。如需了解详情,请参阅 允许跨项目关联服务账号。创建服务账号并记下其名称。
授予 Service Account Token Creator 角色 (
roles/iam.serviceAccountTokenCreator
) 到 Workflows 服务代理。这允许服务代理管理跨项目 该服务账号的访问权限服务代理是指 适用于特定项目的 Google Cloud 服务。如需了解详情,请参阅 服务代理。控制台
在 Google Cloud 控制台中,前往 Workflows 页面:
点击
创建以创建工作流,或选择需要创建工作流的工作流的名称 要更新的项目在服务账号列表中,点击切换项目。
从其他项目中选择服务账号。
如果系统提示,请向以下角色授予
roles/iam.serviceAccountTokenCreator
角色: Workflows 服务代理。
gcloud
将
roles/iam.serviceAccountTokenCreator
角色授予 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'
替换以下内容:
SERVICE_ACCOUNT_RESOURCE_NAME
:完整 服务账号的资源名称。例如:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
其中:
SERVICE_ACCOUNT_PROJECT_ID
是 包含服务账号的 Google Cloud 项目 ID。SERVICE_ACCOUNT_NAME
是 服务账号。
WORKFLOWS_PROJECT_NUMBER
: 包含工作流资源的 Google Cloud 项目编号。
确保部署工作流的所有主账号都能够将 服务账号给资源如果服务账号是您创建的 已自动授予此权限。有关详情,请参阅 服务账号身份验证。
为了获得将服务账号附加到资源所需的权限, 请让管理员向您授予 Service Account User (
roles/iam.serviceAccountUser
) IAM 角色。 如需详细了解如何授予角色,请参阅管理访问权限。此预定义角色包含
iam.serviceAccounts.actAs
权限,也就是 将服务账号附加到资源时需要使用它。控制台
在 Google Cloud 控制台中,前往 Workflows 页面:
点击
创建以创建工作流,或选择需要创建工作流的工作流的名称 要更新的项目在服务账号列表中,点击切换项目。
从其他项目中选择服务账号。
如果系统提示,请授予以下各项的
roles/iam.serviceAccountUser
角色: 项目。
gcloud
授予对项目的角色:
gcloud projects add-iam-policy-binding WORKFLOWS_PROJECT_ID \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
或者,向服务账号授予角色:
gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT_RESOURCE_NAME \ --member=PRINCIPAL \ --role='roles/iam.serviceAccountUser'
替换以下内容:
WORKFLOWS_PROJECT_ID
:您的 Google Cloud 包含工作流资源的项目 IDPRINCIPAL
:工作流的标识符 采用user|group|serviceAccount:email
格式的部署者 或domain:domain
。例如:user:test-user@gmail.com
group:admins@example.com
serviceAccount:test123@example.domain.com
domain:example.domain.com
SERVICE_ACCOUNT_RESOURCE_NAME
:完整 服务账号的资源名称。例如:projects/SERVICE_ACCOUNT_PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
其中:
SERVICE_ACCOUNT_PROJECT_ID
是 包含服务账号的 Google Cloud 项目 ID。SERVICE_ACCOUNT_NAME
是 服务账号。
部署工作流 使用跨项目服务账号
验证与工作流关联的服务账号
您可以验证哪个服务账号与特定工作流相关联。
控制台
在 Google Cloud 控制台中,转到 Workflows 页面:
在工作流页面上,点击工作流 名称。
在工作流详细信息页面上,点击详细信息标签页。
系统随即会显示工作流的关联服务账号。
gcloud
打开终端。
输入以下命令:
gcloud workflows describe MY_WORKFLOW
将
MY_WORKFLOW
替换为您的 工作流。查看包含关联服务账号的完整工作流说明 返回。例如:
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: [...]