使用访问令牌进行身份验证

本文档介绍了如何设置身份验证,以便在 SAP 系统在 Compute Engine 虚拟机实例上托管时访问 Google Cloud。

启用 Google Cloud API

在您的 Google Cloud 项目中,启用所需的 Google Cloud API。

  • 如需通过 Pub/Sub 进行 CDC 复制,请启用以下 API:

    • Pub/Sub API
    • BigQuery API
    • IAM 服务账号凭据 API
  • 对于流式数据复制,请启用以下 API:

    • BigQuery API
    • IAM 服务账号凭据 API

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

创建服务账号

BigQuery Connector for SAP 需要 IAM 服务账号才能进行身份验证和授权,以便访问 Google Cloud 资源。

此服务账号必须是包含已启用的 Google Cloud API 的 Google Cloud 项目中的主账号。如果您在 Google Cloud API 所在的项目中创建服务账号,该服务账号会自动添加为该项目的主账号。

如果您在不同于包含已启用 Google Cloud API 的项目创建服务账号,则需要在额外步骤中将该服务账号添加到已启用 Google Cloud API 的项目。

如需创建服务账号,请执行以下操作:

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

    转到“服务账号”

  2. 如果出现提示,请选择您的 Google Cloud 项目。

  3. 点击创建服务账号

  4. 为服务账号指定名称并提供说明(可选)。

  5. 点击创建并继续

  6. 如果您要在启用了 Google Cloud API 的同一项目中创建服务账号,请在向此服务账号授予对项目的访问权限面板中,根据需要选择角色:

    对于通过 Pub/Sub 进行的 CDC 复制,请选择以下角色:

    • “发布/订阅”编辑者
    • BigQuery Data Editor
    • BigQuery Job User

    对于流式数据复制,请选择以下角色:

    • BigQuery Data Editor
    • BigQuery Job User

    如果您要在不同于已启用 Google Cloud API 的项目的项目中创建服务账号,请不要向服务账号授予任何角色。

  7. 点击继续

  8. 根据具体情况授予其他用户访问服务账号的权限。

  9. 点击完成。该服务账号会显示在项目的服务账号列表中。

  10. 如果您在与启用的 Google Cloud API所在项目不同的项目中创建服务账号,请记下服务账号的名称。您可以在将服务账号添加到已启用 Google Cloud API 的项目时指定该名称。如需了解详情,请参阅 将服务账号添加到 BigQuery 项目

现在该服务账号会在创建它的 Google Cloud 项目的 IAM 权限页面上列为主账号。

将服务账号添加到目标项目

如果您在与包含已启用 Google Cloud API 的项目不同的项目中为 BigQuery Connector for SAP 创建了服务账号,则需要将服务账号添加到已启用 Google Cloud API 的项目。

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

如需将现有服务账号添加到 BigQuery 数据集项目,请完成以下步骤:

  1. 在 Google Cloud 控制台中,前往“IAM 权限”页面:

    转到 IAM 权限

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

    项目“PROJECT_NAME”的权限

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

  3. 在 IAM 页面上,点击 添加。系统会打开为“PROJECT_NAME”添加主账号对话框。

  4. 为“PROJECT_NAME”添加主账号对话框中,完成以下步骤:

    1. 新的主账号字段中,指定服务账号的名称。
    2. 选择角色字段中,指定 BigQuery Data Editor
    3. 点击添加其他角色选择角色字段将再次显示。
    4. 选择角色字段中,指定 BigQuery Job User
    5. 对于通过 Pub/Sub 进行的 CDC 复制,请重复上一步,并指定 Pub/Sub Editor
    6. 点击保存。该服务账号会显示在 IAM 页面上的项目主账号列表中。

在主机虚拟机上配置安全设置

BigQuery Connector for SAP 要求托管 SAP LT Replication Server 的 Compute Engine 虚拟机配置以下安全选项:

  • 必须设置主机虚拟机的访问权限范围,才能授予对 Cloud API 的完整访问权限。
  • 主机虚拟机的服务账号必须包含 IAM Service Account Token Creator 角色。

