使用 JSON Web 令牌进行身份验证

本文档介绍了如何在 SAP 系统在位于本地、其他云服务提供商或 Google Cloud 之外的其他环境中的主机上运行或是由 SAP 通过 SAP RISE 计划管理时,设置身份验证以访问 Google Cloud API。如需向 Google Cloud 进行身份验证,您可以使用 Google Cloud 签名的 JSON Web 令牌 (JWT) 从 Google Cloud 获取访问令牌。

简要配置步骤如下:

为基于 JWT 的令牌检索创建服务账号

对于向 Google Cloud 进行基于 JWT 的身份验证,ABAP SDK for Google Cloud 需要 IAM 服务账号。

创建服务账号

创建服务账号并向服务账号授予 Service Account Token Creator IAM 角色。

如需创建服务账号,请执行以下步骤:

  1. 在 Google Cloud 控制台中,创建 IAM 服务账号以用于基于 JWT 的令牌检索。

    转到“服务账号”

    如需了解如何创建服务账号,请参阅创建服务账号

  2. Service Account Token Creator 角色授予服务账号。 如需查看相关说明,请参阅授予单个角色

创建服务账号密钥

您需要为用于基于 JWT 的令牌检索的服务账号创建 P12 服务账号密钥。

如需创建服务账号密钥,请执行以下步骤:

  1. 在 Google Cloud 控制台中,转到“IAM 和管理”的服务账号页面。

    转到“服务账号”

  2. 选择您的 Google Cloud 项目。

  3. 点击您在上一部分创建服务账号中为基于 JWT 的令牌检索创建的服务账号的电子邮件地址。

  4. 在服务账号名称下,点击密钥标签页。

  5. 点击添加密钥下拉菜单,然后选择创建新密钥以创建服务账号密钥

  6. 接受 P12 作为密钥类型,然后点击创建

    私钥已下载到您的计算机。

  7. 记下私钥文件的密码 notasecret

    向您的 SAP 管理员提供私钥和密码,以将私钥导入 STRUST,如将服务账号密钥导入 STRUST 中所述。

为 JWT 签名指定服务账号

如果您在与包含 Google Cloud API 的项目不同的项目中为 JWT 创建了服务账号,则需要在 SAP 主机系统上指定该服务账号。

如果您在包含 Google Cloud API 的同一项目中创建了服务账号,则可以跳过此步骤。

如需为 JWT 签名指定服务账号,请执行以下步骤:

  1. 在 SAP GUI 中,执行事务代码 /GOOG/SDK_IMG

    或者,执行事务代码 SPRO,然后点击 SAP Reference IMG

  2. 点击 ABAP SDK for Google Cloud > 基本设置 > 配置参数

  3. 点击新建条目

  4. 参数名称字段中,输入 JWT_SERVC_ACCT。系统会自动填充参数说明。

  5. Parameter Value 字段中,输入服务账号的名称。

  6. 保存新条目。

在 SAP 主机系统上配置 Google Cloud 的安全设置

如需针对为基于 JWT 的令牌检索创建的服务账号启用 JWT 签名,您需要在 SAP 主机系统上为 Google Cloud 配置安全设置。

创建新的安全存储和转发 (SSF) 应用

每个 SSFAPPLIC 条目可让您保存单个服务账号密钥。如需保存多个项目的服务账号密钥,您需要按照相同的步骤创建多个 SSFAPPLIC 条目。

如需在 SSFAPPLIC 表中创建新条目,请执行以下步骤:

  1. 在 SAP GUI 中,输入事务代码 SE16
  2. 表名称字段中,输入 SSFAPPLIC,然后创建一个新条目。
  3. APPLIC 字段中,输入 SSF 应用的名称,例如 ZG_JWT
  4. 选择除 B_INCCERTSB_DETACHEDB_ASKPWDB_DISTRIB 字段以外的所有其他字段。
  5. DESCRIPT 字段中,输入 JWT Signature for GCP
  6. 保存新条目。

    此条目会成为事务 STRUST 中的新节点,您将向该节点导入服务账号密钥。

启用 STRUST 节点

使用事务 SSFAJWT Signature for GCP 启用 STRUST 节点。

如需启用 STRUST 节点,请执行以下步骤:

  1. 在 SAP GUI 中,输入事务代码 SSFA
  2. 点击新建条目
  3. SSF 应用下拉列表中,选择 JWT Signature for GCP。这是您在表 SSFAPPLIC 中创建的新条目。

    系统会自动填充应用特定 SSF 参数。

  4. 保存新条目。

    新节点 SSF JWT Signature for GCP 已在事务 STRUST 中启用。

将服务账号密钥导入 STRUST

