1. 簡介
在本程式碼研究室中,我們列出使用 ABAP SDK for Google Cloud 從 Google 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. 需求條件
- 瀏覽器,例如 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。如要設定新系統,請參閱程式碼研究室 - 在 Google Cloud Platform 上安裝 ABAP Platform Trial 1909,並安裝 ABAP SDK。
- 您將使用 Cloud Shell,這是 Google Cloud 中執行的指令列環境。
- 在 Cloud Shell 中,按一下右上角的「啟用 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」IAM頁面。您建立的服務帳戶應會列出,以及已指派給該帳戶的角色。
7. 建立 Secret
- 在 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」。
- 按一下右側的三個點,然後選取「查看密鑰值」,系統就會顯示儲存的密鑰。
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」>「Basic Settings」>「Configure Client Key」。
- 針對欄位保留下列值:
欄位 | 說明 |
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」的報表。
- 在隨即開啟的彈出式視窗中,提供如下所示的詳細資料,然後按一下「儲存」。
- 在下一個彈出式視窗中,選取「本機物件」或提供適當的套件名稱。
- 在 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
- 刪除密鑰版本
- 刪除 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