本文档介绍了如何设置身份验证,以便在 SAP 系统在 Compute Engine 虚拟机实例上托管时访问 Google Cloud。
如需向 Google Cloud 进行身份验证并获得访问 BigQuery 的授权, Google Cloud 安全管理员和 SAP 管理员需要完成以下操作:
- 为 BigQuery Connector for SAP 创建服务账号。
- 向服务账号授予访问 BigQuery 所需的 IAM 角色。
- 将 BigQuery Connector for SAP 服务账号添加为 BigQuery 项目中的主账号。
- 在 SAP LT Replication Server 主机上为 Google Cloud 配置安全设置:
- 向主机虚拟机授予获取访问令牌的权限。
- 如有必要,请修改主机虚拟机的 API 访问权限范围。
创建服务账号
BigQuery Connector for SAP 需要 IAM 服务账号才能进行身份验证和授权,以便访问 BigQuery。
此服务账号必须是包含 BigQuery 数据集的 Google Cloud 项目中的主账号。如果您在 BigQuery 数据集所在的项目中创建服务账号,该服务账号会自动添加为该项目的主账号。
如果您在不同于 BigQuery 数据集的项目中创建服务账号,则需要在额外步骤中将该服务账号添加到 BigQuery 数据集项目。
如需创建服务账号,请完成以下步骤:
在 Google Cloud 控制台中,前往“IAM 和管理”的服务账号页面。
如果出现提示,请选择您的 Google Cloud 项目。
点击创建服务账号。
为服务账号指定名称并提供说明(可选)。
点击创建并继续。
如果您要在 BigQuery 数据集所在的项目中创建服务账号,请在向此服务账号授予对项目的访问权限面板中,选择以下角色:
- BigQuery Data Editor
- BigQuery Job User
如果您要在不同于 BigQuery 数据集的项目中创建服务账号,请不要向服务账号授予任何角色。
点击继续。
根据具体情况授予其他用户访问服务账号的权限。
点击完成。该服务账号会显示在项目的服务账号列表中。
如果您在与 BigQuery 数据集所在项目不同的项目中创建服务账号,请记下服务账号的名称。您可以在将服务账号添加到 BigQuery 项目时指定该名称。如需了解详情,请参阅 将服务账号添加到 BigQuery 项目。
现在该服务账号会在创建它的 Google Cloud 项目的 IAM 权限页面上列为主账号。
将服务账号添加到 BigQuery 项目
如果您在与目标 BigQuery 数据集不同的项目中为 BigQuery Connector for SAP 创建了服务账号,则需要将服务账号添加到 BigQuery 数据集项目。
如果您在 BigQuery 数据集所在的项目中创建了服务账号,则可以跳过此步骤。
如需将现有服务账号添加到 BigQuery 数据集项目,请完成以下步骤:
在 Google Cloud 控制台中,前往“IAM 权限”页面:
确认页面顶部显示包含目标 BigQuery 数据集的项目的名称。例如:
项目“
PROJECT_NAME
”的权限如果未显示,请切换项目。
在 IAM 页面上,点击
添加。系统会打开为“PROJECT_NAME
”添加主账号对话框。在为“
PROJECT_NAME
”添加主账号对话框中,完成以下步骤:- 在新的主账号字段中,指定服务账号的名称。
- 在选择角色字段中,指定 BigQuery Data Editor。
- 点击添加其他角色。选择角色字段将再次显示。
- 在选择角色字段中,指定 BigQuery Job User。
- 点击保存。该服务账号会显示在 IAM 页面上的项目主账号列表中。
现在,您可以使用此服务账号访问此项目中的 BigQuery 数据集。
在主机虚拟机上配置安全设置
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 控制台
在 Google Cloud 控制台中,打开“虚拟机实例”页面:
如有必要,请选择包含 SAP LT Replication Server 主机的 Google Cloud 项目。
在虚拟机实例页面上,点击主机虚拟机的名称。虚拟机详情页面随即打开。
在主机虚拟机详情页面上的 API 和身份管理下,检查 Cloud API 访问权限范围的当前设置:
- 如果设置为授予对所有 Cloud API 的完整访问权限,则设置正确,您无需进行更改。
- 如果设置不是授予对所有 Cloud API 的完整访问权限,则需要停止虚拟机并更改此设置。有关说明,请参阅下一部分。
gcloud CLI
显示主机虚拟机的当前访问权限范围:
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@developer.gserviceaccount.com 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@developer.gserviceaccount.com scopes: - https://www.googleapis.com/auth/cloud-platform
更改主机虚拟机的 API 访问权限范围
如果 SAP LT Replication Server 主机虚拟机没有对Google Cloud API 的完整访问权限,请更改访问权限范围以允许对所有 Cloud API 的完整访问权限。
如需更改主机虚拟机的 Cloud API 访问权限范围设置,请完成以下步骤:
Google Cloud 控制台
如有必要,请限制授予主机虚拟机安全账号的角色。
您可以在主机虚拟机详情页面上的 API 和身份管理下找到安全账号名称。您可以在 Google Cloud 控制台的 IAM 页面上的主账号下更改向服务账号授予的角色。
如有必要,请停止主机虚拟机上运行的任何工作负载。
在 Google Cloud 控制台中,打开“虚拟机实例”页面:
在虚拟机实例页面上,点击主机虚拟机的名称以打开虚拟机详情页面。
在主机虚拟机详情页面顶部,点击
停止以停止主机虚拟机。虚拟机停止后,点击
修改。在安全与访问权限 > 访问权限范围下,选择授予对所有 Cloud API 的完整访问权限。
点击保存。
在主机虚拟机详情页面顶部,点击
启动/恢复以启动主机虚拟机。如有必要,请重启主机虚拟机上停止的任何工作负载。
gcloud CLI
如有必要,请调整向虚拟机服务账号授予的 IAM 角色,以确保适当限制从主机虚拟机对 Google Cloud服务进行的访问。
如需了解如何更改授予服务账号的角色,请参阅更新服务账号。
如有必要,请停止主机虚拟机上运行的任何 SAP 软件。
停止虚拟机:
gcloud compute instances stop VM_NAME --zone=VM_ZONE
更改虚拟机的访问权限范围:
gcloud compute instances set-service-account VM_NAME --scopes=cloud-platform --zone=VM_ZONE
启动该虚拟机:
gcloud compute instances start VM_NAME --zone=VM_ZONE
如有必要,请启动在主机虚拟机上运行的任何 SAP 软件。
允许主机虚拟机获取访问令牌
您需要向主机虚拟机的服务账号授予获取 BigQuery Connector for SAP 访问 BigQuery 所需的访问令牌的权限。
如需授予创建访问令牌的权限,请完成以下步骤:
在 Google Cloud 控制台中,打开 Compute Engine 虚拟机实例页面:
点击主机虚拟机的名称,打开“虚拟机详情”页面。
在“虚拟机详情”页面上的 API 和身份管理下,记下服务账号的名称。以下示例名称适用于默认 Compute Engine 服务账号:
SVC-ACCT-NUMBER-compute@developer.gserviceaccount.com
在 Google Cloud 控制台中,前往 IAM 页面:
在项目主账号列表中,找到服务账号名称,然后点击
修改主账号。此时会打开修改权限对话框。在修改权限窗格中,点击添加其他角色。此时将显示选择角色字段。
在选择角色字段中,指定 Service Account Token Creator。
点击保存。您将返回到 IAM 权限页面。
主机虚拟机现在有权创建访问令牌。
设置 TLS/SSL 证书和 HTTPS
BigQuery Connector for SAP 和 BigQuery API 之间的通信使用 TLS/SSL 和 HTTPS 进行保护。
如需连接到 Google 服务,请遵循 Google Trust Services 建议。您至少必须从 Google Trust Services 仓库下载所有根 CA 证书。
为确保您使用的是最新的受信任根 CA 证书,我们建议您每六个月更新一次系统的根证书存储区。Google 会在 Google Trust Services 上发布新的和已移除的根 CA 证书。如需接收自动通知,请在 Google Trust Services 上订阅 RSS Feed。
在 SAP GUI 中,使用
STRUST
事务将根 CA 证书导入SSL client SSL Client (Standard)
PSE 文件夹。如需查看 SAP 提供的详细信息,请参阅 SAP 帮助 - 维护 PSE 认证列表。
在 SAP LT Replication Server 主机上,确认已将所有防火墙规则或代理配置为允许从 HTTPS 端口到 BigQuery API 的出站流量。
具体而言,SAP LT Replication Server 需要能够访问以下Google Cloud API:
https://bigquery.googleapis.com
https://iamcredentials.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 的其他考虑事项。
验证 Internet Communications Manager (ICM) 中的 HTTP 和 HTTPS 端口
虚拟机元数据存储在元数据服务器上,该元数据服务器只能通过 HTTP 端口访问。因此,您必须确认 HTTP 端口以及 HTTPS 端口均已创建并且处于活跃状态,才能访问虚拟机元数据。
- 在 SAP GUI 中,输入事务代码
SMICM
。 - 在菜单栏上,点击 Go > 服务。Actv 列中的绿色对勾标记表示 HTTP 和 HTTPS 端口处于活跃状态。
如需了解如何配置 HTTP 和 HTTPS 端口,请参阅 ICM 中的 HTTP(S) 设置。
测试 Google Cloud 身份验证和授权
通过请求访问令牌并检索 BigQuery 数据集的相关信息,确认已经正确配置 Google Cloud 身份验证。
请按照以下步骤从 SAP LT Replication Server 主机虚拟机测试 Google Cloud身份验证和授权:
在 SAP LT Replication Server 主机虚拟机上,打开命令行 shell。
切换到
sidadm
用户。从主机虚拟机的元数据服务器请求第一个访问令牌:
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"}
在替换占位符值后发出以下命令,以便从 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"}
替换占位符值后,发出以下命令,以便从 BigQuery API 检索有关 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 问题排查。