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

パス
グローバル スコープ:
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
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
An App Engine service version
Compute Engine doesn't support versioning.

Path
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 を使用したアクセスの管理

アクセスを拒否する

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

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

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

このようなきめ細かい権限の一覧については、拒否ポリシーでサポートされている権限をご覧ください。FQDN iap.googleapis.com とリソースタイプ iap.organizationsiap.foldersiap.projectsiap.webiap.webTypesiap.webServicesiap.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/ で始まるという条件で誰でもリソースにアクセスできるようにするポリシーは無効です。