IAP をカスタマイズする

このドキュメントでは、Identity-Aware Proxy(IAP)の設定をカスタマイズする方法について説明します。この設定により、以下のような動作を制御できます。

  • Google Kubernetes Engine での GKE Enterprise と Istio の互換性。
  • CORS のプリフライト リクエストの処理
  • ユーザーの認証方法
  • アクセスが拒否されたときにユーザーに表示されるエラーページ

設定を管理

ロードバランサと App Engine アプリの IAP 設定は、 Google Cloud コンソール、IAP API、または Google Cloud CLI を使用して表示および更新できます。

フォルダ、プロジェクト、組織など、すべてのリソースの IAP 設定を更新するには、Google Cloud CLI または API を使用します。

IAP で設定を管理するには:

コンソール

Google Cloud コンソールを使用して設定の表示や変更を行うには:

  1. [Identity-Aware Proxy] ページに移動します。
    [Identity-Aware Proxy] ページに移動
  2. [アプリケーション] タブでリソースを見つけます。
  3. [その他の操作] メニューを開き、[設定] をクリックします。
  4. [保存] をクリックします。

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 設定の表示と更新に必要なロール権限について説明します。

設定のロール

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 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 もエラーを返します。

このようなリクエストを許可するには:

  1. OPTIONS リクエストに応答するアプリにコードを追加します。

  2. IAP が OPTIONS リクエストをアプリケーションに送信するように、access_settings.cors_settings.allow_http_optionstrue に変更します。

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 ""

GKEIstio を使用している場合、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 リソース階層の詳細については、リソースと権限をご覧ください。