本文档介绍如何通过工作负载身份联合使用令牌向 Google Cloud 进行身份验证。借助工作负载身份联合,您可以授予本地或多云 SAP 工作负载对 Google Cloud 资源的访问权限,而无需使用服务账号密钥。您可以将工作负载身份联合与 Amazon Web Services (AWS) 或任何支持 OpenID Connect (OIDC) 的身份提供方 (IdP)(例如 Microsoft Azure 或 SAML 2.0)搭配使用。
工作负载身份联合遵循 OAuth 2.0 令牌交换规范。您可以将 IdP 的凭据提供给 Security Token Service,该服务会验证凭据的身份,然后返回联合令牌进行交换。 您可以使用此令牌模拟服务账号并获取短期有效的 OAuth 2.0 访问令牌。短期有效的访问令牌可让您调用服务账号有权访问的任何 Google Cloud API。
对于通过工作负载身份联合使用令牌进行身份验证,简要配置步骤如下:
- 准备外部 IdP。
- 在 Google Cloud 中,配置工作负载身份联合。
- 在 Google Cloud 中,创建服务账号。
- 在 Google Cloud 中,允许外部工作负载模拟服务账号。
- 在 ABAP SDK for Google Cloud 中,实现 ABAP 代码以从 IdP 检索安全令牌。
- 在 ABAP SDK for Google Cloud 中,配置客户端密钥。
并非所有 Google Cloud 产品都支持工作负载身份联合。在使用工作负载身份联合设置身份验证之前,请查看支持的产品和限制列表。如需了解详情,请参阅员工身份联合:支持的产品和限制。
准备外部 IdP
您需要准备 IdP,以便 SAP 工作负载获取可交换为 Google OAuth 2.0 安全令牌的凭据。
如需准备外部 IdP,请根据您的 IdP 执行步骤:
配置工作负载身份联合
在 Google Cloud 中,配置工作负载身份池和提供方。
您可以配置身份池,即可让您管理外部身份的实体。您还可以配置工作负载身份池提供方,即描述 Google Cloud 和 IdP 之间关系的实体。
如需配置工作负载身份联合,请根据您的外部 IdP 执行步骤:
- 如果您将 AWS 或 Azure 用作 IdP,请按照说明创建工作负载身份池和提供方。
- 如果您使用的是其他 IdP,请按照说明创建工作负载身份池和提供方。
请记下以下各项:
- 项目编号:您在其中创建了工作负载身份池的 Google Cloud 项目的编号。
- 池 ID:用于标识工作负载身份池的唯一 ID。
- 提供方 ID:用于标识工作负载身份池提供方的 ID。
ABAP SDK 客户端密钥配置需要使用这些项。
创建服务账号
在 Google Cloud 控制台中,创建一个专用 IAM 服务账号以访问 Google Cloud API。此服务账号必须是包含您计划通过 SDK 使用的 Google Cloud API 的 Google Cloud 项目中的主账号。
在 Google Cloud 控制台中,启用 IAM Service Account Credentials API、Security Token Service API,以及您计划使用 SDK 访问的任何其他受支持的 API。
如需了解如何启用 Google Cloud API,请参阅启用 API。
为该服务账号授予访问 API 功能所需的 IAM 角色。。如需了解 Google Cloud API 的角色要求,请参阅各个 API 文档并遵循最小权限原则。如需详细了解 API 特定预定义角色,请参阅查找适用于 Google Cloud API 的 IAM 角色。
允许外部工作负载模拟服务账号
如需允许外部工作负载模拟服务账号,请根据您的外部 IdP 执行步骤:
- 如果您将 AWS 或 Azure 用作 IdP,请按照说明允许外部工作负载模拟服务账号。
- 如果您使用的是其他 IdP,请按照说明允许外部工作负载模拟服务账号。
实现 ABAP 代码以从 IdP 检索安全令牌
ABAP SDK for Google Cloud 提供了一个抽象类 /GOOG/CL_AUTH_WIF_BASE
,它具有从 Security Token Service 检索 OAuth 2.0 安全令牌以及从 IAM Service Account Credentials API 检索 OAuth 2.0 访问令牌的逻辑。 作为开发者,您需要在命名空间中创建一个继承自抽象类 /GOOG/CL_AUTH_WIF_BASE
的子类。
为了使用工作负载身份联合从 ABAP SDK for Google Cloud 调用 Cloud Functions 函数,SDK 提供了另一个抽象类 /GOOG/CL_AUTH_WIF_ID_TOKEN
。如果您使用工作负载身份联合设置身份验证,则需要在命名空间中再创建一个子类,该子类从抽象类 /GOOG/CL_AUTH_WIF_ID_TOKEN
继承。您可以在配置客户端密钥以调用 Cloud Functions 函数时,在授权类字段中指定此子类。
请务必在子类中实现 GET_EXT_IDP_TOKEN
方法,并编写从 IdP 获取安全令牌的逻辑。填充以下字段:
CV_TOKEN
:从 IdP 检索到的string
格式的令牌。CV_TOKEN_TYPE
:从 IdP 检索到的安全令牌的类型。支持的令牌类型包括:urn:ietf:params:oauth:token-type:jwt
urn:ietf:params:oauth:token-type:id_token
urn:ietf:params:aws:token-type:aws4_request
urn:ietf:params:oauth:token-type:access_token
urn:ietf:params:oauth:token-type:saml2
然后,抽象类 /GOOG/CL_AUTH_WIF_BASE
的方法会使用 CV_TOKEN
和 CV_TOKEN_TYPE
中填充的值来交换和检索在 API 调用中使用的最终 OAuth 2.0 令牌。
以下示例展示了其他云服务提供商(例如 AWS 和 Azure)的方法 GET_EXT_IDP_TOKEN
的实现示例。
AWS
Azure
配置客户端密钥
-
在 SAP GUI 中,执行事务代码
/GOOG/SDK_IMG
。或者,执行事务代码
SPRO
,然后点击 SAP Reference IMG。 - 点击 ABAP SDK for Google Cloud > Basic Settings > Configure Client Key。
- 点击新建条目。
输入以下字段的值:
字段 说明 Google Cloud 密钥名称 指定客户端密钥配置的名称。 Google Cloud 服务账号名称 指定在创建服务账号步骤中为了访问 Google Cloud API 而创建的服务账号的名称(采用电子邮件地址格式)。 例如: sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com
。Google Cloud 范围 将此字段留空。 Google Cloud 项目标识符 指定您在其中创建了工作负载身份池的 Google Cloud 项目的 ID。 命令名称 将此字段留空。 授权类 指定包含类 /GOOG/CL_AUTH_WIF_BASE
的实现的子类。如需了解详情,请参阅实现 ABAP 代码以从 IdP 检索安全令牌。令牌缓存 将此字段留空。 令牌刷新秒数 将此字段留空。 授权参数 1 指定工作负载身份池 ID。 授权参数 2 指定工作负载身份提供方 ID。 保存该条目。
获取支持
如果您在解决 ABAP SDK for Google Cloud 问题时需要帮助,请执行以下操作:
在 Cloud 论坛上提出问题并与社区讨论 ABAP SDK for Google Cloud。
收集所有可用的诊断信息,并与 Cloud Customer Care 联系。如需了解如何与 Customer Care 团队联系,请参阅获取 Google Cloud 上的 SAP 支持。