このドキュメントでは、Identity-Aware Proxy(IAP)でカスタム OAuth クライアントを使用するタイミングと方法について説明します。
デフォルトでは、IAP は Google が管理する OAuth クライアントを使用してユーザーを認証します。Google 管理の OAuth クライアントは、組織内の内部ユーザーのアクセス管理にのみ使用できます。
カスタム OAuth 構成を使用して、次の操作を行う必要があります。
- 組織外の外部ユーザーに対して、IAP 対応アプリケーションへのアクセスを管理します。
- Google Cloud 組織に属していないプロジェクト内のウェブ アプリケーションへのアクセスを管理します。
- 認証中に同意画面にカスタム ブランド情報を表示します。
カスタム OAuth クライアントは、IAP またはプラットフォームで直接構成できます。
カスタム OAuth クライアントを使用する場合は、OAuth 同意画面を構成する必要があります。同意画面にカスタム ブランディングを表示するには、Google の検証のためにアプリケーションを送信する必要があります。確認プロセスの詳細については、OAuth 同意画面の設定をご覧ください。
カスタム OAuth クライアントを構成する場合は、認証情報の作成と管理はお客様の責任で行っていただきます。これには、クライアント シークレットの安全な保存と、必要に応じて承認済みクライアントとの共有が含まれます。
Google 管理の OAuth クライアントとカスタム OAuth クライアントを比較する
Google 管理の OAuth クライアントは、IAP で保護されたアプリケーションにプログラムでアクセスできません。ただし、Google 管理の OAuth クライアントを使用する IAP で保護されたアプリケーションには、programmatic_clients 設定またはサービス アカウントの JWT を介して構成された別の OAuth クライアントを使用して、プログラムでアクセスできます。
次の表に、Google マネージド OAuth クライアントとカスタム OAuth クライアントの比較を示します。
| Google マネージド OAuth クライアント | カスタム OAuth クライアント | |
|---|---|---|
| ユーザー | 内部専用 | 地域が分散した |
| ブランド | Google Cloud brand | 顧客所有のブランド |
| OAuth の設定 | Google による構成 | お客様による構成 |
| Oauth 認証情報 | Google が管理 | 顧客管理 |
| アプリケーション アクセス | ブラウザ フローのみ | ブラウザフローとプログラムによるアクセス |
ブランディング ページを構成する
Google Cloud コンソールを使用してカスタム ブランディング ページを構成する手順は次のとおりです。
Google Cloud コンソールで、OAuth の [ブランディング] ページに移動します。
[開始] をクリックします。
[アプリ名] に、同意画面に表示するアプリケーションの名前を入力します。
[ユーザー サポートメール] に、サポート用の管理者のメールアドレスを入力します。
[対象ユーザー] で、組織内のユーザーにアクセスを制限する場合は [内部] を選択し、組織外のユーザーにアクセスを許可する場合は [外部] を選択します。
[連絡先情報] に、OAuth クライアントで保護されているアプリの連絡先となる管理者メールアドレスを入力します。OAuth クライアントは後の手順で構成します。
OAuth 構成を作成するには、[作成] をクリックします。
IAP でカスタム OAuth クライアントを構成する
このセクションでは、IAP でカスタム OAuth クライアントを設定する方法について説明します。
カスタム OAuth クライアントを作成する
このセクションでは、Google Cloud コンソールを使用してカスタム OAuth クライアントを作成する方法について説明します。カスタム IAP OAuth クライアントは、リソース階層の任意のレベルで設定できます。
Google Cloud コンソールを使用してリソースのカスタム OAuth クライアントを作成する手順は次のとおりです。
Google Cloud コンソールで、[IAP] ページに移動します。
[アプリケーション] タブのリソース リストで、構成するリソースを見つけます。
プロジェクト レベルのリソースの場合は、次の操作を行います。
Google Cloud コンソールを使用して OAuth クライアントを作成します。
[アクション] 列で、 [その他のオプション] > [設定] をクリックします。
[設定] ダイアログで、[カスタム OAuth] を選択します。
同意画面を構成していない場合は、次の操作を行います。
[同意画面を構成] をクリックします。
このドキュメントの前半で説明した手順に沿って、ブランディング ページを構成します。
[IAP 設定] ダイアログで、[認証情報を自動生成] をクリックします。IAP は、このリソースで使用する新しい OAuth クライアントとシークレットを生成します。Google Auth Platform の [承認済みのリダイレクト URI] フィールドには、次の形式のエントリが含まれています。
https://iap.googleapis.com/v1/oauth/clientIds/CLIENT_ID:handleRedirect
クライアント ID とシークレットにアクセスするには、[認証情報をダウンロード] をクリックします。認証情報は JSON 形式のファイルに保存されます。このファイルにはリソースへのアクセスに必要な機密情報が含まれているため、ファイルが保護されているか削除されていることを確認してください。
IAP OAuth 構成を保存して OAuth クライアントを IAP に適用するには、[保存] をクリックします。
カスタム OAuth クライアントを IAP に適用する
このセクションでは、OAuth クライアントを IAP に適用する方法について説明します。このメソッドは、プラットフォームにクライアントを直接適用する代わりに使用できます。
カスタム OAuth クライアントを作成するには、このドキュメントで前述したGoogle Cloud コンソールの手順に沿って操作します。
カスタム OAuth クライアントを適用します。
gcloud
gcloud CLI を使用してカスタム OAuth クライアントを適用する手順は次のとおりです。
設定 YAML ファイルを作成します。
cat << EOF > iap-oauth.yaml accessSettings: oauthSettings: clientId: CLIENT_ID clientSecret: CLIENT_SECRET EOF
次のように置き換えます。
CLIENT_ID: 前に生成した OAuth 認証情報のクライアント ID。CLIENT_SECRET: 先ほど生成した OAuth 認証情報のクライアント シークレット。
OAuth 構成を設定するには、次のいずれかを行います。
- プロジェクト レベルで OAuth 構成を設定するには、次のコマンドを実行します。
gcloud iap settings set iap-oauth.yaml
リソース階層の別のレベルで構成を設定するには、
--projectフラグの代わりに次のいずれかのフラグを使用します。リソース階層のレベルでカスタム OAuth クライアントを設定すると、そのレベル内で実行されるすべてのサービスに同じカスタム ブランディングが提供されます。* <code>--folder=<var>FOLDER_ID</var></code> * <code>--organization=<var>ORGANIZATION_ID</var></code>- 特定のサービスに構成を設定するには、次のコマンドを実行します。
gcloud iap settings set iap-oauth.yaml \ --project=PROJECT_ID \ --resource-type= RESOURCE_TYPE \ --region=REGION \ --service=SERVICE_NAME
次のように置き換えます。
PROJECT_ID: プロジェクト リソースの ID。別のレベルで構成を設定するには、--projectフラグの代わりに次のいずれかのフラグを使用します。--folder=FOLDER_ID--organization=ORGANIZATION_ID
RESOURCE_TYPE: リソースに応じて、次のいずれかのリソースタイプに置き換えます。app-enginebackend-servicescloud-runcomputefolderforwarding-ruleiap_weborganization
REGION: Cloud Run サービスを実行するリージョン。SERVICE_NAME: サービスの名前。
Terraform
Terraform を使用してカスタム OAuth クライアントを適用する手順は次のとおりです。
resource "google_iap_settings" "iap_settings" { name = IAP_RESOURCE_NAME access_settings { oauth_settings { oauth_client_id = CLIENT_ID oauth_client_secret = CLIENT_SECRET } } }次のように置き換えます。
IAP_RESOURCE_NAME: サービスのiap_settingsリソースのリソース名。形式はprojects/PROJECT_NUMBER/iap_web/REGION/services/SERVICE_NAMEです。CLIENT_ID: 先ほど生成した OAuth 認証情報のクライアント IDCLIENT_SECRET: 先ほど生成した OAuth 認証情報のクライアント シークレット
REST API
設定の JSON ファイルを作成します。
cat << EOF > iap-oauth.json { "accessSettings": { "oauthSettings": { "clientId": "CLIENT_ID", "clientSecret": "CLIENT_SECRET" } } } EOF
次のように置き換えます。
CLIENT_ID: 前に生成した OAuth 認証情報のクライアント ID。CLIENT_SECRET: 先ほど生成した OAuth 認証情報のクライアント シークレット。
設定ファイルを適用します。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/yaml" \ "https://iap.googleapis.com/v1/projects/cb-managed-ingress-demo/iap_web/forwarding_rule-us-central1/services/psc-fr:iapSettings?update_mask=iapSettings.accessSettings.oauthSettings.oauthClientId,iapSettings.accessSettings.oauthSettings.oauthClientSecret" \ -d @iap-oauth.json
OAuth クライアントを使用してウェブ アプリケーションが IAP で保護されていることをテストするには、アクセスをテストするをご覧ください。
リソースのカスタム OAuth クライアントの以前の構成
以降のセクションでは、特定のリソースタイプに対して IAP でカスタム OAuth クライアントを構成する以前の方法について説明します。このドキュメントで前述した方法を使用した場合は、このセクションをスキップできます。
App Engine
このセクションでは、App Engine でカスタム OAuth クライアントを有効にする方法について説明します。
gcloud
プロジェクトと IAP を設定する前に、最新バージョンの gcloud CLI を入手する必要があります。gcloud CLI をインストールする手順については、gcloud CLI をインストールするをご覧ください。
-
認証するには、Google Cloud CLI を使用して次のコマンドを実行します。
gcloud auth login - 表示された URL に従ってログインします。
- ログインしたら、表示される確認コードをコピーしてコマンドラインに貼り付けます。
-
次のコマンドを実行して、IAP で保護するリソースを含むプロジェクトを指定します。
gcloud config set project PROJECT_ID - IAP の OAuth クライアントを作成するの手順に沿って、OAuth 同意画面を構成し、OAuth クライアントを作成します。
- OAuth クライアント ID とシークレットを保存します。
-
IAP を有効にするには、次のコマンドを実行します。
gcloud iap web enable \ --oauth2-client-id=CLIENT_ID \ --oauth2-client-secret=CLIENT_SECRET \ --resource-type=app-engine
IAP を有効にすると、gcloud CLI で roles/iap.httpsResourceAccessor の IAM ロールを使用して IAP アクセス ポリシーを変更できます。詳しくは、ロールと権限の管理をご覧ください。
API
IAP の OAuth クライアントを作成するの手順に沿って、OAuth 同意画面を構成し、OAuth クライアントを作成します。
OAuth クライアント ID とシークレットを保存します。
次のコマンドを実行して
settings.jsonファイルを準備します。cat << EOF > settings.json { "iap": { "enabled": true, "oauth2ClientId": "CLIENT_ID", "oauth2ClientSecret":" CLIENT_SECRET" } } EOF次のコマンドを実行して IAP を有効にします。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://appengine.googleapis.com/v1/apps/PROJECT_ID?updateMask=iap"
IAP を有効にすると、Google Cloud CLI で roles/iap.httpsResourceAccessor の IAM ロールを使用して IAP アクセス ポリシーを変更できます。詳しくは、ロールと権限の管理をご覧ください。
GKE
このセクションでは、GKE でカスタム OAuth クライアントを有効にする方法について説明します。
BackendConfig を構成する
GKE クラスタ バージョン 1.24 以降を実行している場合は、Kubernetes Gateway API を使用して IAP と GKE を構成できます。手順については、IAP を構成するをご覧ください。
IAP の OAuth クライアントを作成するの手順に沿って、OAuth 同意画面を構成し、OAuth クライアントを作成します。
OAuth クライアントをラップする Kubernetes Secret を作成します。
次のように置き換えます。kubectl create secret generic MY_SECRET --from-literal=client_id=CLIENT_ID \ --from-literal=client_secret=CLIENT_SECRET
MY_SECRET: 作成するシークレットの名前CLIENT_ID: OAuth クライアント IDCLIENT_SECRET: OAuth クライアント シークレット
Secret が正常に作成されたことを示す確認メッセージ(次の出力など)が表示されます。
secret "MY_SECRET" created
OAuth 認証情報を BackendConfig に追加します。
apiVersion: cloud.google.com/v1 kind: BackendConfig metadata: name: CONFIG_DEFAULT namespace: my-namespace spec: iap: enabled: true oauthclientCredentials: secretName: MY_SECRETService ポートを BackendConfig に関連付けて、IAP を有効にします。BackendConfig の Ingress への関連付けをご覧ください。たとえば、次のアノテーションを Service リソースに追加し、サービスのすべてのポートをデフォルトで BackendConfig にします。
metadata: annotations: beta.cloud.google.com/backend-config: '{"default": "CONFIG_DEFAULT"}}'
IAP を有効にすると、gcloud CLI で roles/iap.httpsResourceAccessor の IAM ロールを使用して IAP アクセス ポリシーを変更できます。詳しくは、ロールと権限の管理をご覧ください。
トラブルシューティング
参照先の secretName が存在しないか、正しく構成されていないと、次のいずれかのエラー メッセージが表示されます。
BackendConfig default/config-default is not valid: error retrieving secret "foo": secrets "foo" not found.このエラーを解決するには、手順 2 で説明したとおり Kubernetes Secret が正しく作成されていることを確認します。BackendConfig default/config-default is not valid: secret "foo" missing client_secret data.このエラーを解決するには、OAuth 認証情報が正しく作成されていることを確認します。また、正しいclient_idキーとclient_secretキーを参照していることも確認します。
ロードバランサのバックエンド サービス
Compute Engine と Cloud Run のユーザー向けに、このセクションでは、ロードバランサ バックエンド サービスの IAP で OAuth クライアントを設定する方法について説明します。
gcloud
プロジェクトと IAP を設定する前に、最新バージョンの gcloud CLI を入手する必要があります。gcloud CLI をインストールする手順については、gcloud CLI をインストールするをご覧ください。
-
認証するには、Google Cloud CLI を使用して次のコマンドを実行します。
gcloud auth login - 表示された URL に従ってログインします。
- ログインしたら、表示される確認コードをコピーしてコマンドラインに貼り付けます。
-
次のコマンドを実行して、IAP で保護するリソースを含むプロジェクトを指定します。
gcloud config set project PROJECT_ID
- IAP の OAuth クライアントを作成するの手順に沿って、OAuth 同意画面を構成し、OAuth クライアントを作成します。
- OAuth クライアント ID とシークレットを保存します。
-
IAP を有効にするには、グローバル スコープまたはリージョン スコープのコマンドを実行します。
グローバル スコープ リージョン スコープgcloud compute backend-services update BACKEND_SERVICE_NAME \ --global \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRETgcloud compute backend-services update BACKEND_SERVICE_NAME \ --region REGION_NAME \ --iap=enabled,oauth2-client-id=CLIENT_ID,oauth2-client-secret=CLIENT_SECRET
IAP を有効にすると、gcloud CLI で roles/iap.httpsResourceAccessor の IAM ロールを使用して IAP アクセス ポリシーを変更できます。詳しくは、ロールと権限の管理をご覧ください。
API
IAP の OAuth クライアントを作成するの手順に沿って、OAuth 同意画面を構成し、OAuth クライアントを作成します。
OAuth クライアント ID とシークレットを保存します。
次のコマンドを実行して
settings.jsonファイルを準備します。cat << EOF > settings.json { "iap": { "enabled": true, "oauth2ClientId": "CLIENT_ID", "oauth2ClientSecret": "CLIENT_SECRET" } } EOF次のコマンドを実行して IAP を有効にします。
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d @settings.json \ "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/REGION/backendServices/BACKEND_SERVICE_NAME"
IAP を有効にすると、gcloud CLI で roles/iap.httpsResourceAccessor の IAM ロールを使用して IAP アクセス ポリシーを変更できます。詳しくは、ロールと権限の管理をご覧ください。
アクセスをテストする
カスタム OAuth クライアントを構成したら、次の操作を行って、IAP がそのクライアントを使用してサービスを保護していることをテストできます。
[IAP] ページの [アプリケーション] タブで、IAP が管理するアプリケーションを表示します。
いずれかのアプリケーションの URL にアクセスします。同意画面を構成してから初めてアプリケーションにアクセスする場合は、以前に構成した同意画面が表示されます。