如果未在主机虚拟机上配置这些选项,则需要对其进行配置。

检查主机虚拟机的 API 访问权限范围

检查 SAP LT Replication Server 主机虚拟机的当前访问权限范围设置。如果虚拟机已拥有所有 Cloud API 的完整访问权限,则无需更改访问权限范围。

如需检查主机虚拟机的访问权限范围,请执行以下操作:

Google Cloud 控制台

  1. 在 Google Cloud 控制台中,打开“虚拟机实例”页面:

    转到虚拟机实例

  2. 如有必要,请选择包含 SAP LT Replication Server 主机的 Google Cloud 项目。

  3. 在虚拟机实例页面上,点击主机虚拟机的名称。虚拟机详情页面随即打开。

  4. 在主机虚拟机详情页面上的 API 和身份管理下,检查 Cloud API 访问权限范围的当前设置:

    • 如果设置为授予对所有 Cloud API 的完整访问权限,则设置正确,您无需进行更改。
    • 如果设置不是授予对所有 Cloud API 的完整访问权限,则需要停止虚拟机并更改此设置。有关说明,请参阅下一部分。

gcloud CLI

  1. 显示主机虚拟机的当前访问权限范围:

    gcloud compute instances describe VM_NAME --zone=VM_ZONE --format="yaml(serviceAccounts)"

    如果访问权限范围不包含 https://www.googleapis.com/auth/cloud-platform,则需要更改主机虚拟机的访问权限范围。比方说,如果使用默认 Compute Engine 服务账号创建虚拟机实例,则需要更改以下默认访问权限范围:

    serviceAccounts:
    - email: 600915385160-compute@
      scopes:
      - https://www.googleapis.com/auth/devstorage.read_only
      - https://www.googleapis.com/auth/logging.write
      - https://www.googleapis.com/auth/monitoring.write
      - https://www.googleapis.com/auth/servicecontrol
      - https://www.googleapis.com/auth/service.management.readonly
      - https://www.googleapis.com/auth/trace.append

    如果 scopes 下列出的唯一范围是 https://www.googleapis.com/auth/cloud-platform,如以下示例所示,则无需更改范围:

    serviceAccounts:
    - email: 600915385160-compute@
      scopes:
      - https://www.googleapis.com/auth/cloud-platform

更改主机虚拟机的 API 访问权限范围

如果 SAP LT Replication Server 主机虚拟机没有对Google Cloud API 的完整访问权限,请更改访问权限范围以允许对所有 Cloud API 的完整访问权限。

如需更改主机虚拟机的 Cloud API 访问权限范围设置,请执行以下操作:

Google Cloud 控制台

  1. 如有必要,请限制授予主机虚拟机安全账号的角色。

    您可以在主机虚拟机详情页面上的 API 和身份管理下找到安全账号名称。您可以在 Google Cloud 控制台的 IAM 页面上的主账号下更改向服务账号授予的角色。

  2. 如有必要,请停止主机虚拟机上运行的任何工作负载。

  3. 在 Google Cloud 控制台中,打开“虚拟机实例”页面:

    转到虚拟机实例

  4. 在虚拟机实例页面上,点击主机虚拟机的名称以打开虚拟机详情页面。

  5. 在主机虚拟机详情页面顶部,点击 停止以停止主机虚拟机。

  6. 虚拟机停止后,点击 修改

  7. 安全与访问权限 > 访问权限范围下,选择授予对所有 Cloud API 的完整访问权限

  8. 点击保存

  9. 在主机虚拟机详情页面顶部,点击 启动/恢复以启动主机虚拟机。

  10. 如有必要,请重启主机虚拟机上停止的任何工作负载。

