ABAP SDK for Google Cloud を使用して Google Cloud Secret Manager から認証情報/シークレットを取得する

1. はじめに

この Codelab では、ABAP SDK for Google Cloud を使用して Google Cloud Secret Manager API から認証情報またはシークレットを取得する手順について説明します。

この Codelab では、次の Google Cloud サービスを使用します。

  • Secret Manager
  • Cloud Shell

作成するアプリの概要

次の操作を行います。

  • Google Cloud プロジェクトで Secret Manager API を有効にします。
  • Secret を作成する
  • シークレット バージョンを追加します。
  • ABAP SDK for Google Cloud を使用してシークレットへのアクセスと取得を行う。

この Codelab では、シークレットの作成とシークレット バージョンの追加の手順を gcloud コマンドを使用して行いますが、ABAP SDK for Google Cloud に付属の 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. 概要

この 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'

上記のコマンドでは、Google Cloud プロジェクトのプレースホルダとして abap-sdk-poc を使用しています。abap-sdk-poc は、実際のプロジェクト ID に置き換えます。

  • ロールが追加されたことを確認するには、[IAM] ページに移動します。作成したサービス アカウントと、そのサービス アカウントに割り当てられたロールが一覧表示されます。

7. Secret を作成する

  • Cloud Shell で次のコマンドを実行して、この Codelab 用に「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 参照 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 の削除

これらの Secret Manager 機能は、SAP アプリケーションから ABAP SDK for Google Cloud を介して呼び出すことができます。

12. クリーンアップ

ABAP SDK for Google Cloud に関連する追加の Codelabs を続行しない場合は、クリーンアップに進んでください。

プロジェクトを削除する

  • 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