Workflows 身份验证

本主题介绍 Workflows 的身份验证信息。本页面讨论了两种类型的身份验证:

访问权限控制机制

对于这两种类型的身份验证,请务必了解访问权限控制机制和工作流的可用角色。角色包含的权限可授予对 Google Cloud 中资源的访问权限。构建生产应用时,请仅向身份授予其与适用的 Google Cloud API、功能或资源进行交互所需的角色。

如需详细了解可用的工作流角色,请参阅工作流访问权限控制机制

使用服务帐号向 Workflows 进行身份验证

Workflows 支持使用服务帐号访问工作流资源。对于几乎所有使用场景,无论是在本地开发中还是在生产应用中,我们都建议您使用服务帐号。如需详细了解如何为生产应用设置身份验证,请参阅以服务帐号身份进行身份验证。您可以向服务帐号授予一个或多个角色,这些角色允许访问 Google Cloud 中的资源,包括 Workflows 资源。

验证工作流的关联服务帐号

如需验证与特定工作流相关联的服务帐号,请执行以下操作:

控制台

  1. 转到 Google Cloud Console 中的“工作流”页面:
    转到“工作流”页面

  2. 在控制台中的“工作流”页面上,选择要转到其详情页面的工作流。

  3. 工作流详情页面上,选择定义标签页以显示工作流的详细信息。

  4. 定义标签页显示工作流的关联服务帐号。

gcloud

  1. 打开终端。

  2. 输入以下命令:

    gcloud workflows describe MY_WORKFLOW
    

    MY_WORKFLOW 替换为您的工作流名称。

  3. 该命令会返回具有完整工作流说明的关联服务帐号:

    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: ...
    

在工作流中发出经过身份验证的请求

要发送经过身份验证的请求,您的工作流必须与具有一个或多个 Identity and Access Management 角色的服务帐号相关联,这些角色包含所需的权限。您还必须向工作流定义明确添加身份验证信息。默认情况下,HTTP 请求不包含身份或访问令牌。

在创建工作流时,每个创建的工作流都与一个 IAM 服务帐号相关联。如果您在工作流创建期间未指定服务帐号,则工作流将使用默认的 Compute Engine 服务帐号作为其身份。

向其他 Google Cloud 服务发出请求时,工作流必须与具有正确权限能够访问所请求资源的服务帐号相关联。

如需在工作流中发送经过身份验证的请求,您可以使用 OAuth 2.0 或 OpenID Connect (OIDC),具体取决于您所调用的服务。

  • 使用 OAuth 2.0 连接所有 Google Cloud API,例如 Compute Engine API 或 Firestore API。任何以主机名 .googleapis.com 结尾的 API 都接受此身份验证方法。

  • 使用 OIDC 连接到 Cloud Run 或 Cloud Functions。

  • 使用 Authorization 请求标头通过第三方 API 进行身份验证。

向 Google Cloud API 发出经过身份验证的请求

工作流的服务帐号可以生成 OAuth 2.0 令牌,工作流可以使用该令牌对任何 Google Cloud API 进行身份验证。使用此身份验证方法时,工作流会以其关联的服务帐号进行身份验证。如需使用 OAuth 2.0 协议发出 HTTP 请求,请在指定网址的 auth 部分添加到工作流定义的 args 部分。在此示例中,系统将向 Compute Engine API 发送停止虚拟机的请求:

- step_A:
    call: http.post
    args:
        url: https://compute.googleapis.com/compute/v1/projects/myproject1234/zones/us-central1-b/instances/myvm001/stop
        auth:
            type: OAuth2
            [scope:]

scope 是可选参数,但可用于为令牌指定 OAuth 2.0 范围。默认情况下,它设置为 https://www.googleapis.com/auth/cloud-platform

向 Cloud Run 或 Cloud Functions 发出请求

向 Cloud Run 或 Cloud Functions 发出请求时,请使用 OIDC 进行身份验证。

如需使用 OIDC 发出 HTTP 请求,请在指定网址后,将 auth 部分添加到工作流定义的 args 部分。在此示例中,系统将发送调用 Cloud Functions 函数的请求:

- step_A:
    call: http.get
    args:
        url: https://us-central1-project.cloudfunctions.net/functionA
        query:
            firstNumber: 4
            secondNumber: 6
            operation: sum
        auth:
            type: OIDC
            [audience:]

audience 是可选参数,但可用于为令牌指定 OIDC 目标设备。默认情况下,它设置为与 url 相同的值。

向外部 API 发出经过身份验证的请求

如果您要集成第三方 API,请添加 Authorization 请求标头以及执行身份验证所需的凭据。例如,在服务请求的 Authorization: Bearer ID_TOKEN 标头中添加一个 ID 令牌。如需了解详情,请参阅 API 提供商的文档。

后续步骤