gcloud CLI

  1. 如有必要,请调整向虚拟机服务账号授予的 IAM 角色,以确保适当限制从主机虚拟机对 Google Cloud服务进行的访问。

    如需了解如何更改授予服务账号的角色,请参阅更新服务账号

  2. 如有必要,请停止主机虚拟机上运行的任何 SAP 软件。

  3. 停止虚拟机:

    gcloud compute instances stop VM_NAME --zone=VM_ZONE
  4. 更改虚拟机的访问权限范围:

    gcloud compute instances set-service-account VM_NAME --scopes=cloud-platform --zone=VM_ZONE
  5. 启动该虚拟机:

    gcloud compute instances start VM_NAME --zone=VM_ZONE
  6. 如有必要,请启动在主机虚拟机上运行的任何 SAP 软件。

允许主机虚拟机获取访问令牌

您需要为主机虚拟机创建一个专用服务账号,并向该服务账号授予获取 BigQuery Connector for SAP 访问Google Cloud所需的访问令牌的权限。

如需允许主机虚拟机获取访问令牌,请执行以下操作:

  1. 在 Google Cloud 控制台中,为主机虚拟机实例创建 IAM 服务账号。

    转到“服务账号”

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

  2. Service Account Token Creator 角色授予服务账号。 如需了解如何授予角色,请参阅授予单个角色

  3. 将服务账号关联到运行 SAP 工作负载的虚拟机实例。

    如需了解如何将服务账号关联到虚拟机实例,请参阅创建虚拟机并关联服务账号

主机虚拟机现在有权创建访问令牌。

创建 BigQuery 数据集

如需创建 BigQuery 数据集,您的用户账号必须具有针对 BigQuery 的适当 IAM 权限。如需了解详情,请参阅所需权限

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面:

    转到 BigQuery

  2. 点击您的项目 ID 旁边的查看操作图标 ,然后点击创建数据集

    前文中描述的示意图

  3. 数据集 ID 字段中,输入一个唯一名称。如需了解详情,请参阅命名数据集

如需详细了解如何创建 BigQuery 数据集,请参阅创建数据集

设置 TLS/SSL 证书和 HTTPS

BigQuery Connector for SAP 与 Google 服务之间的通信使用 TLS/SSL 和 HTTPS 进行保护。

  1. 如需连接到 Google 服务,请遵循 Google Trust Services 建议。您至少必须从 Google Trust Services 仓库下载所有根 CA 证书。

    为确保您使用的是最新的受信任根 CA 证书,我们建议您每六个月更新一次系统的根证书存储区。Google 会在 Google Trust Services 上发布新的和已移除的根 CA 证书。如需接收自动通知,请在 Google Trust Services 上订阅 RSS Feed。

  2. 在 SAP GUI 中,使用 STRUST 事务将根 CA 证书导入 SSL client SSL Client (Standard) PSE 文件夹。

    如需查看 SAP 提供的详细信息,请参阅 SAP 帮助 - 维护 PSE 认证列表

  3. 在 SAP LT Replication Server 主机上,确认已将所有防火墙规则或代理配置为允许从 HTTPS 端口到 BigQuery API 的出站流量。

    具体而言,SAP LT Replication Server 需要能够访问以下Google Cloud API:

    • https://bigquery.googleapis.com
    • https://iamcredentials.googleapis.com
    • https://pubsub.googleapis.com

    如果您希望 BigQuery Connector for SAP 通过 VPC 网络中的 Private Service Connect 端点访问 Google Cloud API,则必须配置 RFC 目标,并在这些 RFC 目标中指定 Private Service Connect 端点。如需了解详情,请参阅 RFC 目标

如需详细了解 SAP 提供的关于设置 TLS/SSL 的信息,请参阅 SAP 说明 510007 - 在应用服务器 ABAP 上设置 TLS/SSL 的其他考虑事项

/GOOG/CLIENT_KEY 中指定权限设置

使用 SM30 事务指定Google Cloud访问权限设置。BigQuery Connector for SAP 会将设置以记录的形式存储在 /GOOG/CLIENT_KEY 自定义配置表中。

