このドキュメントでは、Identity-Aware Proxy(IAP)の設定をカスタマイズする方法について説明します。この設定により、以下のような動作を制御できます。
Google Kubernetes Engine での Cloud Service Mesh と Istio の互換性。
CORS のプリフライト リクエストの処理
ユーザーの認証方法
アクセスが拒否されたときにユーザーに表示されるエラーページ
設定を管理
ロードバランサと App Engine アプリの IAP 設定を表示および更新するには、 Google Cloud コンソール、IAP API、または Google Cloud CLI を使用します。フォルダ、プロジェクト、組織を含むすべてのリソースの IAP 設定を更新するには、Google Cloud CLI または API を使用します。
IAP で設定を管理するには:
コンソール
Google Cloud コンソールを使用して設定の表示や変更を行うには、次のようにします。
[Identity-Aware Proxy] ページに移動します。
[Identity-Aware Proxy] ページに移動[アプリケーション] タブでリソースを見つけます。
[その他の操作] メニューを開き、[設定] をクリックします。
[保存] をクリックします。
gcloud
Google Cloud CLI を使用して設定を取得、変更するには、gcloud iap settings get コマンドと gcloud iap settings set コマンドを次のように使用します。
- プロジェクト、フォルダまたは組織の設定を取得するには、以下のコマンドを使用します。 Google Cloud コンソールまたは gcloud CLI を使用して IAP の設定を構成するには、IAP のカスタマイズをご覧ください。
gcloud iap settings get --project=PROJECT-ID
gcloud iap settings get --folder=FOLDER-ID
gcloud iap settings get --organization=ORGANIZATION-ID
- プロジェクトの特定の IAP リソースタイプの設定を取得するには:
gcloud iap settings get --project=PROJECT-ID \ --resource-type=RESOURCE-TYPE-NAME
- プロジェクト、フォルダー、組織、またはプロジェクトの IAP リソースタイプを設定するには、目的の新しい設定を含む JSON または YAML ファイルを作成し、ファイルへのパスを指定します。詳細については、
gcloud iap settings setトピックをご覧ください。
gcloud iap settings set SETTING_FILE --project=PROJECT-ID \ --resource-type=RESOURCE-TYPE-NAME
API
IAP API を使用して設定を取得および変更するには、GET または PATCH HTTP 動詞を使用して、 Google Cloudで選択したリソース エンドポイントにリクエストを送信します。:iapSettings パス接尾辞、リソースパス(リソースと権限を参照)、適切な HTTP メソッドを組み合わせて、設定を取得または変更します。詳細については、getIapSettings() と updateIapSettings() をご覧ください。
- プロジェクトの特定の IAP リソースタイプの設定を取得または設定するには:
https://iap.googleapis.com/v1/projects/PROJECT-ID/iap_web/appengine-APP-ID/services/SERVICE-ID/versions/VERSION-ID:iapSettings
プロジェクトの設定を取得または設定するには:
https://iap./v1/projects/PROJECT-ID:iapSettings
フォルダの設定を取得または設定するには:
https://iap./v1/folders/FOLDER-ID:iapSettings
組織の設定を取得または設定するには:
https://iap./v1/organizations/ORGANIZATION-ID:iapSettings
IAP 設定のロールと権限
このセクションでは、IAP 設定の表示と更新に必要なロールと権限について説明します。
設定ロール
IAP 設定管理者(roles/iap.settingsAdmin)ロールは、組織レベル、フォルダレベル、プロジェクト レベルで付与できます。IAP 設定管理者のロールによって付与される権限については、設定権限をご覧ください。
IAP のロールと権限の詳細については、Identity-Aware Proxy のロールと権限をご覧ください。
次の基本ロールにより、これらの権限が付与されます。
プロジェクト閲覧者(
roles/viewer)ロールには、すべてのgetSettings権限が付与されます。編集者(
roles/editor)ロールには、表に記載されているすべての権限が付与されます。
設定の権限
次の表に、各リソースタイプの設定の読み取りと変更に必要な IAM 権限を示します。さまざまなリソースタイプの説明については、リソースと権限をご覧ください。
| リソース | 設定の表示に必要な権限 | 設定の変更に必要な権限 |
|---|---|---|
| 組織 | iap.organizations.getSettings |
iap.organizations.updateSettings |
| フォルダ | iap.folders.getSettings |
iap.folders.updateSettings |
| プロジェクト | iap.projects.getSettings |
iap.projects.updateSettings |
| すべてのウェブサービス | iap.web.getSettings |
iap.web.updateSettings |
| ウェブタイプ | iap.webTypes.getSettings |
iap.webTypes.updateSettings |
| ウェブサービス | iap.webServices.getSettings |
iap.webServices.updateSettings |
| ウェブサービス バージョン | iap.webServiceVersions.getSettings |
iap.webServiceVersions.updateSettings |
| ウェブタイプ | iap.webTypes.getSettings |
iap.webTypes.updateSettings |
IAM ロールの付与の詳細については、アクセス権の付与、変更、取り消しをご覧ください。
IAP 設定をカスタマイズする
IAP では、次の設定をカスタマイズできます。
| フィールド | 説明 |
|---|---|
access_settings.cors_settings.allow_http_options |
HTTP OPTIONS(CORS のプリフライト)を制御します |
access_settings.oauth_settings.login_hint |
Google Workspace ドメインのユーザーのログインを簡素化する |
application_settings.access_denied_page_settings.access_denied_page_uri |
アクセスが拒否されたときにカスタム エラーページを表示します |
application_settings.csm_settings.rctoken_aud |
Cloud Service Mesh と Istio の RCToken を発行する |
access_settings.gcip_settings |
Identity Platform で認証します |
access_settings.ReauthSettings |
再認証ポリシーを設定します。詳細については、再認証を構成するをご覧ください |
設定は、プロジェクト レベルまたは下位の任意の IAP リソースレベルで適用できます。
ウェブベースの IAP リソースの設定は構成できますが、TCP 転送用の IAP でアクセスするリソースは構成できません。
例として access_settings.cors_settings.allow_http_options を使用すると、カスタマイズ設定を次のように構成できます。
YAML
access_settings:
cors_settings:
allow_http_options: "false"JSON
{
"access_settings": {
"cors_settings": {
"allow_http_options": "false"
}
}
}以降のセクションでは、それぞれの設定について詳しく説明します。
HTTP OPTIONS リクエストを許可する(CORS プリフライト)
| フィールド | デフォルト値 |
|---|---|
access_settings.cors_settings.allow_http_options |
false |
ウェブの same-origin ポリシーにより、ブラウザがウェブサイト間で AJAX リクエストを送信することは許可されていません。デフォルトでは、ある送信元から配信されたページの JavaScript が、IAP で保護されている別の送信元のアプリに AJAX リクエストを送信することはできません。
ブラウザが自動的にリクエストを送信するケースもありますが、レスポンスに Access-Control-Allow-Origin ヘッダーが含まれていない場合、レスポンスのコンテンツが破棄されます。こうしたリクエストを許可するには、このヘッダーをアプリのレスポンスに含める必要があります。
それ以外の場合、クロスオリジン リクエストを送信する前に、ブラウザは CORS プリフライト リクエスト(HTTP OPTIONS リクエストの一種)を送信します。アプリから適切なプリフライト レスポンス(必要な Access-Control-* レスポンス ヘッダーを含むレスポンス)が返されない場合、ブラウザはリクエストをブロックし、エラーを返します。また、プリフライト リクエストには IAP セッション Cookie などの認証情報が含まれていないため、IAP もエラーを返します。
このようなリクエストを許可するには:
OPTIONSリクエストに応答するアプリにコードを追加します。IAP が
OPTIONSリクエストをアプリケーションに送信するように、access_settings.cors_settings.allow_http_optionsをtrueに変更します。
Google Workspace ドメインを使用して認証する
| 項目 | デフォルト値 |
|---|---|
access_settings.oauth_settings.login_hint |
"" |
特定の Google Workspace ドメインのメンバーのみがアプリを使用する場合、IAP を構成して認証フローを最適化できます。これには、さまざまなメリットがあります。
ユーザーが複数のアカウント(仕事用アカウントと個人用アカウントなど)でログインしている場合、システムはアカウント選択 UI を表示する代わりに、仕事用アカウントを自動的に選択します。
ユーザーが Google アカウントにログインしていない場合、ログイン UI はメールアドレスのドメイン部分を自動的に入力します(たとえば、ユーザーは
alice@example.comではなくaliceと入力するだけで済みます)。Google Workspace ドメインでサードパーティのシングル サインオン プロバイダを使用するように構成されている場合、Google ではなくカスタムのログインページが表示されます。
この動作を有効にするには、access_settings.oauth_settings.login_hint の値を Google Workspace ドメイン名(example.com など)に設定します。ドメインの所有権を確認しておく必要があります。所有している任意のインターネット DNS ドメインは使用できません。(Google Workspace のプライマリ ドメインまたはセカンダリ ドメインとして追加されているドメインは確認済みであるため、ここで使用できます)。
ドメイン外ユーザーの認証が必要な場合は、プログラムによる認証を使用できます。
詳細については、OpenID Connect のドキュメントをご覧ください。
カスタム アクセス拒否エラーページを設定する
注: この機能は、有料のエンタープライズ セキュリティ サブスクリプションの一部としてのみご利用いただけます。ご希望の場合は、こちらから登録できます。| 項目 | デフォルト値 |
|---|---|
application_settings.access_denied_page_settings.access_denied_page_uri |
"" |
このフィールドに URL を設定して、ポリシーによってアクセスが拒否されるときはいつでも、デフォルトの IAP エラーページではなくカスタムページにユーザーをリダイレクトできます。
この機能を使用して、トラブルシューティング URL を埋め込むこともできます。詳細については、アクセス拒否エラーのカスタムページ用トラブルシューティング URL を有効にするをご覧ください。Cloud Service Mesh と Istio RCToken メッシュ ID を発行する
| フィールド | デフォルト値 |
|---|---|
application_settings.csm_settings.rctoken_aud |
"" |
GKE で Istio を使用している場合、Istio 対応の RCToken を生成するように IAP を構成できます。このフィールドに空白以外の文字列を設定すると、IAP は RCToken を含む Ingress-Authorization HTTP ヘッダーを追加します。aud クレームには、フィールドの値が設定されます。
Identity Platform で認証します
| フィールド | デフォルト値 |
|---|---|
access_settings.gcip_settings |
null |
デフォルトでは、IAP は Google の組み込み ID システムを使用します。このフィールドを設定すると、IAP は代わりに Identity Platform でユーザーの認証を行います。
Terraform を使用して IAP をカスタマイズする
Terraform を使用して IAP を設定するには、google_iap_settings をご覧ください。
リソース階層における設定の継承について
IAP は常に、特定のウェブサービス バージョンのリクエストを評価します。このタイプのリソースは、次のようにリソース階層の最下位にあります。
- Organization
- Folder
- Project
- All web services
- Web service type
- Web service
- Web service version
ウェブサービスのバージョンに適用する設定を調べるため、IAP はまずデフォルト値のセットを参照し、その後、階層の上から下に移動していきます。設定は検出されたとおりに適用されるため、下位レベルで設定された値は上位レベルで設定された値をオーバーライドします。
たとえば、access_settings.cors_settings.allow_http_options がプロジェクト レベルで true に設定され、サービスレベルで false に設定されている場合、有効な値は false になります。
IAP リソース階層の詳細については、リソースと権限をご覧ください。