使用 ABAP SDK for Google Cloud 从 Google Cloud Secret Manager 检索凭据/密钥

1. 简介

在此 Codelab 中,我们列出了如何使用 ABAP SDK for Google CloudGoogle Cloud Secret Manager API 检索凭据或密钥的步骤。

此 Codelab 中使用了以下 Google Cloud 服务:

  • Secret Manager
  • Cloud Shell

构建内容

您将执行以下操作:

  • 在 Google Cloud 项目中启用 Secret Manager API。
  • 创建 Secret。
  • 添加密文版本。
  • 使用 ABAP SDK for Google Cloud 访问/检索 Secret。

在此 Codelab 中,创建 Secret 和添加 Secret 版本的步骤将通过 gcloud 命令完成,但也可以使用 ABAP SDK for Google Cloud 随附的 Secret Manager 客户端库来完成。

2. 要求

  • 一个浏览器,例如 ChromeFirefox
  • 已启用结算功能的 Google Cloud 项目,或创建 Google Cloud Platform 90 天免费试用账号
  • 您的系统中已安装 SAP GUI(Windows 或 Java)。如果您的笔记本电脑上已安装 SAP GUI,请使用虚拟机的外部 IP 地址作为应用服务器 IP 连接到 SAP。如果您使用的是 Mac,还可以安装链接中提供的 SAP GUI for Java。

3. 准备工作

6757b2fb50ddcc2d.png

  • 运行以下命令,以针对您的账号进行身份验证并将默认项目设置为 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 实体:

  • Secret - Secret 是包含一系列元数据和 Secret 版本的全局项目对象。
  • 密文版本 - 密文版本会存储实际的密文数据,例如 API 密钥、密码或证书。

5. 在 Google Cloud 项目中启用 Secret Manager

  1. 前往您的 Google Cloud 项目,然后点击右上角的激活 Cloud Shell

8d15f753321c53e6.png

  1. 执行以下命令,在您的 Google Cloud 项目中启用 Cloud Secret Manager API。
gcloud services enable secretmanager.googleapis.com

您现在应该已在 Google Cloud 项目中启用 Secret Manager API。

6. 创建具有 Secret Manager 用户角色的服务账号

如需创建具有所需角色的服务账号,请执行以下步骤:

  1. 在 Cloud Shell 终端中运行以下命令:
gcloud iam service-accounts create abap-sdk-secretmanager-tester \
--display-name="Service Account for Secret Manager"
  1. 向在上一步中创建的服务账号添加所需角色,以创建密文、添加密文版本和访问密文版本。
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,如下所示。

99a318dbdd37af4e.png

8. 添加密文版本

  1. 在 Cloud Shell 中,运行以下命令以向 Secret“demo-secret”添加 Secret 版本。
echo -n "This is my super secret data" | \
    gcloud secrets versions add demo-secret --data-file=-

创建了密文版本。如需查看详细信息,请点击“demo-secret”。

bbf6b9f2f9c4340a.png

  1. 点击右侧的三点状图标,然后选择查看密文值,系统会显示存储的密文。

6f3afd0ac25445bf.png

9. 在 SAP 中创建 SDK 配置

现在,您已在 Google Cloud 端设置了前提条件,接下来可以在 SAP 端继续进行配置。对于与身份验证和连接相关的配置,ABAP SDK for Google Cloud 使用表 /GOOG/CLIENT_KEY。

如需维护 /GOOG/CLIENT_KEY 表中的配置,请执行以下步骤:

  1. 在 SAP GUI 中,输入事务代码 SPRO。
  2. 点击 SAP 参考 IMG
  3. 点击 ABAP SDK for Google Cloud > 基本设置 > 配置客户端密钥
  4. 针对相应字段保持以下值:

字段

说明

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

  1. 登录您的 SAP 系统。
  2. 前往事务代码 SE38,然后创建一个名为“ZDEMO_ACCESS_SECRET”的报告。
  3. 在随即打开的弹出式窗口中,提供如下所示的详细信息,然后点击保存

b1ef7c7744ceb5ce.png

  1. 在下一个弹出式窗口中,选择本地对象或提供软件包名称(视情况而定)。
  • 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.
  1. 保存并启用报告程序。
  2. 执行报告(按 F8)。

成功执行后,您应该会看到如下所示的报告输出:

24acec0fc2d4d18b.png

11. 恭喜

恭喜!您已成功使用 ABAP SDK for Google Cloud 检索到存储在 Google Cloud Platform Secret Manager 中的密文。

Google Cloud Secret Manager 还具有其他功能,例如:

  • 修补 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

删除单个资源

  1. 删除计算实例:
gcloud compute instances delete abap-trial-docker
  1. 删除防火墙规则:
gcloud compute firewall-rules delete sapmachine
  1. 删除服务账号:
gcloud iam service-accounts delete \
 abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com