如需指定访问权限设置,请执行以下操作:

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

  2. 选择 /GOOG/CLIENT_KEY 配置表。

  3. 为以下表字段输入值:

    字段 数据类型 说明
    名称 字符串

    CLIENT_KEY 配置指定描述性名称,例如 BQC_CKEY

    客户端密钥名称是 BigQuery Connector for SAP 用于标识访问 Google Cloud的配置的唯一标识符。

    服务账号名称 字符串

    创建服务账号步骤中为 BigQuery Connector for SAP 创建的服务账号的名称(采用邮箱格式)。例如:sap-example-svc-acct@example-project-123456.

    范围 字符串

    访问权限范围。 按照 Compute Engine 的建议指定 https://www.googleapis.com/auth/cloud-platform API 访问权限范围。 此访问权限范围对应于主机虚拟机上的设置 Allow full access to all Cloud APIs。如需了解详情,请参阅在主机虚拟机上设置访问权限范围

    项目 ID 字符串 包含您的目标 BigQuery 数据集的项目的 ID。
    命令名称 字符串

    将此字段留空。

    授权类 字符串 指定 /GOOG/CL_GCP_AUTH_GOOGLE
    授权字段 不适用 将此字段留空。
    令牌刷新秒数 整数

    访问令牌在多久后(以秒为单位)会到期并且必须刷新。默认值为 3500。您可以通过在高级设置中设置 CMD_SECS_DEFLT 参数的值来覆盖此默认值。

    如果指定 13599 的值,则会替换默认的到期时间。如果指定 0,BigQuery Connector for SAP 会使用默认值。

    令牌缓存 Boolean 此标志用于确定是否已缓存从 Google Cloud 检索到的访问令牌。

    我们建议您在配置 BigQuery Connector for SAP 并测试与 Google Cloud的连接后启用令牌缓存。如需详细了解令牌缓存,请参阅启用令牌缓存

配置 RFC 目标

如需将 BigQuery Connector for SAP 连接到 Google Cloud,我们建议您使用 RFC 目标

示例 RFC 目标 GOOG_IAMCREDENTIALSGOOG_BIGQUERY 将作为 BigQuery Connector for SAP 传输的一部分导入。

您需要复制示例 RFC 目标来创建新的 RFC 目标。

如需配置 RFC 目标,请执行以下操作:

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

  2. (推荐)复制示例 RFC 目标以创建新的 RFC 目标,然后记下新的 RFC 目标名称。您将在后续步骤中用到它们。

    BigQuery Connector for SAP 使用 RFC 目标连接到Google Cloud API。

    如果您想要测试基于 RFC 目标的连接,则可以跳过此步骤并使用示例 RFC 目标。

  3. 对于您创建的 RFC 目标,请执行以下操作:

    1. 进入 Technical Settings(技术设置)标签页,并确保 Service No.(服务编号)字段已设置为值 443。这是 RFC 目标用于安全通信的端口。

    2. 进入 Logon & Security(登录和安全)并确保 SSL Certificate(SSL 证书)字段设置了选项 DFAULT SSL Client (Standard)(默认 SSL 客户端 [标准])。

    3. (可选)您可以配置代理设置启用 HTTP 压缩以及指定 Private Service Connect 端点

    4. 保存更改。

    5. 要测试连接,请点击 Connection Test(连接测试)。

      包含 404 Not Found 的响应是可接受并且符合预期的,因为 RFC 目标中指定的端点对应于Google Cloud 服务,而不是该服务托管的特定资源。此响应表明目标 Google Cloud服务可访问并且未找到目标资源。

  4. 在 SAP GUI 中,输入事务代码 SM30

  5. 在上一部分中创建的 /GOOG/CLIENT_KEY 表中,记下名称字段的值。

  6. /GOOG/SERVIC_MAP 表中,使用以下字段值创建条目:

    Google Cloud 密钥名称 Google 服务名称 RFC 目标
    CLIENT_KEY_TABLE_NAME bigquery.googleapis.com 指定以 BigQuery 为目标的 RFC 目标的名称。如果您使用示例 RFC 目标进行测试,请指定 GOOG_BIGQUERY
    CLIENT_KEY_TABLE_NAME pubsub.googleapis.com 指定以 Pub/Sub 为目标的 RFC 目标的名称。如果您使用示例 RFC 目标进行测试,请指定 GOOG_PUBSUB
    CLIENT_KEY_TABLE_NAME iamcredentials.googleapis.com 指定以 IAM 为目标的 RFC 目标的名称。如果您使用示例 RFC 目标进行测试,请指定 GOOG_IAMCREDENTIALS

    CLIENT_KEY_TABLE_NAME 替换为您在上一步中记下的客户端密钥名称。

