IAP をカスタマイズする

このドキュメントでは、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 コンソールを使用して設定の表示や変更を行うには、次のようにします。

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

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

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

  2. 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 リソース階層の詳細については、リソースと権限をご覧ください。