JSON Web Token を使用して認証する

このドキュメントでは、SAP システムがオンプレミス、別のクラウド プロバイダ、Google Cloud 以外の別の環境にあるホストで実行されている場合、または SAP RISE プログラムを介して SAP によって管理されている場合に、Google Cloud APIs にアクセスするための認証の設定方法について説明します。Google Cloud への認証の場合、Google Cloud の署名付き JSON ウェブトークン(JWT)を使用して Google Cloud からアクセス トークンを取得します。

おおまかな構成手順は次のとおりです。

JWT ベースのトークンを取得するためのサービス アカウントを作成する

Google Cloud で JWT ベースの認証を行う場合、ABAP SDK for Google Cloud に IAM サービス アカウントが必要です。

サービス アカウントを作成する

サービス アカウントを作成し、サービス アカウントに Service Account Token Creator IAM ロールを付与します。

サービス アカウントを作成するには、次の手順を実施します。

  1. Google Cloud コンソールで、JWT ベースのトークンを取得するための IAM サービス アカウントを作成します。

    [サービス アカウント] に移動

    サービス アカウントの作成方法については、サービス アカウントを作成するをご覧ください。

  2. サービス アカウントに Service Account Token Creator ロールを付与します。手順については、単一ロールの付与をご覧ください。

サービス アカウント キーを作成する

JWT ベースのトークンを取得するためのサービス アカウントに、P12 サービス アカウント キーを作成する必要があります。

サービス アカウント キーを作成するには、次の操作を行います。

  1. Google Cloud コンソールで、[IAM と管理] の [サービス アカウント] ページに移動します。

    [サービス アカウント] に移動

  2. Google Cloud プロジェクトを選択します。

  3. 前のセクションのサービス アカウントを作成するで、JWT ベースのトークンの取得用に作成したサービス アカウントのメールアドレスをクリックします。

  4. サービス アカウント名で [キー] タブをクリックします。

  5. [鍵を追加] プルダウン メニューをクリックして [新しい鍵を作成] を選択し、サービス アカウント キーを作成します。

  6. 鍵のタイプとして P12 を使用し、[作成] をクリックします。

    秘密鍵がダウンロードされます。

  7. 秘密鍵ファイル notasecret のパスワードをメモします。

    秘密鍵を SAP 管理者に提供して、STRUST に秘密鍵をインポートします。詳細については、サービス アカウント キーを STRUST にインポートするをご覧ください。

JWT 署名用のサービス アカウントを指定する

Google Cloud APIs を含むプロジェクトとは異なるプロジェクトで JWT 署名用のサービス アカウントを作成した場合は、SAP ホストシステムでサービス アカウントを指定する必要があります。

Google Cloud APIs を含むプロジェクトにサービス アカウントを作成した場合は、この手順をスキップします。

JWT 署名のサービス アカウントを指定するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード /GOOG/SDK_IMG を実行します。

    または、トランザクション コード SPRO を実行して、[SAP Reference IMG] をクリックします。

  2. [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Parameters] をクリックします。

  3. [New Entries] をクリックします。

  4. [Parameter Name] フィールドに「JWT_SERVC_ACCT」と入力します。パラメータの説明は自動的に入力されます。

  5. [Parameter Value] フィールドに、サービス アカウントの名前を入力します。

  6. 新しいエントリを保存します。

SAP ホストシステムで Google Cloud のセキュリティ設定を構成する

JWT ベースのトークンを取得するために作成したサービス アカウントで JWT 署名を有効にするには、SAP ホストシステムで Google Cloud のセキュリティ設定を構成する必要があります。

新しい Secure Store and Forward(SSF)アプリケーションを作成する

SSFAPPLIC エントリに 1 つのサービス アカウント キーを保存できます。複数のプロジェクトのサービス アカウント キーを保存するには、同じ手順で複数の SSFAPPLIC エントリを作成する必要があります。

テーブル SSFAPPLIC に新しいエントリを作成するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード SE16 を入力します。
  2. [Table Name] フィールドに「SSFAPPLIC」と入力し、新しいエントリを作成します。
  3. [APPLIC] フィールドに、SSF アプリケーションの名前を入力します(例: ZG_JWT)。
  4. [B_INCCERTS]、[B_DETACHED]、[B_ASKPWD]、[B_DISTRIB] 以外のすべてのフィールドを選択します。
  5. [DESCRIPT] フィールドに「JWT Signature for GCP」と入力します。
  6. 新しいエントリを保存します。

    このエントリは、トランザクション STRUST で新しいノードになり、ここにサービス アカウント キーをインポートします。

STRUST ノードを有効にする

トランザクション SSFA を使用して、JWT Signature for GCPSTRUST ノードを有効にします。

STRUST ノードを有効にするには、次の操作を行います。

  1. SAP GUI で、トランザクション コード SSFA を入力します。
  2. [New Entries] をクリックします。
  3. [SSF Application] プルダウン リストで JWT Signature for GCP を選択します。これは、テーブル SSFAPPLIC に作成した新しいエントリです。

    アプリケーション固有の SSF パラメータが自動的に入力されます。

  4. 新しいエントリを保存します。

    トランザクション STRUST で新しいノード SSF JWT Signature for GCP が有効になります。

サービス アカウント キーを STRUST にインポートする

サービス アカウント キーを STRUST にインポートするには、次の操作を行います。

  1. SAP GUI で、トランザクション コード STRUST を入力します。

    トランザクション STRUST の新しいノードが SSF JWT Signature for GCP であることを確認します。

  2. 秘密鍵ファイルをインポートします。

    1. メニューバーから [PSE] > [Import] を選択します。
    2. ご使用の SAP システムに応じて、適切な秘密鍵を選択します。
      • SAP S/4HANA
        1. P12 秘密鍵を選択します。
        2. ファイルのパスワード notasecret を入力して、[OK] をクリックします。
      • SAP ECC
        1. PSE 秘密鍵を選択します。以前にダウンロードした P12 秘密鍵を PSE 秘密鍵に変換する必要があります。P12 鍵を PSE 鍵に変換する方法については、P12 鍵を PSE 鍵に変換するをご覧ください。
        2. 秘密鍵を P12 鍵から PSE 鍵に変換する際に作成したファイルの PIN を入力して、[OK] をクリックします。
  3. [PSE] > [Save as] を選択します。

  4. [SSF Application] を選択し、対応する入力フィールドで、新しい Secure Store and Forward(SSF)アプリケーションを作成するで作成した新しい SSF アプリケーション ノードを選択します。

  5. 新しいエントリを保存します。

    サービス鍵が SSF アプリケーション ノード SSF JWT Signature for GCP に関連付けられます。

P12 秘密鍵を PSE 鍵に変換する

ご使用の SAP システムが SAP NetWeaver 7.0x(SAP ECC)の場合、P12 鍵を PSE 鍵に変換する必要があります。

P12 鍵を PSE 鍵に変換するには、次の操作を行います。

  1. パスに移動します。

    /usr/sap/SID/SYS/exe/run/

    SID は、SAP システム ID に置き換えます。

  2. プレースホルダを置き換えて、次のコマンドを実行します。

    sapgenpse import_p12 -p PSE_PATH_AND_FILE_NAME P12_PATH_AND_FILE_NAME.p12

    次のように置き換えます。

    • PSE_PATH_AND_FILE_NAME: PSE ファイルのパスとファイル名を指定します。
    • P12_PATH_AND_FILE_NAME: P12 鍵ファイルのパスとファイル名を指定します。
  3. P12 秘密鍵ファイル notasecret のパスワードを入力します。

  4. PSE 秘密鍵に新しい PIN を作成し、その PIN をもう一度入力します。

  5. PIN をメモしておきます。PSE 秘密鍵ファイルを STRUST にインポートするときに、この PIN を入力する必要があります。

P12 鍵を PSE 鍵に変換する方法については、以下を参照してください。

Google Cloud APIs を有効にする

Google Cloud コンソールを開き、認証が必要な Google Cloud プロジェクトで IAM Service Account Credentials API を有効にします。IAM Service Account Credentials API のほかにも、SDK を使用してアクセスするサポート対象の API がある場合は、これらの API も有効にする必要があります。

API ライブラリに移動

Google Cloud APIs を有効にする方法については、API を有効にするをご覧ください。

Google Cloud APIs の認可用にサービス アカウントを作成する

Google Cloud APIs の認証と認可を行うには、ABAP SDK for Google Cloud に IAM サービス アカウントが必要です。

サービス アカウントを作成する

Google Cloud コンソールで、IAM サービス アカウントを作成します。このサービス アカウントは、SDK で使用予定の Google Cloud APIs を含む Google Cloud プロジェクトのプリンシパルである必要があります。Google Cloud APIs を含む同じプロジェクトにサービス アカウントを作成する場合、サービス アカウントは自動的にプリンシパルとしてプロジェクトに追加されます。

Google Cloud APIs が有効になっているプロジェクト以外のプロジェクトにサービス アカウントを作成する場合は、追加の手順で対象のプロジェクトにサービス アカウントを追加する必要があります。

  1. Google Cloud コンソールで、Google Cloud APIs の認証と認可に使用する IAM サービス アカウントを作成します。

    [サービス アカウント] に移動

    サービス アカウントの作成方法については、サービス アカウントを作成するをご覧ください。

  2. Google Cloud コンソールで、API 機能の使用に必要な IAM ロールをサービス アカウントに付与します。Google Cloud APIs のロールの要件については、該当する API ドキュメントをご覧ください。また、最小権限の原則に従ってください。API 固有の事前定義ロールの詳細については、Google Cloud API の IAM ロールを確認するをご覧ください。

  3. SDK で使用予定の Google Cloud APIs を含むプロジェクトとは別のプロジェクトにサービス アカウントを作成した場合は、サービス アカウントの名前をメモします。この名前は、そのプロジェクトにサービス アカウントを追加するときに指定します。詳細については、サービス アカウントを Google Cloud プロジェクトに追加するをご覧ください。

サービス アカウントを Google Cloud プロジェクトに追加する

SDK で使用予定の Google Cloud APIs を含むプロジェクト以外のプロジェクトに、ABAP SDK for Google Cloud のサービス アカウントを作成した場合、Google Cloud APIs を含む Google Cloud プロジェクトにサービスを追加する必要があります。

Google Cloud APIs を含むプロジェクトにサービス アカウントを作成した場合は、この手順をスキップします。

Google Cloud APIs を含む Google Cloud プロジェクトに既存のサービス アカウントを追加するには、次の操作を行います。

  1. Google Cloud コンソールで IAM の [権限] ページに移動します。

    IAM の [権限] に移動

  2. ターゲットの Google Cloud APIs を含むプロジェクトの名前がページの上部付近に表示されていることを確認します。次に例を示します。

    プロジェクト「PROJECT_NAME」の権限

    そうでない場合は、プロジェクトを切り替えます。

  3. [IAM] ページで、[アクセス権を付与] をクリックします。[PROJECT_NAME」へのアクセス権を付与します] ダイアログが開きます。

  4. [PROJECT_NAME」へのアクセス権を付与します] ダイアログで、次の操作を行います。

    1. [新しいプリンシパル] フィールドに、サービス アカウントの名前を指定します。
    2. [ロールを選択] フィールドで、関連するロールを指定します。たとえば、Pub/Sub でトピックとサブスクリプションを変更し、メッセージをパブリッシュして使用するには、Pub/Sub 編集者(roles/pubsub.editor)のロールを指定します。

      API 固有の事前定義ロールの詳細については、IAM の基本ロールと事前定義ロールのリファレンスをご覧ください。

    3. API の用途に応じて、さらに別のロールを追加します。最小権限の原則を適用して、Google が推奨するベスト プラクティスを実施します。

    4. [保存] をクリックします。[IAM] ページのプロジェクト プリンシパルのリストにサービス アカウントが表示されます。

これで、サービス アカウントを使用して、このプロジェクトの Google Cloud APIs にアクセスできるようになりました。

HTTPS 接続を設定する

SAP アプリケーション サーバーは、HTTPS 経由で Google Cloud APIs に接続する必要があります。

SAP ホストで、HTTPS ポートから必要な Google Cloud APIs への下り(外向き)トラフィックを許可するように、ファイアウォール ルールまたはプロキシが構成されていることを確認します。

具体的には、SAP システムが次の API エンドポイントにアクセスできる必要があります。

  • https://iamcredentials.googleapis.com
  • SDK で使用する API の API エンドポイント。

SAP 構成を作成する

JWT ベースの認証に必要な SAP 構成を作成します。

クライアント キー テーブルでアクセス設定を指定する

アクセス設定を指定するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード /GOOG/SDK_IMG を実行します。

    または、トランザクション コード SPRO を実行して、[SAP Reference IMG] をクリックします。

  2. [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。

  3. [New Entries] をクリックします。

  4. 次のフィールドに値を入力します。

    項目 説明
    Google Cloud キー名 クライアント キー構成の名前を指定します。
    Google Cloud サービス アカウント名

    サービス アカウントを作成するで ABAP SDK for Google Cloud 用に作成したサービス アカウントの名前(メールアドレス)を指定します。例: sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com

    Google Cloud のスコープ アクセス スコープ https://www.googleapis.com/auth/cloud-platform を指定します。
    プロジェクト ID ターゲット API を含む Google Cloud プロジェクトの ID を指定します。
    コマンド名 このフィールドは空白のままにしておきます。
    認可クラス 認可クラス /GOOG/CL_AUTH_JWT を指定します。
    認可フィールド このフィールドは空白のままにしておきます。
    トークンの更新期限(秒) このフィールドは空白のままにしておきます。
    認可パラメータ 1 新しい Secure Store and Forward(SSF)アプリケーションを作成するで作成した SSF アプリケーションの名前を指定します。
  5. 新しいエントリを保存します。

新しい RFC 宛先を作成する

ABAP SDK for Google Cloud で使用予定の IAM API とその他の API(Pub/Sub API v1 など)の RFC 宛先を作成します。

RFC 宛先名
ZGOOG_IAMCREDENTIALS この RFC 宛先は、IAM API をターゲットとしています。
ZGOOG_OAUTH2_TOKEN この RFC 宛先は、トークンベースの認証用の Google Cloud エンドポイントをターゲットとしています。
ZGOOG_PUBSUB_V1 この RFC 宛先は、Pub/Sub API をターゲットとしています。

RFC 宛先の作成方法については、RFC 宛先をご覧ください。

サービス マッピング テーブルで RFC 宛先を指定する

サービス マッピング テーブルで、ABAP SDK for Google Cloud を使用して使用する予定の IAM API とその他の API の RFC 宛先を指定します。

RFC 宛先を指定するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード /GOOG/SDK_IMG を実行します。

    または、トランザクション コード SPRO を実行して、[SAP Reference IMG] をクリックします。

  2. [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Service Mapping] をクリックします。

  3. [New Entries] をクリックします。

  4. IAM API と他の API の RFC 宛先を指定します。例:

    名前 サービス名 RFC 宛先
    Google Cloud キー名 iamcredentials:v1 ZGOOG_IAMCREDENTIALS
    Google Cloud キー名 googleapis.com/oauth2 ZGOOG_OAUTH2_TOKEN
    Google Cloud キー名 pubsub.googleapis.com ZGOOG_PUBSUB_V1
  5. 新しいエントリを保存します。

認証構成を検証する

認証構成を検証するには、次の操作を行います。

  1. SAP GUI で、トランザクション コード /GOOG/SDK_IMG を実行します。

    または、トランザクション コード SPRO を実行して、[SAP Reference IMG] をクリックします。

  2. [ABAP SDK for Google Cloud] > [Utilities] > [Validate Authentication Configuration] をクリックします。

  3. クライアント キー名を入力します。

  4. [Execute] をクリックして、フロー全体が正しく構成されているかどうかを確認します。

    [Status] 列に緑色のチェックマークが表示されていれば、すべての構成ステップが正常に完了しています。

サポートを受ける

ABAP SDK for Google Cloud の問題を解決するには、次の操作を行います。