このページの内容は Apigee と Apigee ハイブリッドに該当します。
Apigee Edge のドキュメントを表示する。
このトピックでは、Google 認証を使用するよう構成した API プロキシを設定し、デプロイする方法について説明します。
はじめに
Apigee では、Google OAuth トークンまたは OpenID Connect トークンを使用して、Cloud Logging や Secret Manager などの Google サービス、および Cloud Functions や Cloud Run など特定の Google Cloud プロダクトで実行されるカスタム サービスでの認証を行えます。
この機能を使用するには、次のいずれかのコンテキストに <Authentication>
XML 要素を構成する必要があります。
- ServiceCallout ポリシー
- ExternalCallout ポリシー
- TargetEndpoint 構成
このトピックで説明するように、いくつかの基本的なセットアップ手順を完了すると、認証ヘッダーを手動で設定したりサービスリクエストを変更したりすることなく、Apigee はトークンの生成を実行し、対象の Google サービスまたはカスタムホストサービスに対して安全な呼び出しを行います。API デベロッパーの観点からは、適切に構成された API プロキシから Google サービスを呼び出すプロセスがシームレスに処理されます。
API プロキシ構成オプション
このセクションでは、Google OAuth トークンや OpenID Connect 認証を有効にするために <Authentication>
XML 要素を使用する場所について説明します。
構成オプション | 説明 |
---|---|
ServiceCallout ポリシー | ServiceCallout ポリシーを使用して、API プロキシから他の内部サービスや外部サービスを呼び出すことができます。たとえば、ServiceCallout を使用して、外部の Google サービスやカスタム ホスト サービスを呼び出せます。 使用の詳細と例については、ServiceCallout ポリシーをご覧ください。 |
ExternalCallout ポリシー | ExternalCallout ポリシーを使用すると、gRPC サーバーに gRPC リクエストを送信し、Apigee ポリシーでサポートされていないカスタム動作を実装できます。使用法の詳細と例については、ExternalCallout ポリシーをご覧ください。 |
TargetEndpoint | Google サービスまたはカスタム ホスト サービスを API プロキシ ターゲット エンドポイントとして指定します。使用方法の詳細と例については、API プロキシ構成リファレンスをご覧ください。 |
Google 認証トークンでサポートされているコンテキスト
<Authentication>
要素には、<GoogleAccessToken>
または <GoogleIDToken>
の 2 つのサブ要素構成があります。次の表に、これらの要素がサポートされているコンテキストを示します。
使用する機能 | GoogleAccessToken | GoogleIDToken |
---|---|---|
ServiceCallout ポリシー | サポート対象 | サポート対象 |
ExternalCallout ポリシー | 非対応 | サポート対象 |
TargetEndpoint | サポート対象 | サポート対象 |
デプロイ手順
このセクションでは、Google 認証を使用して、対象の Google サービスやカスタム ホスト サービスを呼び出す API プロキシをデプロイする方法について説明します。Apigee と Apigee ハイブリッドのデプロイ手順を個別に説明します。
Apigee にデプロイする
以下で説明するのは、Apigee に API プロキシをデプロイする手順です。このプロキシは、Google サービスまたはカスタム ホスト サービスを呼び出す際に認証呼び出しを使用するよう構成されています。この手順では、プロキシがすでに作成され、サポートされているコンテキストのリストのいずれかに <Authentication>
要素が含まれていることを前提としています。
- Apigee 組織が作成された Google Cloud プロジェクトと同じプロジェクトに Google サービス アカウントを作成します。Google 認証を使用するように構成された API プロキシをデプロイする場合は、このサービス アカウントの名前を指定する必要があります。また、生成される OAuth トークンは、このサービス アカウントを表します。サービス アカウントは、Google Cloud コンソールまたは
gcloud
コマンドで作成できます。サービス アカウントの作成と管理をご覧ください。 - デプロイを行うユーザー(デプロイ担当者)に、サービス アカウントに対する
iam.serviceAccounts.actAs
権限を付与します。サービス アカウントの権限についてもご覧ください。gcloud iam service-accounts add-iam-policy-binding \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member="MEMBER" \ --role="roles/iam.serviceAccountUser"
- PROJECT_ID: プロジェクト IDID は組織名と同じです。
- SA_NAME: サービス アカウントを作成したときに指定した名前です。
- メンバー: バインディングを追加するメンバー。形式は
user|group|serviceAccount:email
またはdomain:domain
にする必要があります。 - 対象の Google サービスとの通信に必要な権限をサービス アカウントに付与します。たとえば、Google Logging サービスを呼び出したい場合、同サービスとの通信に必要な権限をプロキシ サービス アカウントが保有していなければなりません。ロールについてもご覧ください。
- Google 認証を使用するように構成された API プロキシをデプロイする前に、以下が必要です。
- 事前に作成した プロキシ サービス アカウントの名前。例:
SA_NAME@PROJECT_ID.iam.gserviceaccount.com
- デプロイを行うユーザー(デプロイ担当者)に、サービス アカウントに対する
iam.serviceAccounts.actAs
権限がすでに付与されているか、付与する必要があります。リソースに対するアクセス権の付与、変更、取り消しをご覧ください。
- 事前に作成した プロキシ サービス アカウントの名前。例:
- 実装した Google 認証構成を含む API プロキシをデプロイします。Apigee UI または API を使用してプロキシをデプロイできます。詳細については、API プロキシのデプロイをご覧ください。
- UI を使用している場合は、サービス アカウント名を指定するように求められます。ステップ 1 で作成した プロキシ サービス アカウントの名前を使用します。例:
SA_NAME@PROJECT_ID.iam.gserviceaccount.com
。 - Apigee Deployment API を使用してプロキシをデプロイする場合、使用可能な cURL コマンドの例は次のとおりです。このコマンドでは、クエリ パラメータとしてサービス アカウント名が指定されています。これは、ステップ 1 で作成したサービス アカウントの名前です。
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/apiproxy/revisions/2/deployments?serviceAccount=SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ -H "Content-Type: application/json" -X POST
ここで
TOKEN
: Google の認証情報と引き換えに取得する必要がある OAuth トークン。詳しくは、OAuth 2.0 アクセス トークンの取得をご覧ください。ORG_NAME
: Apigee の組織名。ENV_NAME
: API プロキシをデプロイする環境の名前。SA_NAME
: サービス アカウントの作成時に指定した名前。PROJECT_ID
: Google Cloud プロジェクト ID(組織名と同じ)。
- UI を使用している場合は、サービス アカウント名を指定するように求められます。ステップ 1 で作成した プロキシ サービス アカウントの名前を使用します。例:
- デプロイが完了したら、API プロキシをテストして、想定されるレスポンスが Google サービスによって返されることを確認します。
ここで
Apigee ハイブリッドにデプロイする
以下で説明するのは、Google サービスに対して認証された呼び出しを行うように構成された API プロキシを Apigee ハイブリッドにデプロイする方法です。この手順では、プロキシがすでに作成され、サポートされているコンテキストのリストのいずれかに <Authentication>
要素が含まれていることを前提としています。
- 次のいずれかの方法で Apigee ハイブリッド ランタイム コンポーネントのサービス アカウントとキーを作成します。
- Apigee ハイブリッドに付属の
create-service-account
ツールを使用して、apigee-runtime
サービス アカウントを作成します。このツールはサービス アカウントを作成し、サービス アカウント キーを返します。詳細については、create-service-account をご覧ください。 - Google Cloud コンソールまたは
gcloud
コマンドを使用してサービス アカウントを作成します。サービス アカウントの作成と管理をご覧ください。サービス アカウント キーを取得するには、サービス アカウント キーの作成と管理をご覧ください。
- Apigee ハイブリッドに付属の
overrides.yaml
ファイルを開き、Google 認証機能を必要とする環境用のサービス アカウント キー ファイルのパスを指定します。envs: - name: "ENVIRONMENT_NAME" serviceAccountPaths: runtime: "KEY_FILE_PATH"
次に例を示します。
envs: - name: "test" serviceAccountPaths: runtime: "./service_accounts/my_runtime_sa.json"
- apigeectl apply を使用して、オーバーライド ファイルをクラスタに適用します。
- 2 つ目のサービス アカウントを作成します。これをプロキシ サービス アカウントと呼びます。このサービス アカウントは、Apigee 組織の作成に使用した同じ Google Cloud プロジェクトに属している必要があります。Google 認証を使用するように構成された API プロキシをデプロイする場合は、このサービス アカウントのメールアドレスを指定する必要があります。また、生成される OAuth トークンは、このサービス アカウントを表します。
- デプロイを行うユーザー(デプロイ担当者)に、サービス アカウントに対する
iam.serviceAccounts.actAs
権限を付与します。サービス アカウントの権限についてもご覧ください。gcloud iam service-accounts add-iam-policy-binding \ SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member="MEMBER" \ --role="roles/iam.serviceAccountUser"
- PROJECT_ID: プロジェクト IDID は組織名と同じです。
- SA_NAME: サービス アカウントの作成時に指定した名前。
- メンバー: バインディングを追加するメンバー。形式は user|group|serviceAccount:email または domain:domain にする必要があります。
- 対象の Google サービスとの通信に必要な権限をプロキシ サービス アカウントに付与します。たとえば、Google Logging サービスを呼び出したい場合、同サービスとの通信に必要な権限をプロキシ サービス アカウントが保有していなければなりません。ロールについてもご覧ください。
- ランタイムがプロキシ サービス アカウントの権限を借用できることを確認します。この機能を提供するには、プロキシ サービス アカウントで
iam.serviceAccountTokenCreator
ロールをランタイム サービス アカウントに付与します。サービス アカウントの権限についてもご覧ください。次に例を示します。gcloud iam service-accounts add-iam-policy-binding \ PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:RUNTIME_SA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
ここで
- PROJECT_ID: プロジェクト IDID は組織名と同じです。なお、ランタイム サービス アカウントを作成するために、組織に関連付けられたプロジェクトを使用する必要はありません。ただし、このコマンドでは必ず正しいプロジェクト ID を使用してください。
- PROXY_SA_NAME: プロキシ サービス アカウントの ID。
- RUNTIME_SA_NAME: ランタイム サービス アカウントの ID。
- Google 認証を使用するように構成された API プロキシをデプロイする前に、以下が必要です。
- 事前に作成した プロキシ サービス アカウントの名前。例:
PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
- デプロイを行うユーザーに、Apigee 組織がプロビジョニングされる Google Cloud プロジェクトで
iam.serviceAccounts.actAs
権限がすでに付与されているか、付与する必要があります。リソースに対するアクセス権の付与、変更、取り消しをご覧ください。
- 事前に作成した プロキシ サービス アカウントの名前。例:
- 実装した Google 認証構成を含む API プロキシをデプロイします。Apigee UI または API を使用してプロキシをデプロイできます。詳細については、API プロキシのデプロイをご覧ください。
- UI を使用している場合は、サービス アカウント名を指定するように求められます。以前に作成したプロキシ サービス アカウントの名前を使用します。例:
PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com
。 - Apigee Deployment API を使用してプロキシをデプロイする場合、使用可能な cURL コマンドの例は次のとおりです。このコマンドでは、クエリ パラメータとしてサービス アカウント名が指定されています。これは、プロキシ サービス アカウントの名前です。
curl -H "Authorization: Bearer $TOKEN" \ "https://apigee.googleapis.com/v1/organizations/ORG_NAME/environments/ENV_NAME/apis/apiproxy/revisions/2/deployments?serviceAccount=PROXY_SA_NAME@PROJECT_ID.iam.gserviceaccount.com" \ -H "Content-Type: application/json" -X POST
ここで
TOKEN
: Google の認証情報と引き換えに取得する必要がある OAuth トークン。詳しくは、OAuth 2.0 アクセス トークンの取得をご覧ください。ORG_NAME
: Apigee の組織名。ENV_NAME
: API プロキシをデプロイする環境の名前。PROXY_SA_NAME
: プロキシ サービス アカウントの名前。PROJECT_ID
: Google Cloud プロジェクト ID(組織名と同じ)。
- UI を使用している場合は、サービス アカウント名を指定するように求められます。以前に作成したプロキシ サービス アカウントの名前を使用します。例:
- デプロイが完了したら、API プロキシをテストして、想定されるレスポンスが Google サービスによって返されることを確認します。
ここで
サービス アカウントの権限について
Google 認証を使用するように API プロキシを構成するには、次の表の説明に従ってサービス アカウントを作成する必要があります。サービス アカウントの作成と管理もご覧ください。
サービス アカウント | 必須となる対象: | 説明 |
---|---|---|
プロキシ | Apigee と Apigee ハイブリッド | API プロキシが、ターゲットの Google サービスへの認証済み呼び出しを行うために必要な権限があります。
|
ランタイム | Apigee ハイブリッドのみ | Apigee ランタイムで、API プロキシによってリクエストされた Google サービスで認証するトークンを生成できるようにします。このサービス アカウントは、プロキシ固有のサービス アカウントの「権限を借用し」、代理で認証済みの呼び出しを行います。
|