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

1. 簡介

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

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

  • Secret Manager
  • Cloud Shell

建構項目

您將執行下列操作:

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

在本程式碼研究室中,建立密鑰和新增密鑰版本的步驟會透過 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 頁面。您建立的服務帳戶應會列出,並顯示已指派給該帳戶的角色。

7. 建立密鑰

  • 在 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. 按一下右側的三點圖示,然後選取「View Secret Value」(查看密鑰值),系統就會顯示已儲存的密鑰。

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」>「基本設定」>「設定用戶端金鑰」
  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. 在下一個彈出式視窗中,選取「Local Object」或提供適當的套件名稱。
  • 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

您可以透過 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