IAP で保護されたリソースへのアクセスの管理

このページでは、Identity-Aware Proxy(IAP)で保護されたリソースへの個々またはグループでのアクセスをリソースレベルで管理する方法について説明します。

概要

IAP を使用すると、Google Cloud プロジェクトの個々のリソースと Cloud Run リソースに IAP ポリシーを構成できます。プロジェクトに複数のアプリがある場合は、アプリごとに異なるアクセス ポリシーを設定できます。たとえば、プロジェクトに Compute Engine、Google Kubernetes Engine、App Engine のアプリが含まれている場合があります。App Engine アプリの場合、バージョンとサービスごとに異なるアクセス ポリシーを適用できます。

プロジェクト以上のレベルでアクセスを管理するには、IAM の管理ページを使用します。プロジェクト レベルでアクセス権を持つユーザー(プリンシパル)のリストは、プロジェクト内の IAP で保護されたすべてのリソースに適用されます。

始める前に

始める前に、次のものが必要になります。

  • IAP で保護され、個別またはグループ アクセスを追加するリソース。
  • アクセス権を追加するユーザー名またはグループ名。

IAP の有効化と無効化

IAP を有効または無効にするには、特定の権限が必要です。次の表に、アプリの種類ごとに必要な権限を示します。

アプリの種類 必要な権限
App Engine appengine.applications.update
Compute Engine、Google Kubernetes Engine、Cloud Run compute.backendServices.update

上記の権限は、プロジェクト編集者、App Engine 管理者、コンピューティング ネットワーク管理者などの役割によって付与されます。これらの役割は、IAP を有効または無効にできますが、アクセス ポリシーの変更に必要な権限はありません。

また、Google Cloud コンソールで IAP を有効にするには、clientauthconfig.clients.create 権限と clientauthconfig.clients.getWithSecret 権限が必要になる場合があります。この 2 つの権限は、プロジェクト編集者の役割によって付与されます。

役割の付与の詳細については、アクセス権の付与、変更、取り消しをご覧ください。

Google Cloud コンソールによるアクセス管理

IAP で保護されたリソースへのアクセスを Google Cloud コンソールで制御するには、アクセス権の追加または削除の手順に従います。

アクセス権を追加する

  1. [Identity-Aware Proxy] ページに移動します。
    [Identity-Aware Proxy] ページに移動

  2. IAP で保護するリソースを選択します。次のリソースを選択すると、リソースのグループが保護されます。

    • すべてのウェブサービス: プロジェクト内のすべてのリソースが保護されます。これは、IAM 管理ページでプロジェクト レベルのアクセス権を付与する場合と異なります。すべてのウェブサービスのリソースレベルで IAP ポリシー管理者の役割が付与されたユーザーには、IAP ポリシーに対する権限のみが付与されます。

    • バックエンド サービス: すべてのバックエンド サービスが保護されます。

  3. 右側の情報パネルで、リソースに対する Identity and Access Management(IAM)ロールを付与するグループまたは個人のメールアドレスを追加します。

  4. [ロールを選択] プルダウンで次のロールを選択して、アクセス ポリシーのロールをプリンシパルに適用します。

    • オーナー: IAP ポリシー管理者と同じアクセス権を付与します。代わりに、IAP ポリシー管理者役割を使用してください。この役割はポリシーの変更のみを許可し、アプリへのアクセスは許可しません。

    • IAP ポリシー管理者: IAP ポリシーに対する管理者権限を付与します。

    • IAP で保護されたウェブアプリ ユーザー: IAP を使用するアプリや他の HTTPS リソースへのアクセス権を付与します。

    • セキュリティ審査担当者: IAP ポリシーの表示と監査を許可します。

  5. メールアドレスの追加と役割の設定が完了したら、[追加] をクリックします

アクセス権の削除

  1. [Identity-Aware Proxy] ページに移動します。
    [Identity-Aware Proxy] ページに移動
  2. IAP で保護されているリソースを選択します。
  3. 右側の情報パネルで、プリンシパルから削除する役割に対応するセクションを選択します。
  4. 展開されたセクションで、役割を削除するユーザー名またはグループ名の横にある [削除] をクリックします。
  5. 表示される [プリンシパルを削除] ダイアログで、[削除] をクリックします。

API によるアクセス管理

IAM には、Google Cloud リソースでアクセス制御ポリシーを作成、管理するための標準的なメソッドが用意されています。

リソースと権限

IAP API を使用すると、IAP で保護されたプロジェクトの個々のリソースに IAM 権限を適用できます。特定のレベルで付与された IAM 権限は、それより下位にあるすべてのレベルに適用されます。たとえば、プロジェクト レベルで付与された権限は、プロジェクト内のすべての Google Cloud リソースに適用されます。プロジェクトとその上位レベルのアクセス権も IAP 管理ページに表示されますが、これらの権限の管理は IAM 管理ページで行います。

ユーザーには、IAP で保護されたアプリにアクセスするための特定の権限が必要です。これらの権限を付与するには、管理者は API を使用して IAM ポリシーを更新できます。iap.webServiceVersions.accessViaIAP 権限は、アプリへのユーザー アクセスを許可します。IAP を使用して SSH や RDP などの管理サービスへのアクセスを制御している場合、ユーザーに iap.tunnelInstances.accessViaIAP 権限が必要になります。

