この記事では、Identity-Aware Proxy(IAP)の設定をカスタマイズする方法について説明します。この設定により、以下のような動作を制御できます。
- Google Kubernetes Engine での GKE Enterprise と Istio の互換性。
- CORS のプリフライト リクエストの処理
- ユーザーの認証方法
- アクセスが拒否されたときにユーザーに表示されるエラーページ
設定の管理
Google Cloud コンソール、IAP API、または Google Cloud CLI を使用して、ロードバランサと App Engine アプリの IAP 設定を表示および更新できます。
フォルダ、プロジェクト、組織など、すべてのリソースの IAP 設定を更新するには、Google Cloud CLI または API を使用します。
IAP で設定を管理するには:
Console
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.googleapis.com/v1/projects/PROJECT-ID:iapSettings
- フォルダの設定を取得または設定するには:
https://iap.googleapis.com/v1/folders/FOLDER-ID:iapSettings
- 組織の設定を取得または設定するには:
https://iap.googleapis.com/v1/organizations/ORGANIZATION-ID:iapSettings
設定のアクセス制御を理解する
IAP の設定を表示または変更するには、特定の権限が必要です。次の表に、各リソースタイプの設定の読み取りと変更に必要な権限を示します。リソースタイプごとの詳細については、リソースと権限をご覧ください。
リソース | 設定の表示に必要な権限 | 設定の変更に必要な権限 |
---|---|---|
組織 | 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 設定管理者(roles/iap.settingsAdmin
)役割は、これらの権限をすべて付与します。プロジェクト編集者(roles/editor
)とプロジェクト閲覧者(roles/viewer
)は、すべての getSettings
権限を付与します。
IAM のロールの付与の詳細については、アクセス権の付与、変更、取り消しをご覧ください。
IAP 設定のカスタマイズ
IAP では、次の設定をカスタマイズできます。
項目 | 説明 |
---|---|
access_settings.cors_settings.allow_http_options |
HTTP OPTIONS(CORS のプリフライト)を制御します |
access_settings.oauth_settings.login_hint |
G Suite ドメインのユーザーのログインを簡単にします |
application_settings.access_denied_page_settings.access_denied_page_uri |
アクセスが拒否されたときにカスタム エラーページを表示します |
application_settings.csm_settings.rctoken_aud |
GKE Enterprise と 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 を有効にするをご覧ください。
GKE Enterprise と 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 でユーザーの認証を行います。
リソース階層における設定の継承について
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 リソース階層の詳細については、リソースと権限をご覧ください。