このドキュメントでは、Workload Identity 連携でトークンを使用して Google Cloud を認証する方法について説明します。Workload Identity 連携を使用すると、サービス アカウント キーを使用せずに、オンプレミスまたはマルチクラウドの SAP ワークロードに Google Cloud リソースへのアクセス権を付与できます。Workload Identity 連携は、アマゾン ウェブ サービス(AWS)や、OpenID Connect(OIDC)をサポートする任意の ID プロバイダ(IdP)(Microsoft Azure など)、SAML 2.0 で使用できます。
Workload Identity 連携は、OAuth 2.0 トークン交換の仕様に従います。IdP からセキュリティ トークン サービスに認証情報を提供します。このサービスは、認証情報の ID を検証し、連携トークンを返します。このトークンを使用すると、サービス アカウントの権限を借用し、有効期間の短い OAuth 2.0 アクセス トークンを取得できます。有効期間の短いアクセス トークンを使用すると、サービス アカウントがアクセスできる Google Cloud APIs を呼び出すことができます。
Workload Identity 連携によるトークン認証の場合、おおまかな構成手順は次のとおりです。
- 外部 IdP を準備します。
- Google Cloud で Workload Identity 連携を構成します。
- Google Cloud でサービス アカウントを作成します。
- Google Cloud で、外部ワークロードにサービス アカウントの権限借用を許可します。
- ABAP SDK for Google Cloud で、IdP からセキュリティ トークンを取得する ABAP コードを実装します。
- ABAP SDK for Google Cloud でクライアント キーを構成します。
すべての Google Cloud プロダクトが Workload Identity 連携をサポートしているわけではありません。Workload Identity 連携を使用して認証を設定する前に、サポートされているプロダクトと制限事項を確認してください。詳細については、Workforce Identity 連携: サポート対象のプロダクトと制限事項をご覧ください。
外部 IdP を準備する
SAP ワークロードが Google OAuth 2.0 セキュリティ トークンと交換できる認証情報を取得できるように、IdP を準備する必要があります。
外部 IdP を準備するには、IdP に応じて次の操作を行います。
- IdP として AWS または Azure を使用している場合は、外部 IdP を準備するの説明に従います。
- 他の IdP を使用している場合は、外部 IdP を準備するの説明に従います。
Workload Identity 連携を構成する
Google Cloud で、Workload Identity プールとプロバイダを構成します。
ID プールを構成します。ID プールは、外部 ID を管理できるエンティティです。また、Workload Identity プール プロバイダも構成します。これは、Google Cloud と IdP の関係を記述するエンティティです。
Workload Identity 連携を構成するには、外部 IdP に応じて次の操作を行います。
- IdP として AWS または Azure を使用している場合は、Workload Identity プールとプロバイダを作成するの説明に従います。
- 他の IdP を使用している場合は、Workload Identity プールとプロバイダを作成するの説明に従います。
次の情報をメモします。
- プロジェクト番号: Workload Identity プールを作成した Google Cloud プロジェクトのプロジェクト番号。
- プール ID: Workload Identity プールを識別する一意の ID。
- プロバイダ ID: Workload Identity プール プロバイダを識別する ID。
これらの情報は、ABAP SDK クライアント キーの構成に必要です。
サービス アカウントを作成する
Google Cloud コンソールで、Google Cloud APIs にアクセスするための専用の IAM サービス アカウントを作成します。このサービス アカウントは、SDK で使用予定の Google Cloud APIs を含む Google Cloud プロジェクトのプリンシパルである必要があります。
Google Cloud コンソールで、IAM Service Account Credentials API、Security Token Service API、SDK を使用してアクセスするその他のサポート対象の API を有効にします。
Google Cloud APIs を有効にする方法については、API を有効にするをご覧ください。
ワークロードを表すサービス アカウントを作成します。
API 機能にアクセスするために必要な IAM ロールをサービス アカウントに付与します。Google Cloud APIs のロールの要件については、該当する API ドキュメントをご覧ください。また、最小権限の原則に従ってください。API 固有の事前定義ロールの詳細については、Google Cloud API の IAM ロールを確認するをご覧ください。
外部ワークロードにサービス アカウントの権限借用を許可する
外部ワークロードにサービス アカウントの権限借用を許可するには、外部 IdP に応じて次の操作を行います。
- IdP として AWS または Azure を使用している場合は、外部ワークロードがサービス アカウントの権限を借用できるようにするの説明に従います。
- 他の IdP を使用している場合は、外部ワークロードにサービス アカウントの権限借用を許可するの説明に従います。
IdP からセキュリティ トークンを取得する ABAP コードを実装する
ABAP SDK for Google Cloud には、抽象クラス /GOOG/CL_AUTH_WIF_BASE
が用意されています。このクラスには、Security Token Service から OAuth 2.0 セキュリティ トークンを取得するロジックと、IAM Service Account Credentials API から OAuth 2.0 アクセス トークンを取得するロジックが含まれています。デベロッパーは、抽象クラス /GOOG/CL_AUTH_WIF_BASE
を継承する子クラスを名前空間に作成する必要があります。
Workload Identity 連携を使用して ABAP SDK for Google Cloud から Cloud Functions を呼び出すには、SDK で提供される別の抽象クラス /GOOG/CL_AUTH_WIF_ID_TOKEN
を使用します。Workload Identity 連携を使用して認証を設定する場合、抽象クラス /GOOG/CL_AUTH_WIF_ID_TOKEN
を継承する子クラスを名前空間にもう 1 つ作成する必要があります。この子クラスは、Cloud Functions を呼び出すためのクライアント キーの構成時に [認可クラス] フィールドで指定します。
必ず、子クラスでメソッド GET_EXT_IDP_TOKEN
を実装し、IdP からセキュリティ トークンを取得するロジックを記述してください。次のフィールドに入力します。
CV_TOKEN
: IdP から取得したトークン(string
形式)。CV_TOKEN_TYPE
: IdP から取得したセキュリティ トークンのタイプ。サポートされているトークンタイプは次のとおりです。urn:ietf:params:oauth:token-type:jwt
urn:ietf:params:oauth:token-type:id_token
urn:ietf:params:aws:token-type:aws4_request
urn:ietf:params:oauth:token-type:access_token
urn:ietf:params:oauth:token-type:saml2
CV_TOKEN
と CV_TOKEN_TYPE
に入力された値は、抽象クラス /GOOG/CL_AUTH_WIF_BASE
のメソッドで使用され、API 呼び出しで使用される最終的な OAuth 2.0 トークンを交換して取得します。
次の例は、AWS や Azure などの他のクラウド プロバイダ向けの GET_EXT_IDP_TOKEN
メソッドの実装例を示しています。
AWS
Azure
クライアント キーを構成する
-
SAP GUI で、トランザクション コード
/GOOG/SDK_IMG
を実行します。または、トランザクション コード
SPRO
を実行して、[SAP Reference IMG] をクリックします。 - [ABAP SDK for Google Cloud] > [Basic Settings] > [Configure Client Key] をクリックします。
- [New Entries] をクリックします。
次のフィールドに値を入力します。
項目 説明 Google Cloud キー名 クライアント キー構成の名前を指定します。 Google Cloud サービス アカウント名 サービス アカウントを作成するで Google Cloud APIs にアクセスするために作成したサービス アカウントの名前(メールアドレス)を指定します。例: sap-example-svc-acct@example-project-123456.iam.gserviceaccount.com
。Google Cloud のスコープ このフィールドは空白のままにしておきます。 Google Cloud プロジェクト ID Workload Identity プールを作成した Google Cloud プロジェクトの ID を指定します。 コマンド名 このフィールドは空白のままにしておきます。 認可クラス 子クラスを指定します。このクラスには、クラス /GOOG/CL_AUTH_WIF_BASE
の実装が含まれています。詳しくは、IdP からセキュリティ トークンを取得する ABAP コードを実装するをご覧ください。トークンのキャッシュ保存 このフィールドは空白のままにしておきます。 トークンの更新期限(秒) このフィールドは空白のままにしておきます。 認可パラメータ 1 Workload Identity プールの ID を指定します。 認可パラメータ 2 Workload Identity プロバイダ ID を指定します。 エントリを保存します。
サポートを受ける
ABAP SDK for Google Cloud の問題を解決するには、次の操作を行います。
Cloud フォーラムのコミュニティで ABAP SDK for Google Cloud について質問し、ディスカッションに参加します。
入手可能なすべての診断情報を収集し、Cloud カスタマーケアにお問い合わせください。カスタマーケアへのお問い合わせについては、Google Cloud での SAP に関するサポートを受けるをご覧ください。