使用 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。
  • 添加 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 实体:

  • 密文 - 密文是包含项目元数据和密文版本的项目 - 全局对象。
  • 密文版本 - 密文版本会存储实际的密文数据,例如 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. 添加 Secret 版本

  1. 在 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”。

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 版本
  • 删除 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