1. 简介
在此 Codelab 中,我们列出了使用 ABAP SDK for Google Cloud 从 Google Cloud Secret Manager API 检索凭据或密钥的步骤。
此 Codelab 中使用了以下 Google Cloud 服务:
- Secret Manager
- Cloud Shell
构建内容
您将执行以下操作:
- 在 Google Cloud 项目中启用 Secret Manager API。
- 创建 Secret。
- 添加 Secret 版本。
- 使用 ABAP SDK for Google Cloud 访问/检索 Secret。
在此 Codelab 中,创建 Secret 和添加 Secret 版本的步骤将通过 gcloud 命令完成,但也可以使用 ABAP SDK for Google Cloud 提供的 Secret Manager 客户端库来完成。
2. 要求
- 一个浏览器,例如 Chrome 或 Firefox。
- 已启用结算功能的 Google Cloud 项目,或为 Google Cloud Platform 创建 90 天免费试用账号。
- 系统中安装了 SAP GUI(Windows 或 Java 版)。如果您的笔记本电脑上已安装 SAP GUI,请使用虚拟机外部 IP 地址作为应用服务器 IP 地址连接到 SAP。如果您使用的是 Mac,还可以安装 此链接中提供的 SAP GUI for Java。
3. 准备工作
- 您已在系统上安装 ABAP SDK for Google Cloud。您可以参阅 Codelab - 在 Google Cloud Platform 上安装 ABAP Platform Trial 1909 并安装 ABAP SDK,以设置新系统。
- 您将使用 Cloud Shell,它是在 Google Cloud 中运行的命令行环境。
- 在 Cloud 控制台中,点击右上角的“激活 Cloud Shell”:
- 运行以下命令以对您的账号进行身份验证,并将默认项目设置为
abap-sdk-poc
。以区域us-west4-b
为例。如果需要,请根据您的偏好更改以下命令中的项目和可用区。
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
4. 概览
下面简要介绍了您在此 Codelab 中将要使用的一些 Secret Manager 实体:
5. 在 Google Cloud 项目中启用 Secret Manager
- 前往您的 Google Cloud 项目,然后点击右上角的激活 Cloud Shell。
- 执行以下命令可在 Google Cloud 项目中启用 Cloud Secret Manager API。
gcloud services enable secretmanager.googleapis.com
现在,您应该已在 Google Cloud 项目中启用 Secret Manager API。
6. 创建具有 Secret Manager 用户角色的服务账号
如需创建具有所需角色的服务账号,请执行以下步骤:
- 在 Cloud Shell 终端中运行以下命令:
gcloud iam service-accounts create abap-sdk-secretmanager-tester \
--display-name="Service Account for Secret Manager"
- 向在上一步中创建的服务账号添加所需角色,以创建密钥、添加密钥版本和访问密钥版本。
gcloud endpoints services add-iam-policy-binding secretmanager.googleapis.com \ --member='serviceAccount:abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/secretmanager.secrets.create'
gcloud endpoints services add-iam-policy-binding secretmanager.googleapis.com \ --member='serviceAccount:abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/secretmanager.versions.add'
gcloud endpoints services add-iam-policy-binding secretmanager.googleapis.com \ --member='serviceAccount:abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/roles/secretmanager.versions.access'
上述命令使用 abap-sdk-poc
作为 Google Cloud 项目的占位符。将 abap-sdk-poc
替换为您的项目 ID。
- 如需验证是否已添加该角色,请前往 IAM 页面。您创建的服务账号应会显示在列表中,并且会注明为其分配的角色。
7. 创建 Secret
- 在 Cloud Shell 中,运行以下命令,为本 Codelab 创建一个名为“demo-secret”的 Secret:
gcloud secrets create demo-secret \
--replication-policy="automatic"
您应该会看到在 Google Cloud 项目中创建的 Secret,如下所示。
8. 添加 Secret 版本
- 在 Cloud Shell 中,运行以下命令将 Secret 版本添加到 Secret“demo-secret”。
echo -n "This is my super secret data" | \
gcloud secrets versions add demo-secret --data-file=-
系统会创建一个 Secret 版本。如需查看详情,请点击“demo-secret”。
- 点击右侧的三点状图标,然后选择查看密文值,系统会显示存储的密文。
9. 在 SAP 中创建 SDK 配置
现在,您已在 Google Cloud 端设置好前提条件,接下来我们可以继续在 SAP 端进行配置。对于与身份验证和连接相关的配置,ABAP SDK for Google Cloud 使用表 /GOOG/CLIENT_KEY。
如需维护表 /GOOG/CLIENT_KEY 中的配置,请执行以下步骤:
- 在 SAP GUI 中,输入事务代码 SPRO。
- 点击 SAP 参考 IMG。
- 依次点击 ABAP SDK for Google Cloud > 基本设置 > 配置客户端密钥。
- 为以下字段保留以下值:
字段 | 说明 |
Google Cloud 密钥名称 | SECRET_MANAGER_DEMO |
Google Cloud 服务账号名称 | abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com |
Google Cloud 范围 | https://www.googleapis.com/auth/cloud-platform |
Google Cloud 项目标识符 | <<您的 Google Cloud 项目 ID>> |
授权类 | /GOOG/CL_AUTH_GOOGLE |
将其他字段留空。
10. 使用 SDK 检索 Secret
- 登录您的 SAP 系统。
- 前往事务代码 SE38,然后创建一个名为“ZDEMO_ACCESS_SECRET”的报告。
- 在随即打开的弹出式窗口中,提供详细信息(如下所示),然后点击保存。
- 在下一个弹出式窗口中,选择本地对象或根据需要提供软件包名称。
- 在 ABAP 编辑器中,添加以下代码:
* Data declarations
DATA:
lv_p_projects_id TYPE string,
lv_p_secrets_id TYPE string,
lv_p_versions_id TYPE string.
TRY.
* Open HTTP Connection
DATA(lo_client) = NEW /goog/cl_secretmgr_v1( iv_key_name = 'SECRET_MANAGER_DEMO' ).
* Populate relevant parameters
lv_p_projects_id = lo_client->gv_project_id.
lv_p_secrets_id = 'demo-secret'.
lv_p_versions_id = 'latest'.
* Call API method: secretmanager.projects.secrets.versions.access
lo_client->access_versions(
EXPORTING
iv_p_projects_id = lv_p_projects_id
iv_p_secrets_id = lv_p_secrets_id
iv_p_versions_id = lv_p_versions_id
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_client->is_success( lv_ret_code ).
cl_http_utility=>if_http_utility~decode_base64(
EXPORTING
encoded = ls_output-payload-data
RECEIVING
decoded = DATA(lv_decoded_secret) ).
DATA(lv_msg) = 'Secret data fetched successfully, Decoded Secret: ' && lv_decoded_secret.
cl_demo_output=>display( lv_msg ).
ELSE.
lv_msg = lv_ret_code && ':' && lv_err_text.
cl_demo_output=>display( lv_msg ).
ENDIF.
* Close HTTP Connection
lo_client->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
MESSAGE lo_exception->get_text( ) TYPE 'E'.
ENDTRY.
- 保存并启用报告程序。
- 执行报告(按 F8)。
执行成功后,您应该会看到如下所示的报告输出:
11. 恭喜
恭喜!您已成功使用 ABAP SDK for Google Cloud 检索存储在 Google Cloud Platform Secret Manager 中的密钥。
Google Cloud Secret Manager 还提供其他功能,例如:
- 修补 Secret
- 销毁 Secret 版本
- 删除 Secret
您可以通过 ABAP SDK for Google Cloud 从 SAP 应用调用这些 Secret Manager 功能。
12. 清理
如果您不想继续学习与 ABAP SDK for Google Cloud 相关的其他 Codelab,请继续进行清理。
删除项目
- 删除 Google Cloud 项目:
gcloud projects delete abap-sdk-poc
删除各个资源
- 删除计算实例:
gcloud compute instances delete abap-trial-docker
- 删除防火墙规则:
gcloud compute firewall-rules delete sapmachine
- 删除服务账号:
gcloud iam service-accounts delete \
abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com