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. 次のポップアップで、必要に応じて [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 のパッチ適用
  • シークレット バージョンの破棄
  • 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. firewall-rules を削除します。
gcloud compute firewall-rules delete sapmachine
  1. サービス アカウントを削除します。
gcloud iam service-accounts delete \
 abap-sdk-secretmanager-tester@abap-sdk-poc.iam.gserviceaccount.com