如需将服务账号密钥导入 STRUST,请执行以下步骤:

  1. 在 SAP GUI 中,输入事务代码 STRUST

    验证事务 STRUST 中的新节点为 SSF JWT Signature for GCP

  2. 导入私钥文件:

    1. 从菜单栏中选择 PSE > 导入
    2. 根据您的 SAP 系统,选择适当的私钥:
      • SAP S/4HANA
        1. 选择 P12 私钥。
        2. 输入文件密码 notasecret,然后点击确定
      • SAP ECC
        1. 选择 PSE 私钥。您需要将之前下载的 P12 私钥转换为 PSE 私钥。如需详细了解如何将 P12 密钥转换为 PSE 密钥,请参阅将 P12 密钥转换为 PSE 密钥
        2. 输入您在私钥从 P12 密钥转换为 PSE 密钥期间创建的文件 PIN 码,然后点击确定
  3. 选择 PSE > 另存为

  4. 选择 SSF Application,然后在相应的输入字段中选择您在创建新的安全存储和转发 (SSF) 应用中创建的新 SSF 应用节点。

  5. 保存新条目。

    服务密钥会附加到 SSF 应用节点 SSF JWT Signature for GCP

将 P12 私钥转换为 PSE 密钥

如果 SAP 系统是 SAP NetWeaver 7.0x (SAP ECC),您需要将 P12 密钥转换为 PSE 密钥。

如需将 P12 密钥转换为 PSE 密钥,请执行以下步骤:

  1. 转到以下路径:

    /usr/sap/SID/SYS/exe/run/

    SID 替换为 SAP 系统 ID。

  2. 替换占位符后运行以下命令:

    sapgenpse import_p12 -p PSE_PATH_AND_FILE_NAME P12_PATH_AND_FILE_NAME.p12

    替换以下内容:

    • PSE_PATH_AND_FILE_NAME:指定 PSE 文件的路径和文件名
    • P12_PATH_AND_FILE_NAME:指定 P12 密钥文件的路径和文件名
  3. 输入 P12 私钥文件的密码 notasecret

  4. 为 PSE 私钥创建一个新 PIN 码,然后再次输入您的 PIN 码。

  5. 记下 PIN 码,在将 PSE 私钥文件导入 STRUST 时,您需要提供此 PIN 码。

如需从 SAP 获取如何将 P12 密钥转换为 PSE 密钥的相关信息,请参阅:

启用 Google Cloud API

在 Google Cloud 控制台中,为需要身份验证的 Google Cloud 项目启用 IAM Service Account Credentials API。除了 IAM Service Account Credentials API 之外,您还需要启用计划使用 SDK 访问的任何其他受支持的 API

转到 API 库

如需了解如何启用 Google Cloud API,请参阅启用 API

创建服务账号以授权访问 Google Cloud API

对于 Google Cloud API 的身份验证和授权,ABAP SDK for Google Cloud 需要 IAM 服务账号。

创建服务账号

在 Google Cloud 控制台中,创建 IAM 服务账号。此服务账号必须是包含您计划通过 SDK 使用的 Google Cloud API 的 Google Cloud 项目中的主账号。如果您在包含 Google Cloud API 的同一项目中创建服务账号,则该服务账号会自动添加为该项目的主账号。

如果您在除启用了 Google Cloud API 的项目以外的项目中创建服务账号,则需要在额外步骤中将服务账号添加到该项目。

  1. 在 Google Cloud 控制台中,创建 IAM 服务账号以进行身份验证和授权以访问 Google Cloud API。

    转到“服务账号”

    如需了解如何创建服务账号,请参阅创建服务账号

  2. 在 Google Cloud 控制台中,向服务账号授予访问 API 功能所需的 IAM 角色。如需了解 Google Cloud API 的角色要求,请参阅各个 API 文档并遵循最小权限原则。如需详细了解 API 特定预定义角色,请参阅查找适用于 Google Cloud API 的 IAM 角色

  3. 如果您在不同于计划通过 SDK 使用的 Google Cloud API 的项目中创建服务账号,请记下服务账号的名称。您可以在将服务账号添加到项目时指定该名称。如需了解详情,请参阅将服务账号添加到 Google Cloud 项目

将服务账号添加到 Google Cloud 项目

如果您在与计划通过 SDK 使用的 Google Cloud API 的项目不同的项目中为 ABAP SDK for Google Cloud 创建了服务账号,则需要将服务账号添加到包含 Google Cloud API 的 Google Cloud 项目。

如果您在包含 Google Cloud API 的同一项目中创建了服务账号,则可以跳过此步骤。

