使用 ABAP SDK for Google Cloud 從 Google Cloud Secret Manager 擷取憑證/密鑰

1. 簡介

在本程式碼研究室中,我們列出使用 ABAP SDK for Google CloudGoogle Cloud Secret Manager API 擷取憑證或密鑰的步驟。

本程式碼研究室會使用下列 Google Cloud 服務:

  • Secret Manager
  • Cloud Shell

建構項目

您將執行下列操作:

  • 在 Google Cloud 專案中啟用 Secret Manager API。
  • 建立密鑰。
  • 新增密鑰版本。
  • 使用 ABAP SDK for Google Cloud 存取/擷取密鑰。

在本程式碼研究室中,建立密鑰和新增密鑰版本的步驟會透過 gcloud 指令完成,但您也可以使用 Google Cloud ABAP SDK 提供的 Secret Manager 用戶端程式庫完成這些步驟。

2. 需求條件

  • 瀏覽器,例如 ChromeFirefox
  • 啟用計費功能的 Google Cloud 專案,或建立 Google Cloud Platform 90 天免費試用帳戶
  • 系統中已安裝 SAP GUI (Windows 或 Java)。如果筆電上已安裝 SAP GUI,請使用 VM 外部 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. 總覽

以下簡要說明您在本程式碼研究室中會用到的一些 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」IAM頁面。您建立的服務帳戶應會列出,以及已指派給該帳戶的角色。

7. 建立 Secret

  • 在 Cloud Shell 中執行下列指令,為本程式碼研究室建立名為「demo-secret」的密鑰:
gcloud secrets create demo-secret \
    --replication-policy="automatic"

您應該會看到在 Google Cloud 專案中建立的密鑰,如下所示。

99a318dbdd37af4e.png

8. 新增密鑰版本

  1. 在 Cloud Shell 中執行下列指令,將密鑰版本新增至「demo-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 Reference IMG」
  3. 依序點選「ABAP SDK for Google Cloud」>「Basic Settings」>「Configure Client Key」
  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 專案 ID

<<您的 Google Cloud 專案 ID>>

授權類別

/GOOG/CL_AUTH_GOOGLE

將其他欄位留空。

10. 使用 SDK 擷取密鑰

  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

您可以透過 SAP 應用程式的 ABAP SDK for Google Cloud,叫用這些 Secret Manager 功能。

12. 清除所用資源

如不想繼續進行與 Google Cloud 適用的 ABAP SDK 相關的額外程式碼研究室,請繼續進行清理作業。

刪除專案

  • 刪除 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