配置代理设置

使用 RFC 目标连接到 Google Cloud时,您可以通过您在 SAP 环境中使用的代理服务器来路由 BigQuery Connector for SAP 通信。

如果您不想使用代理服务器,或者您的 SAP 环境中没有代理服务器,则可以跳过此步骤。

如需为 BigQuery Connector for SAP 配置代理服务器设置,请完成以下步骤:

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

  2. 选择以 IAM 为目标的 RFC 目标。

  3. 进入 Technical Settings(技术设置)标签页,然后为 HTTP Proxy Options(HTTP 代理选项)部分中的字段输入值。

  4. 对以 BigQuery 为目标的 RFC 目标重复上述步骤。

启用 HTTP 压缩

使用 RFC 目标连接到 Google Cloud时,您可以启用 HTTP 压缩

如果您不想启用此功能,则可以跳过此步骤。

如需启用 HTTP 压缩,请执行以下操作:

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

  2. 选择以 BigQuery 为目标的 RFC 目标。

  3. 进入 Special Options(特殊选项)标签页。

  4. 对于 HTTP Version(HTTP 版本)字段,选择 HTTP 1.1

  5. 对于 Compression(压缩)字段中,选择适当的值。

    如需了解压缩选项,请参阅 SAP 说明 1037677 - HTTP 压缩仅压缩某些文档

指定 Private Service Connect 端点

如果您希望 BigQuery Connector for SAP 使用 Private Service Connect 端点以允许以非公开方式使用 BigQuery 和 IAM,则需要在 Google Cloud 项目中创建这些端点并在相应的 RFC 目标中指定它们。

如果您希望 BigQuery Connector for SAP 继续使用默认的公共 API 端点连接到 BigQuery 和 IAM,请跳过此步骤。

如需将 BigQuery Connector for SAP 配置为使用您的 Private Service Connect 端点,请执行以下操作:

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

  2. 验证您是否已为 BigQuery 和 IAM 创建了新的 RFC 目标。如需了解如何创建这些 RFC 目标,请参阅配置 RFC 目标

  3. 选择以 BigQuery 为目标的 RFC 目标,然后执行以下操作:

    1. 进入 Technical Settings(技术设置)标签页。

    2. 对于 Target Host(目标主机)字段,输入您为访问 BigQuery 而创建的 Private Service Connect 端点的名称。

    3. 进入 Logon and Security(登录和安全)标签页。

    4. 对于 Service No.(服务编号)字段,确保指定了值 443

    5. 对于 SSL Certificate(SSL 证书)字段,请确保已选中 DFAULT SSL Client (Standard)(默认 SSL 客户端 [标准])选项。

  4. 选择以 IAM 为目标的 RFC 目标,然后执行以下操作:

    1. 进入 Technical Settings(技术设置)标签页。

    2. 对于 Target Host(目标主机)字段,输入您为访问 IAM 而创建的 Private Service Connect 端点的名称。

    3. 进入 Logon and Security(登录和安全)标签页。

    4. 对于 Service No.(服务编号)字段,确保指定了值 443

    5. 对于 SSL Certificate(SSL 证书)字段,请确保已选中 DFAULT SSL Client (Standard)(默认 SSL 客户端 [标准])选项。

