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 管理者、Compute ネットワーク管理者などのロールによって付与されます。 これらのロールは、IAP を有効または無効にできますが、アクセス ポリシーの変更に必要な権限はありません。

また、 Google Cloud コンソールで IAP を有効にするには、clientauthconfig.clients.create、clientauthconfig.clients.update、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 リソースに適用されます。プロジェクト レベルとその上位レベルのリソースのアクセス権は IAM 管理ページで管理されますが、IAP 管理ページに表示されます。

ユーザーが 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
プロジェクト内のすべての転送ルール
プロジェクト内のすべての転送ルールの権限。

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

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

iap.webTypes.setIamPolicy
プロジェクト内のすべての Cloud Run サービスのリージョン
プロジェクト内のリージョンにあるすべての Cloud Run サービスの権限。

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

iap.webTypes.setIamPolicy
Cloud Run サービス
Cloud Run サービスの権限。すべての Cloud Run サービスはリージョン サービスです。

パス
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/cloud_run-REGION_NAME/services/SERVICE_NAME
iap.webServices.getIamPolicy

iap.webServices.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
Compute Engine 転送ルール
転送ルールの権限。転送ルールパスには、転送ルール ID または転送ルール名を指定できます。

パス
グローバル スコープ:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule/services/
FORWARDING_RULE_ID or FORWARDING_RULE_NAME

リージョン スコープ:
https://iap.googleapis.com/v1/projects/
PROJECT_NUMBER/iap_web/forwarding_rule-REGION_NAME/
services/FORWARDING_RULE_ID or FORWARDING_RULE_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 アクセス ポリシーの管理を許可します。

Google Cloud CLI でアクセスを管理する

Google Cloud CLI を使用してアクセスを管理することもできます。

アクセスを拒否する

Identity and Access Management(IAM)拒否ポリシーを使用すると、 Google Cloud リソースへのアクセスにガードレールを設定できます。拒否ポリシーが役立つシナリオの一覧については、ユースケースをご覧ください。

拒否ポリシーを作成し、それらのポリシーにすべての IAP 権限を含めることができます。拒否ポリシーに追加できる IAP 権限のリストについては、拒否ポリシーでサポートされている権限を参照し、iap.googleapis.com を検索してください。拒否ポリシーは任意の IAP 権限に適用できますが、その有効性は拒否ポリシーのアタッチ ポイントに関連付けられています。

一部の IAP 権限は、特定のリソースレベルでのみ有効であり、その子孫では有効ではありません。たとえば、iap.organizations.getSettings は組織レベルで getSettings へのアクセス権を付与しますが、組織の子孫には付与しません。つまり、管理者は、アタッチメント ポイントとその子孫へのアクセスを拒否する拒否ポリシーを作成する際に、関連するすべてのきめ細かい権限を明示的にリストする必要があります。

このようなきめ細かい権限の完全なリストについては、拒否ポリシーでサポートされている権限をご覧ください。FQDN iap.googleapis.com とリソースタイプ iap.organizations、iap.folders、iap.projects、iap.web、iap.webTypes、iap.webServices、iap.webServicesVersions のすべての権限は、きめ細かい権限です。

次の例は、組織とその子孫のプリンシパルに getSettings API へのアクセスを拒否する IAM 拒否ポリシーの例です。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/iap.organizations.getSettings",
          "iap.googleapis.com/iap.folders.getSettings",
          "iap.googleapis.com/iap.projects.getSettings",
          "iap.googleapis.com/iap.web.getSettings",
          "iap.googleapis.com/iap.webTypes.getSettings",
          "iap.googleapis.com/iap.webServices.getSettings",
          "iap.googleapis.com/iap.webServicesVersions.getSettings",
        ],
      }
    }
  ]
}

すべてのきめ細かい権限を指定する代わりに、次の例では、1 つの権限 *.getSettings のみを含む IAM 拒否ポリシーを示します。

{
  "name": "policies/cloudresourcemanager.googleapis.com%2Forganizations%2F253519172624/denypolicies/testpolicyid",
  "uid": "06ccd2eb-d2a5-5dd1-a746-eaf4c6g3f816",
  "kind": "DenyPolicy",
  "displayName": "Only project admins can delete projects.",
  "etag": "MTc1MTkzMjY0MjUyMTExODMxMDQ=",
  "createTime": "2021-09-07T23:15:35.258319Z",
  "updateTime": "2021-09-07T23:15:35.258319Z",
  "rules": [
    {
      "denyRule": {
        "deniedPrincipals": [
          "principalSet://goog/public:all"
        ],
        "deniedPermissions": [
          "iap.googleapis.com/*.getSettings",
        ],
      }
    }
  ]
}

すべてのきめ細かい権限を指定せずに IAM 拒否ポリシーを作成する簡単な方法を次に示します。

管理者の操作 拒否ポリシーの権限
すべての IAP リソースタイプで特定の IAP 権限を拒否する *.updateSettings
*.getSettings
*.setIamPolicy
*.getIamPolicy
特定のリソースタイプですべての IAP 権限を拒否する iap.organizations.*
iap.folders.*
iap.projects.*
iap.web.*
iap.webTypes.*
iap.webServices.*
iap.webServicesVersions.*

公開アクセス

すべてのユーザーにリソースへのアクセス権を付与するには、次のいずれかのプリンシパルにロールを付与します。

  • allAuthenticatedUsers: Google アカウントまたはサービス アカウントで認証されるすべてのユーザー。

  • allUsers: 認証されたユーザーと認証されていないユーザーの両方を含む、インターネット上のユーザー。リクエストの署名付きヘッダーには、sub または email のクレームは含まれません。

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

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