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. 要件
- ブラウザ(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 Platform Trial 1909 をインストールして ABAP SDK をインストールするをご覧ください。
- Google Cloud 上で動作するコマンドライン環境の Cloud Shell を使用します。
- 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. 概要
この Codelab で使用する Secret Manager のエンティティの概要は次のとおりです。
- シークレット - シークレットは、メタデータとシークレット バージョンのコレクションを含むプロジェクト グローバル オブジェクトです。
- シークレット バージョン - シークレット バージョンには、API キー、パスワード、証明書などの実際のシークレット データが保存されます。
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'
上記のコマンドでは、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 プロジェクトに作成されたシークレットが表示されます。
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 参照 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 の削除
これらの Secret Manager 機能は、SAP アプリケーションから ABAP SDK for Google Cloud を介して呼び出すことができます。
12. クリーンアップ
ABAP SDK for Google Cloud に関連する追加の Codelabs を続行しない場合は、クリーンアップに進んでください。
プロジェクトを削除する
- 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