IAP リソースには独自の getIamPolicy 権限と setIamPolicy 権限があり、これらの権限により、このリソースとその子に対するアクセス ポリシーを管理する権限が付与されます。

IAM API を呼び出すには、リソースの URL パスを含む呼び出しを作成します。App Engine アプリサービス バージョンの IAM ポリシーを取得するには、次のような呼び出しを作成します。

https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web/
appengine-APP_ID/services/SERVICE_ID/versions/VERSION_ID:getIamPolicy

次の表に、サポートされているリソースタイプと IAM API を呼び出すために必要な権限を示します。

リソースの種類 権限
プロジェクト内で IAP によって保護されているすべてのウェブアプリ
これは、IAP 管理ページの [すべてのウェブサービス] チェックボックスと同じです。

パス
https://iap.googleapis.com/v1/projects/PROJECT_NUMBER/iap_web
iap.web.getIamPolicy

iap.web.setIamPolicy
バックエンド サービス
これは、IAP 管理ページの [バックエンド サービス] チェックボックスと同じです。

パス
グローバル スコープ:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute

リージョン スコープ:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
App Engine アプリ
これは、IAP 管理ページの [App Engine アプリ] チェックボックスと同じです。

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID
iap.webTypes.getIamPolicy

iap.webTypes.setIamPolicy
Compute Engine バックエンド サービス
バックエンド サービスのパスには、バックエンド サービス ID またはバックエンド サービス名のいずれかを指定できます。

パス
グローバル スコープ:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute/services/
BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME

リージョン スコープ:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/compute-REGION_NAME/
services/BACKEND_SERVICE_ID or BACKEND_SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
App Engine アプリサービス

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID
iap.webServices.getIamPolicy

iap.webServices.setIamPolicy
App Engine サービスのバージョン
Compute Engine はバージョニングをサポートしていません。

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/appengine-APP_ID/
services/APP_SERVICE_ID/versions/VERSION_ID
iap.webServiceVersions.getIamPolicy

iap.webServiceVersions.setIamPolicy
プロジェクト内で IAP によって保護されているすべての VM インスタンス
これは、IAP 管理ページの [すべてのトンネル リソース] チェックボックスと同じです。

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel
iap.tunnel.getIamPolicy

iap.tunnel.setIamPolicy
1 つ以上の VM インスタンスがあるゾーン
これは、IAP 管理ページのゾーン名のチェックボックスと同じです(たとえば、us-central1-c)。

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
iap.tunnelZones.getIamPolicy

iap.tunnelZones.setIamPolicy
個々の VM インスタンス

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/zones/ZONE_NAME
/instances/INSTANCE_ID or INSTANCE_NAME
iap.tunnelInstances.getIamPolicy

iap.tunnelInstances.setIamPolicy
1 つ以上の宛先グループを持つリージョン(例: us-central1

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
iap.tunnelLocations.getIamPolicy

iap.tunnelLocations.setIamPolicy
個々の宛先グループ

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_tunnel/locations/REGION_NAME
/destGroups/GROUP_NAME
iap.tunnelDestGroups.getIamPolicy

iap.tunnelDestGroups.setIamPolicy

ロール

次の表に、IAP IAM の役割と、各役割に含まれる IAP 固有の権限のリストを示します。IAM のロールの詳細については、ロールと権限の管理をご覧ください。

役割 含まれている権限 説明
IAP で保護されたウェブアプリ ユーザー(roles/iap.httpsResourceAccessor iap.webServiceVersions.accessViaIAP App Engine と Compute Engine のリソースへのアクセスを許可します。
IAP で保護されたトンネル ユーザー(roles/iap.tunnelResourceAccessor iap.tunnelInstances.accessViaIAP
iap.tunnelDestGroups.accessViaIAP
IAP で保護された VM インスタンスへのアクセス権を付与します。
IAP ポリシー管理者(roles/iap.admin iap.web.getIamPolicy
iap.web.setIamPolicy
iap.webTypes.getIamPolicy
iap.webTypes.setIamPolicy
iap.webServices.getIamPolicy
iap.webServices.setIamPolicy
iap.webServiceVersions.getIamPolicy
iap.webServiceVersions.setIamPolicy
iap.tunnel.getIamPolicy
iap.tunnel.setIamPolicy
iap.tunnelZones.getIamPolicy
iap.tunnelZones.setIamPolicy
iap.tunnelInstances.getIamPolicy
iap.tunnelInstances.setIamPolicy
IAP 管理者権限を付与し、リソースの IAP アクセス ポリシーの管理を許可します。

Public access

リソースへのアクセスを全員に許可するには、次のいずれかのプリンシパルにロールを付与します。

  • allAuthenticatedUsers: Google アカウントまたはサービス アカウントで認証されるすべてのユーザー。
  • allUsers: 認証されたユーザーと認証されていないユーザーの両方を含む、インターネット上のユーザー。リクエストの署名済みヘッダーには、sub または emailクレームはありません。

公開アクセスが許可されている場合、IAP はリクエストの Cloud Audit Logs ログを生成しません。

現在、公開アクセスを許可するバインディングに条件を関連付けることはできません。たとえば、リクエストパスが /public/ で始まるという条件で誰でもリソースにアクセスできるようにするポリシーは無効です。