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. 需求條件
- Chrome 或 Firefox 等瀏覽器。
- 已啟用計費功能的 Google Cloud 專案,或為 Google Cloud Platform 建立 90 天免費試用帳戶。
- 系統中安裝了 SAP GUI (Windows 或 Java)。如果筆電上已安裝 SAP GUI,請使用 VM 外部 IP 位址做為應用程式伺服器 IP,連線至 SAP。如果您使用 Mac,也可以安裝 這個連結中的 SAP GUI for Java。
3. 事前準備
- 您已在系統上安裝 ABAP SDK for Google Cloud。如要設定新系統,請參閱 Codelab - 在 Google Cloud Platform 上安裝 ABAP 平台試用版 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. 總覽
以下簡要介紹您在本程式碼研究室中會用到的 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. 建立密鑰
- 在 Cloud Shell 中執行下列指令,為本程式碼研究室建立名為「demo-secret」的密鑰:
gcloud secrets create demo-secret \
--replication-policy="automatic"
您應該會看到在 Google Cloud 專案中建立的秘密,如下所示。
8. 新增密鑰版本
- 在 Cloud Shell 中執行下列指令,為密鑰「demo-secret」新增版本。
echo -n "This is my super secret data" | \
gcloud secrets versions add demo-secret --data-file=-
密鑰版本已建立。如要查看詳細資料,請按一下「demo-secret」。
- 按一下右側的三點圖示,然後選取「View Secret Value」(查看密鑰值),系統就會顯示已儲存的密鑰。
9. 在 SAP 中建立 SDK 設定
您已在 Google Cloud 端設定必要條件,現在可以繼續進行 SAP 端的設定。針對驗證和連線相關設定,ABAP SDK for Google Cloud 會使用 /GOOG/CLIENT_KEY 資料表。
如要維護 /GOOG/CLIENT_KEY 表格中的設定,請執行下列步驟:
- 在 SAP GUI 中輸入交易代碼 SPRO。
- 按一下「SAP Reference 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 專案 ID | <<您的 Google Cloud 專案 ID>> |
授權類別 | /GOOG/CL_AUTH_GOOGLE |
將其他欄位留空。
10. 使用 SDK 擷取密鑰
- 登入 SAP 系統。
- 前往交易代碼 SE38,然後建立名稱為「ZDEMO_ACCESS_SECRET」的報表。
- 在隨即開啟的彈出式視窗中,提供下方所示的詳細資料,然後按一下「儲存」。
- 在下一個彈出式視窗中,選取「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.
- 儲存並啟用報表計畫。
- 執行報表 (按下 F8)。
執行成功後,您應該會看到下列報表輸出內容:
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
刪除個別資源
- 刪除運算執行個體:
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