IAP のカスタマイズ

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

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

設定の管理

Cloud Console、IAP API、または gcloud コマンドライン ツールを使用して設定の表示や更新を行えます。

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

コンソール

Cloud Console を使用して設定の表示や変更を行うには、次のようにします。

  1. [Identity-Aware Proxy] ページに移動します。
    [Identity-Aware Proxy] ページに移動
  2. [HTTPS のリソース] タブでリソースを見つけます。
  3. [その他の操作] メニューを開き、[設定] をクリックします。
  4. 変更を加えたら、[保存] をクリックします。

gcloud

gcloud コマンドライン ツールを使用して設定を取得、変更するには、以下に示すように gcloud iap settings getgcloud iap settings set コマンドを使用します。

  • プロジェクト、フォルダまたは組織の設定を取得するには、以下のコマンドを使用します。詳細については、gcloud iap settings get トピックをご覧ください。
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 Anthos と Istio RCToken を発行します
access_settings.gcip_settings Identity Platform で認証します

設定は、プロジェクト レベルまたは下位の任意の 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 など)に設定します。ドメイン外のユーザーを認証する必要がある場合は、プログラムによる認証を使用できます。

詳細については、OpenID Connect のドキュメントをご覧ください。

カスタム アクセス拒否のエラーの設定ページ

項目 デフォルト値
application_settings.access_denied_page_settings.access_denied_page_uri ""

このフィールドに URL を設定して、ポリシーによってアクセスが拒否されるときはいつでも、デフォルトの IAP エラーページではなくカスタムページにユーザーをリダイレクトできます。

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