验证 Internet Communications Manager (ICM) 中的 HTTP 和 HTTPS 端口

虚拟机元数据存储在元数据服务器上,该元数据服务器只能通过 HTTP 端口访问。因此,您必须确认 HTTP 端口以及 HTTPS 端口均已创建并且处于活跃状态,才能访问虚拟机元数据。

  1. 在 SAP GUI 中,输入事务代码 SMICM
  2. 在菜单栏上,点击 Go > 服务Actv 列中的绿色对勾标记表示 HTTP 和 HTTPS 端口处于活跃状态。

如需了解如何配置 HTTP 和 HTTPS 端口,请参阅 ICM 中的 HTTP(S) 设置

测试 Google Cloud 身份验证和授权

通过请求访问令牌并检索 BigQuery 数据集的相关信息,确认已经正确配置 Google Cloud 身份验证。

请按照以下步骤从 SAP LT Replication Server 主机虚拟机测试 Google Cloud身份验证和授权:

  1. 在 SAP LT Replication Server 主机虚拟机上,打开命令行 shell。

  2. 切换到 sidadm 用户。

  3. 从主机虚拟机的元数据服务器请求第一个访问令牌:

    curl "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"

    元数据服务器会返回类似于以下示例的访问令牌,其中 ACCESS_TOKEN_STRING_1 是您要在后续步骤中复制到命令中的访问令牌字符串:

    {"access_token":"ACCESS_TOKEN_STRING_1",
    "expires_in":3599,"token_type":"Bearer"}
  4. 在替换占位符值后发出以下命令,以便从 IAM API 请求第二个访问令牌:

    Linux

    curl --request POST \
    "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT:generateAccessToken" \
      --header "Authorization: Bearer ACCESS_TOKEN_STRING_1" \
      --header "Accept: application/json" \
      --header "Content-Type: application/json" \
      --data "{"scope":["https://www.googleapis.com/auth/bigquery"],"lifetime":"300s"}" \
      --compressed
    

    Windows

    curl --request POST `
    "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/SERVICE_ACCOUNT:generateAccessToken" `
      --header "Authorization: Bearer ACCESS_TOKEN_STRING_1" `
      --header "Accept: application/json" `
      --header "Content-Type: application/json" `
      --data "{"scope":["https://www.googleapis.com/auth/bigquery"],"lifetime":"300s"}" `
      --compressed
    

    请替换以下内容:

    • SERVICE_ACCOUNT:您在先前步骤中为 BigQuery Connector for SAP 创建的服务账号。
    • ACCESS_TOKEN_STRING_1:先前步骤中获得的第一个访问令牌字符串。

    IAM API 返回第二个访问令牌 ACCESS_TOKEN_STRING_2,类似于以下示例。在下一步中,您要将第二个令牌字符串复制到对 BigQuery API 的请求中。

    {"access_token":"ACCESS_TOKEN_STRING_2","expires_in":3599,"token_type":"Bearer"}
  5. 替换占位符值后,发出以下命令,以便检索有关 BigQuery 数据集的信息:

    Linux

    curl "https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_NAME" \
    -H "Accept: application/json" -H "Authorization: Bearer ACCESS_TOKEN_STRING_2"
    

    Windows

    curl "https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET_NAME" `
    -H "Accept: application/json" -H "Authorization: Bearer ACCESS_TOKEN_STRING_2"
    

    请替换以下内容:

    • PROJECT_ID:包含您的 BigQuery 数据集的项目的 ID。
    • DATASET_NAME:在 BigQuery 中定义的目标数据集的名称。
    • ACCESS_TOKEN_STRING_2:先前步骤中由 IAM API 返回的访问令牌字符串。

    如果您的 Google Cloud 身份验证配置正确,系统会返回有关该数据集的信息。

    如果配置不正确,请参阅 BigQuery Connector for SAP 问题排查

后续步骤