Workflows 身份验证

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

访问权限控制机制

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

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

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

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

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

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

控制台

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

  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 发送停止虚拟机的请求:

YAML

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

JSON

    [
      {
        "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": "OAUTH_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 函数的请求:

YAML

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

JSON

    [
      {
        "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": "OIDC_AUDIENCE"
            }
          }
        }
      }
    ]
      
audience 是可选参数,但可用于为令牌指定 OIDC 目标设备。默认情况下,它设置为与 url 相同的值。

请注意,在保护服务时,Workflows 可以调用入站流量受限于内部流量的 Cloud Functions 或 Cloud Run 服务。使用此配置时,您的服务无法通过互联网访问,但可以通过 Workflows 访问。如需了解详情,请参阅调用 Cloud Functions 或 Cloud Run

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

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

后续步骤