如需将现有服务账号添加到包含 Google Cloud API 的 Google Cloud 项目,请执行以下步骤:

  1. 在 Google Cloud 控制台控制台中,转到“IAM 权限”页面。

    打开 IAM 权限

  2. 确认页面顶部附近显示了包含目标 Google Cloud API 的项目的名称。例如:

    项目“PROJECT_NAME”的权限

    如果未显示,请切换项目。

  3. 在 IAM 页面上,点击 授予访问权限。系统会打开授予对“PROJECT_NAME”的访问权限对话框。

  4. 授予对“PROJECT_NAME”的访问权限对话框中,执行以下步骤:

    1. 新的主账号字段中,指定服务账号的名称。
    2. 选择角色字段中,指定相关角色。 例如,对于 Pub/Sub,如需修改主题和订阅以及发布和使用消息的权限,您可以指定 Pub/Sub Editor 角色 (roles/pubsub.editor)。

      如需详细了解 API 特定预定义角色,请参阅 IAM 基本角色和预定义角色参考文档

    3. 根据 API 使用要求添加其他角色。 通过应用最小权限原则,实施 Google 推荐的最佳实践。

    4. 点击保存。该服务账号会显示在 IAM 页面上的项目主账号列表中。

现在,该服务账号可用于访问此项目中的 Google Cloud API。

设置 HTTPS 连接

SAP 应用服务器是通过 HTTPS 连接到 Google Cloud API 所必需的。

在 SAP 主机上,确认防火墙规则或代理已配置为允许从 HTTPS 端口到所需 Google Cloud API 的出站流量。

具体而言,您的 SAP 系统必须能够访问以下 API 端点:

  • https://iamcredentials.googleapis.com
  • 您希望通过 SDK 使用的 API 的 API 端点。

创建 SAP 配置

对于基于 JWT 的身份验证,请创建所需的 SAP 配置。

在客户端密钥表中指定访问权限设置

要指定访问权限设置,请执行以下步骤:

  1. 在 SAP GUI 中,执行事务代码 /GOOG/SDK_IMG

    或者,执行事务代码 SPRO,然后点击 SAP Reference IMG

  2. 点击 ABAP SDK for Google Cloud > 基本设置 > 配置客户端密钥

  3. 点击新建条目

  4. 输入以下字段的值:

    字段 说明
    Google Cloud 密钥名称 指定客户端密钥配置的名称。
    Google Cloud 服务账号名称

    指定在创建服务账号步骤中为 ABAP SDK for Google Cloud 创建的服务账号的名称(采用电子邮件地址格式)。例如:sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com

    Google Cloud 范围 指定访问权限范围 https://www.googleapis.com/auth/cloud-platform
    项目 ID 指定包含目标 API 的 Google Cloud 项目的 ID。
    命令名称 将此字段留空。
    授权类 指定授权类 /GOOG/CL_AUTH_JWT
    授权字段 将此字段留空。
    令牌刷新秒数 将此字段留空。
    授权参数 1 指定您在创建新的安全存储和转发 (SSF) 应用部分中创建的 SSF 应用的名称。
  5. 保存新条目。

创建新的 RFC 目标

为 IAM API 以及您计划通过 ABAP SDK for Google Cloud(例如 Pub/Sub API v1)使用的其他 API 创建 RFC 目标。

RFC 目标名称 Notes
ZGOOG_IAMCREDENTIALS 此 RFC 目标以 IAM API 为目标。
ZGOOG_OAUTH2_TOKEN 此 RFC 目标以基于令牌的身份验证的 Google Cloud 端点为目标。
ZGOOG_PUBSUB_V1 此 RFC 目标以 Pub/Sub API 为目标。

如需了解如何创建 RFC 目标,请参阅 RFC 目标

在服务映射表中指定 RFC 目标

在服务映射表中,为 IAM API 以及您计划通过 ABAP SDK for Google Cloud 使用的其他 API 指定 RFC 目标。

如需指定 RFC 目标,请执行以下步骤:

  1. 在 SAP GUI 中,执行事务代码 /GOOG/SDK_IMG

    或者,执行事务代码 SPRO,然后点击 SAP Reference IMG

  2. 点击 ABAP SDK for Google Cloud > 基本设置 > 配置服务映射

  3. 点击新建条目

  4. 为 IAM API 和其他 API 指定 RFC 目标,例如:

    名称 服务名称 RFC 目标
    Google Cloud 密钥名称 iamcredentials:v1 ZGOOG_IAMCREDENTIALS
    Google Cloud 密钥名称 googleapis.com/oauth2 ZGOOG_OAUTH2_TOKEN
    Google Cloud 密钥名称 pubsub.googleapis.com ZGOOG_PUBSUB_V1
  5. 保存新条目。

验证身份验证配置

如需验证身份验证配置,请执行以下步骤:

  1. 在 SAP GUI 中,执行事务代码 /GOOG/SDK_IMG

    或者,执行事务代码 SPRO,然后点击 SAP Reference IMG

  2. 点击 ABAP SDK for Google Cloud > 实用程序 > 验证身份验证配置

  3. 输入客户端密钥名称。

  4. 点击 Execute 以检查整体流是否已成功配置。

    状态列中的绿色对勾标记表示所有配置步骤均已成功完成。

获取支持

如果您在解决 ABAP SDK for Google Cloud 问题时需要帮助,请执行以下操作: