ABAP SDK for Google Cloud の SAP BTP エディションの認証を設定する

このドキュメントでは、SAP BTP エディションの ABAP SDK for Google Cloud から Google Cloud の認証を行う方法について説明します。

ABAP SDK for Google Cloud の SAP BTP エディションを使用して開発されたアプリケーションでは、Google Cloud APIs に接続するために認証が必要になります。

この SDK では、Google Cloud APIs にアクセスするための認証と認可で主にトークンを使用します。さらに、この SDK は、API キーを使用する Google Cloud APIs に対する認証を行うための API キーもサポートしています。認証に API キーを使用する Google Cloud APIs はごく一部です。たとえば、Google Maps Platform などです。使用するサービスまたは API の認証ドキュメントで、API キーに対応しているかどうかを確認してください。

アクセスする必要がある Google Cloud APIs に応じて、適切な認証方法を選択できます。SDK でサポートされている認証方法は次のとおりです。

Workload Identity 連携によるトークンを使用した認証

Workload Identity 連携は、OAuth 2.0 トークン交換の仕様に従います。ID プロバイダ(IdP)からセキュリティ トークン サービスに認証情報を提供します。このサービスは、認証情報の ID を検証し、アクセス トークンを返します。このトークンを使用すると、サービス アカウントの権限を借用し、有効期間の短いアクセス トークンを取得できます。有効期間の短いアクセス トークンを使用すると、サービス アカウントがアクセスできる Google Cloud APIs を呼び出すことができます。

Workload Identity 連携でトークンを使用して認証する場合は、次の Google Cloud APIs を有効にします。

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

Workload Identity 連携によるトークン認証の場合、おおまかな構成手順は次のとおりです。

  1. SAP BTP で、Authorization and Trust(XSUAA)サービス インスタンスを作成します。
  2. Google Cloud でサービス アカウントを作成します。
  3. Google Cloud で Workload Identity 連携を構成します。
  4. SAP BTP で、Workload Identity 連携を使用するように ABAP SDK for Google Cloud を構成します。

Authorization and Trust(XSUAA)サービス インスタンスを作成する

バックエンド アプリケーションに必要なサービスを提供するには、次の手順で認可と信頼(XSUAA)サービス インスタンスを作成します。

  1. SAP BTP Cockpit にログインします。詳細については、SAP のページ Access the Cockpit をご覧ください。
  2. サブアカウントを選択します。
  3. XSUAA サービス インスタンスを作成します。

    1. [Services] > [Service Marketplace] に移動します。
    2. [Authorization & Trust Management Service(XSUAA)] を検索して選択します。
    3. [Create] をクリックします。
    4. 表示された [New Instance or Subscription] ダイアログで、次のフィールドに値を入力します。

      • Plan: [Application] を選択します。
      • Runtime environment: [Cloud Foundry] を選択します。
      • Space: スペース名を選択します。
      • Instance name: XSUAA サービス インスタンスの名前を入力します。
    5. [Create] をクリックします。

  4. サービスキーを作成します。

    1. [Instances and Subscription] > [Instances] に移動します。
    2. 前の手順で作成した XSUAA サービス インスタンスを選択し、[Service keys] タブをクリックします。
    3. [Create] をクリックします。
    4. サービスキーの名前を入力して [Create] をクリックします。
    5. 新しく作成したサービスキーの [Actions]()メニューをクリックし、[View] を選択します。
    6. サービスキーの認証情報から、次の情報をメモします。

      • url
      • clientid
      • clientsecret

    Google Cloud への認証を構成するときに、これらのサービスキー認証情報が必要になります。

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

Google Cloud コンソールで、IAM サービス アカウントを作成します。このサービス アカウントは、SDK で使用予定の Google Cloud APIs を含む Google Cloud プロジェクトのプリンシパルである必要があります。

  1. Google Cloud コンソールで、サービス アカウントを作成するプロジェクトを選択します。

    • Google Cloud APIs を含む同じプロジェクトにサービス アカウントを作成する場合、サービス アカウントは自動的にプリンシパルとしてプロジェクトに追加されます。

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

  2. Google Cloud APIs の認証と認可に使用するサービス アカウントを作成します。

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

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

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

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

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

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

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

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

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

    IAM の [権限] に移動

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

    プロジェクト PROJECT_NAME の権限

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

  3. IAM の [権限] ページで、[アクセス権を付与] をクリックします。

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

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

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

    3. API の用途に応じて、さらに別のロールを追加します。最小権限の原則を実装することをおすすめします。

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

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

Workload Identity 連携を構成する

Workload Identity 連携の構成に必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセスの管理をご覧ください。

Workload Identity 連携を構成するには、次の操作を行います。

  1. Google Cloud コンソールで、[新しいワークロード プロバイダとプール] ページに移動します。

    [新しいワークロード プロバイダとプール] に移動

  2. [ID プールを作成する] セクションで、次のフィールドに値を入力します。

    • 名前: プールの名前。この名前はプール ID としても使用されます。プール ID を後で変更することはできません。
    • 説明: プールの目的を説明するテキスト。
  3. [続行] をクリックします。

  4. [プールにプロバイダを追加する] で、プロバイダの設定を追加します。

    1. [プロバイダの選択] フィールドで、[OpenID Connect(OIDC)] を選択します。
    2. 次のプロバイダの詳細を入力します。

      • プロバイダ名: プロバイダの名前を入力します。
      • 発行元(URL): XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報の URL を入力します。URL に /oauth/token を追加します。
      • オーディエンス: [Allowed audience] を選択し、XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報のクライアント ID を入力します。
  5. [続行] をクリックします。

  6. [プロバイダの属性を構成する] で、[OIDC 1] フィールドに「assertion.sub」と入力します。

  7. [保存] をクリックします。

  8. 次の情報をメモします。

    • プール ID
    • プロバイダ ID

    これらの ID は、SDK 構成 Fiori アプリで認証を構成するときに必要になります。

外部 ID にサービス アカウントの権限借用を許可する

連携ワークロードからサービス アカウントの権限を借用するには、サービス アカウントに Workload Identity ユーザー(roles/iam.workloadIdentityUserを付与します。ロールの付与の詳細については、アクセスの管理をご覧ください。

外部 ID にサービス アカウントの権限借用を許可するには、次の操作を行います。

  1. Google Cloud コンソールで、[Workload Identity プール] ページに移動します。

    [Workload Identity プール] に移動

  2. Workload Identity 連携を構成するで作成した Workload Identity プールを選択します。

  3. 選択した Workload Identity プールへのアクセス権を付与するには、[ アクセスを許可] をクリックします。

  4. [サービス アカウント] リストで、Google Cloud APIs にアクセスできるサービス アカウントを選択します。複数のサービス アカウントを使用する場合は、すべてここに追加します。

  5. [属性名] フィールドで [サブジェクト] を選択します。

  6. [属性値] フィールドに、XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報のクライアント ID を入力します。

  7. [保存] をクリックします。

  8. 表示された [アプリケーションの構成] ダイアログで、[閉じる] をクリックします。

Workload Identity 連携を使用するように ABAP SDK for Google Cloud を構成する

SAP の通信管理アプリを使用して、通信管理アーティファクトを作成します。

XSUAA サービスと Workload Identity 連携を使用して認証用の通信管理アーティファクトを作成するには、ABAP SDK for Google Cloud に付属の通信シナリオ /GOOG/COM_SDK_WIF を使用します。

後ほど、SDK 構成 Fiori アプリを使用して、通信マップを作成します。通信マップでは、ABAP プログラムで Google Cloud の認証に使用する一意のクライアント鍵を定義します。

  1. ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
  2. [All spaces] > [Administration] > [Communication Management] に移動します。
  3. 通信システムを作成します。
    1. Communication Systems アプリを開きます。
    2. [New] をクリックします。
    3. 表示された [New Communication System] ダイアログで、次のフィールドに値を入力します。
      • System ID: システム ID を入力します。
      • System name: システム名を入力します。
    4. [Create] をクリックします。
    5. [Host name] フィールドに、XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報の URL を https:// なしで入力します。
    6. [Port] フィールドに、「443」と入力します。
    7. [Users for Outbound Communication] タブで [Add] をクリックします。
    8. 以下の詳細を入力します。
      • Authentication method: [User Name and Password] を選択します。
      • User name/client ID: XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報のクライアント ID を入力します。
      • Password: XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報のクライアント シークレットを入力します。
    9. [Save] をクリックします。
  4. 通信設定を作成します。

    1. Communication Arrangement アプリを開きます。
    2. [New] をクリックします。
    3. 表示された [New Communication Arrangement] ダイアログで、次のフィールドに値を入力します。

      • Scenario: [Authentication using Workload Identity Federation](/GOOG/COM_SDK_WIF)を選択します。
      • Arrangement name: 通信設定の名前を入力します。
    4. [Create] をクリックします。

    5. 表示された通信設定の [Communication System] フィールドで、前の手順で作成した通信システムを選択します。

    6. Workload Identity 連携を構成するで設定した次の情報を指定します。

      • Workload Identity Federation Pool ID: Workload Identity 連携プール ID を入力します。
      • Workload Identity Federation Provider ID: Workload Identity 連携プロバイダ ID を入力します。
    7. [Outbound services] で、[Path] フィールドに「/oauth/token」と入力します。

    8. [Save] をクリックします。

  5. クライアント鍵と通信マップを作成します。

    1. SDK 構成用の Fiori アプリを含むスペースに移動します。
    2. Google SDK: Main Configuration アプリを開きます。
    3. [Create] をクリックします。
    4. 表示された [Create] ダイアログで、クライアント鍵の名前を入力します。
    5. [Continue] をクリックします。
    6. 以下の詳細を入力します。
      • Service account: Google Cloud APIs へのアクセス権が付与されているサービス アカウントを入力します。
      • Project ID: Google Cloud プロジェクト ID を入力します。プロジェクト ID については、プロジェクトの識別をご覧ください。
      • Project number: Google Cloud プロジェクト番号を入力します。プロジェクト番号については、プロジェクトの識別をご覧ください。
      • Authentication typ: [W (Workload Identity Federation) ] を選択します。
    7. 表示された通信マップの [Communication arrangement] フィールドで、前の手順で作成した通信設定を選択します。
    8. [Create] をクリックします。標準の Google Cloud 利用規約に基づいて ABAP SDK for Google Cloud の使用に同意することを確認するダイアログが表示されます。
    9. 認証構成を検証するには、[Check connection] をクリックします。エントリの緑色のチェックは、構成が成功したことを示します。エラーが発生した場合は、トラブルシューティング ページで一般的なエラーの解決方法を確認してください。

Secret Manager に保存されている API キーを使用した認証

Google Cloud の認証に API キーを使用する場合、Google Cloud の Secret Manager サービスを使用して API キーを安全に保存できます。

Secret Manager に保存されている API キーを使用した認証を行うには、次の Google Cloud APIs を有効にします。

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

Secret Manager と Workload Identity 連携の構成に必要な権限を取得するには、プロジェクトに対して次の IAM ロールを付与するよう管理者に依頼してください。

Secret Manager に保存されている API キーを使用した認証の概要は次のとおりです。

  1. SAP BTP で、Authorization and Trust(XSUAA)サービス インスタンスを作成します。
  2. Google Cloud でサービス アカウントを作成します。
  3. Google Cloud で Workload Identity 連携を構成します。
  4. Google Cloud で API キーを作成します。
  5. Google Cloud で、シークレットを作成して API キーを保存します。
  6. SAP BTP で、Secret Manager の API キーを使用するように ABAP SDK for Google Cloud を構成します。

Secret Manager に保存されている API キーを使用して認証する場合は、トークンを使用した認証用に作成した XSUAA サービス インスタンス、サービス アカウント、Workload Identity 連携プール、プロバイダを再利用できます。

API キーを作成する

API キーを使用する認証の場合、API キーを作成する必要があります。API キー文字列は暗号化された文字列です(例: AIzaSyDaGmWKa4JsXZ-HjGw7ISLn_3namBGewQe)。ABAP SDK for Google Cloud では、HTTP リクエストで API キー文字列を使用して、Google Cloud API を呼び出すときに安全に認証します。

Google Cloud では、複数の方法で API キーを作成できます。

Google Cloud コンソールを使用して API キーを作成するには、次の手順を行います。

  1. Google Cloud コンソールで、[認証情報] ページに移動します。

    [認証情報] に移動

  2. [認証情報を作成する] をクリックし、プルダウン メニューから [API キー] を選択します。

    • [API キーを作成しました] ダイアログに API キーの文字列が表示されます。キー文字列をコピーして安全に保管します。この API キーは、Google Cloud への認証を構成するために必要です。

    • デフォルトでは、API キーは制限されません。この API キーを使用できる API を選択して、API キーを制限することをおすすめします。API の制限を追加する方法については、API 制限を追加するをご覧ください。

シークレットを作成して API キーを保存する

  1. Google Cloud コンソールで、[Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [シークレットを作成] をクリックします。

  3. [シークレットの作成] ページの [名前] に、シークレットの名前を入力します。シークレット名には、大文字と小文字、数字、ハイフン、アンダースコアを使用できます。名前の最大長は 255 文字です。

  4. [シークレットの値] フィールドに、API キーを作成するで作成した API キーを入力します。

  5. [シークレットを作成] をクリックします。シークレットのコンテンツは、シークレット バージョンに保存されます。

  6. 作成したシークレットの名前をクリックします。

  7. 表示された [バージョン] タブで、次の情報をメモします。

    • シークレット名
    • バージョン

    Google Cloud への認証を構成する際に、これらのシークレットの詳細が必要になります。

Secret Manager の API キーを使用するように ABAP SDK for Google Cloud を構成する

SAP の通信管理アプリを使用して、通信管理アーティファクトを作成します。

XSUAA サービスと Workload Identity 連携を使用して認証用の通信管理アーティファクトを作成するには、ABAP SDK for Google Cloud に付属の通信シナリオ /GOOG/COM_SDK_APIKSM を使用します。

後ほど、SDK 構成 Fiori アプリを使用して、通信マップを作成します。通信マップでは、ABAP プログラムで Google Cloud の認証に使用する一意のクライアント鍵を定義します。

  1. ABAP SDK for Google Cloud がインストールされている BTP ABAP システムの SAP Fiori ランチャーにアクセスします。
  2. [All spaces] > [Administration] > [Communication Management] に移動します。
  3. 通信システムを作成します。
    1. Communication Systems アプリを開きます。
    2. [New] をクリックします。
    3. 表示された [New Communication System] ダイアログで、次のフィールドに値を入力します。
      • System ID: システム ID を入力します。
      • System name: システム名を入力します。
    4. [Create] をクリックします。
    5. [Host name] フィールドに、XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報の URL を https:// なしで入力します。
    6. [Port] フィールドに、「443」と入力します。
    7. [Users for Outbound Communication] タブで [Add] をクリックします。
    8. 以下の詳細を入力します。
      • Authentication method: [User Name and Password] を選択します。
      • User name/client ID: XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報のクライアント ID を入力します。
      • Password: XSUAA サービス インスタンスの作成時にメモしたサービスキー認証情報のクライアント シークレットを入力します。
    9. [Save] をクリックします。
  4. 通信設定を作成します。

    1. Communication Arrangement アプリを開きます。
    2. [New] をクリックします。
    3. 表示された [New Communication Arrangement] ダイアログで、次の情報を入力します。

      • Scenario: [Authentication using API Key with Secret Manager](/GOOG/COM_SDK_APIKSM)を選択します。
      • Arrangement name: 通信設定の名前を入力します。
    4. [Create] をクリックします。

    5. 表示された通信設定の [Communication System] フィールドで、前の手順で作成した通信システムを選択します。

    6. [Additional properties] で、次のプロパティの値を指定します。

    7. [Outbound services] で、[Path] フィールドに「/oauth/token」と入力します。

    8. [Save] をクリックします。

  5. クライアント鍵と通信マップを作成します。

    1. SDK 構成用の Fiori アプリを含むスペースに移動します。
    2. Google SDK: Main Configuration アプリを開きます。
    3. [Create] をクリックします。
    4. 表示された [Create] ダイアログで、クライアント鍵の名前を入力します。
    5. [Continue] をクリックします。
    6. 以下の詳細を入力します。

      • Service account: Google Cloud APIs へのアクセス権が付与されているサービス アカウントを入力します。
      • Project ID: Google Cloud プロジェクト ID を入力します。プロジェクト ID については、プロジェクトの識別をご覧ください。
      • Project number: Google Cloud プロジェクト番号を入力します。プロジェクト番号については、プロジェクトの識別をご覧ください。
      • Authentication type: [V (API Key using Secret Manager)] を選択します。
    7. 表示された通信マップの [Communication arrangement] フィールドで、前の手順で作成した通信設定を選択します。

    8. [Create] をクリックします。標準の Google Cloud 利用規約に基づいて ABAP SDK for Google Cloud の使用に同意することを確認するダイアログが表示されます。

    9. 認証構成を検証するには、[Check connection] をクリックします。エントリの緑色のチェックは、構成が成功したことを示します。エラーが発生した場合は、トラブルシューティング ページで一般的なエラーの解決方法を確認してください。

サポートを利用する

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