このドキュメントでは、 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 ブランド | お客様が所有するブランド |
| OAuth の設定 | Google による構成 | お客様による構成 |
| Oauth 認証情報 | Google が管理 | 顧客管理 |
| アプリケーション アクセス | ブラウザフローのみ | ブラウザフローとプログラムによるアクセス |
ブランディング ページを構成する
Google Cloud コンソールを使用してカスタム ブランディング ページを構成する手順は 次のとおりです。
Google Cloud コンソールで、OAuth の [ブランディング] ページに移動します。
[開始] をクリックします。
[**アプリ名**] に、同意画面のアプリケーションの名前を入力します。
[**ユーザー サポートのメールアドレス**] に、サポート用の管理者メールアドレス を入力します。
[**オーディエンス**] で、[**内部**] を選択して組織内のユーザーにアクセスを制限するか、[**外部**] を選択して組織外のユーザーにアクセスを許可します。
[**連絡先情報**] に、OAuth クライアントで保護されているアプリの連絡先となる管理者メールアドレスを入力します。OAuth クライアントは後の手順で構成します。
OAuth 構成を作成するには、[作成] をクリックします。
IAP でカスタム OAuth クライアントを構成する
このセクションでは、IAP でカスタム OAuth クライアントを設定する方法について説明します。
Google Cloud コンソールを使用して、次の方法で IAP のカスタム OAuth クライアントを作成できます。
- OAuth クライアントを手動で作成する: IAP を構成する前に、リダイレクト URI を自分で追加する必要があります。
- IAP の自動生成認証情報を使用して OAuth クライアントを自動的に作成する: IAP が OAuth クライアントを作成して構成し、必要なリダイレクト URI を自動的に追加します。
どの方法を使用する場合でも、OAuth クライアントを作成する前にブランディング ページを構成してください。必要なリダイレクト URI の形式は、どちらの方法でも表示されます。
カスタム OAuth クライアントを作成する
このセクションでは、 Google Cloud コンソールを使用してカスタム OAuth クライアントを作成する方法について説明します。リソース階層の任意のレベルでカスタム IAP OAuth クライアントを設定できます。
Google Cloud コンソール を使用してリソースのカスタム OAuth クライアントを作成するには、次のいずれかの方法を使用します。
方法 1: Google Cloud コンソールを使用して OAuth クライアントを作成する
この方法は、リソースの IAP を構成する前に、OAuth クライアントを個別に作成する場合に使用します。これには、IAP リダイレクト URI を手動で追加する必要があります。
コンソール Google Cloud で、[API とサービス] >[認証情報] に移動します。
[認証情報を作成] をクリックし、[OAuth クライアント ID] を選択します。
[**アプリケーションの種類**] で [**ウェブ アプリケーション**] を選択します。
[名前] フィールドに、OAuth クライアントのわかりやすい名前を入力します。
[作成] をクリックします。生成されたクライアント ID をメモします。
OAuth クライアントが作成されたら、新しく作成した OAuth クライアントの OAuth クライアントの詳細ページの [承認済みのリダイレクト URI] セクションに移動します。
[URI を追加] をクリックし、次の IAP 固有の [承認済みのリダイレクト URI] を入力します。
https://iap.googleapis.com/v1/oauth/clientIds/YOUR_CLIENT_ID:handleRedirect
YOUR_CLIENT_IDは、前の手順で取得したクライアント ID に置き換えます。[保存] をクリックします。
方法 2: IAP の自動生成認証情報を使用して OAuth クライアントを作成する
この方法を使用すると、IAP が OAuth クライアントを作成して構成し、必要なリダイレクト URI を自動的に追加します。
コンソール 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 クライアントを設定すると、そのレベル内で実行されるすべてのサービスに同じカスタム ブランディングが提供されます。* <pre>--folder=<var>FOLDER_ID</var></pre> * <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
Follow the instructions in Creating OAuth clients for IAP to configure the OAuth consent screen and create the OAuth client.
Save the OAuth client ID and secret.
Run the following command to prepare a
settings.jsonfile.cat << EOF > settings.json { "iap": { "enabled": true, "oauth2ClientId": "CLIENT_ID", "oauth2ClientSecret":" CLIENT_SECRET" } } EOFRun the following command to enable 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"
After you enable IAP, you can use the Google Cloud CLI to modify the
IAP access policy using the IAM role
roles/iap.httpsResourceAccessor. Learn more about
managing roles and permissions.
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: 作成する 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 にアクセスします。同意画面を構成してから初めてアプリケーションにアクセスする場合は、先ほど構成した同意画面が表示されます。