このページでは、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.update、clientauthconfig.clients.getWithSecret 権限が必要になる場合があります。これらの権限は、プロジェクト編集者のロールによって付与されます。
役割の付与の詳細については、アクセス権の付与、変更、取り消しをご覧ください。
Google Cloud コンソールでアクセスを管理する
Google Cloud コンソールで IAP で保護されたリソースへのアクセスを制御するには、アクセス権の追加または削除の手順を行います。
アクセス権を追加
[Identity-Aware Proxy] ページに移動します。
[Identity-Aware Proxy] ページに移動IAP で保護するリソースを選択します。次のリソースを選択すると、リソースのグループが保護されます。
すべてのウェブサービス: プロジェクト内のすべてのリソースが保護されます。これは、IAM 管理ページでプロジェクト レベルのアクセス権を付与する場合と異なります。すべてのウェブサービスのリソースレベルで IAP ポリシー管理者の役割が付与されたユーザーには、IAP ポリシーに対する権限のみが付与されます。
バックエンド サービス: すべてのバックエンド サービスが保護されます。
右側の情報パネルで、リソースに対する Identity and Access Management(IAM)ロールを付与するグループまたは個人のメールアドレスを追加します。
[ロールを選択] プルダウンで次のロールを選択して、アクセス ポリシーのロールをプリンシパルに適用します。
オーナー: IAP ポリシー管理者と同じアクセス権を付与します。代わりに、IAP ポリシー管理者役割を使用してください。この役割はポリシーの変更のみを許可し、アプリへのアクセスは許可しません。
IAP ポリシー管理者: IAP ポリシーに対する管理者権限を付与します。
IAP で保護されたウェブアプリ ユーザー: IAP を使用するアプリや他の HTTPS リソースへのアクセス権を付与します。
セキュリティ審査担当者: IAP ポリシーの表示と監査を許可します。
メールアドレスの追加と役割の設定が完了したら、[追加] をクリックします
アクセス権を削除
- [Identity-Aware Proxy] ページに移動します。
[Identity-Aware Proxy] ページに移動 - IAP で保護されているリソースを選択します。
- 右側の情報パネルで、プリンシパルから削除する役割に対応するセクションを選択します。
- 展開されたセクションで、役割を削除するユーザー名またはグループ名の横にある [削除] をクリックします。
- 表示される [プリンシパルを削除] ダイアログで、[削除] をクリックします。
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.getIamPolicyiap.web.setIamPolicy |
| プロジェクト内のすべてのバックエンド サービス これは、IAP 管理ページの [バックエンド サービス] チェックボックスと同じです。 パス グローバル スコープ: https://iap.googleapis.com/v1/projects/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| プロジェクト内のすべての転送ルール プロジェクト内のすべての転送ルールの権限。 パス グローバル スコープ: https://iap.googleapis.com/v1/projects/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| プロジェクト内のすべての Cloud Run サービスのリージョン プロジェクト内のリージョンにあるすべての Cloud Run サービスの権限。 パス https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| Cloud Run サービス Cloud Run サービスの権限。すべての Cloud Run サービスはリージョン サービスです。 パス https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| App Engine アプリ これは、IAP 管理ページの [App Engine アプリ] チェックボックスと同じです。 パス https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicyiap.webTypes.setIamPolicy |
| Compute Engine バックエンド サービス バックエンド サービス パスには、バックエンド サービス ID またはバックエンド サービス名を指定できます。 パス グローバル スコープ: https://iap.googleapis.com/v1/projects/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| Compute Engine 転送ルール: 転送ルールの 権限。転送ルールのパスには、転送ルールの ID または転送ルールの名前を指定できます。 パス グローバル スコープ: https://iap.googleapis.com/v1/projects/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| App Engine アプリサービス パス https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicyiap.webServices.setIamPolicy |
| An App Engine service version Compute Engine doesn't support versioning. Path https://iap.googleapis.com/v1/projects/ |
iap.webServiceVersions.getIamPolicyiap.webServiceVersions.setIamPolicy |
| プロジェクト内で IAP によって保護されているすべての VM インスタンス これは、IAP 管理ページの [すべてのトンネル リソース] チェックボックスと同じです。 パス https://iap.googleapis.com/v1/projects/ |
iap.tunnel.getIamPolicyiap.tunnel.setIamPolicy |
| 1 つ以上の VM インスタンスを含むゾーン これは、IAP 管理ページのゾーン名のチェックボックスと同じです(たとえば、 us-central1-c)。パス https://iap.googleapis.com/v1/projects/ |
iap.tunnelZones.getIamPolicyiap.tunnelZones.setIamPolicy |
| 個々の VM インスタンス パス https://iap.googleapis.com/v1/projects/ |
iap.tunnelInstances.getIamPolicyiap.tunnelInstances.setIamPolicy |
1 つ以上の宛先グループを持つリージョン(例: us-central1) パス https://iap.googleapis.com/v1/projects/ |
iap.tunnelLocations.getIamPolicyiap.tunnelLocations.setIamPolicy |
| 個々の宛先グループ パス https://iap.googleapis.com/v1/projects/ |
iap.tunnelDestGroups.getIamPolicyiap.tunnelDestGroups.setIamPolicy |
ロール
次の表に、IAP IAM の役割と、各役割に含まれる IAP 固有の権限のリストを示します。IAM のロールの詳細については、ロールと権限の管理をご覧ください。
| 役割 | 含まれている権限 | 説明 |
|---|---|---|
IAP で保護されたウェブアプリ ユーザー(roles/iap.httpsResourceAccessor) |
iap.webServiceVersions.accessViaIAP |
App Engine と Compute Engine のリソースへのアクセスを許可します。 |
IAP で保護されたトンネル ユーザー(roles/iap.tunnelResourceAccessor) |
iap.tunnelInstances.accessViaIAPiap.tunnelDestGroups.accessViaIAP |
IAP で保護された VM インスタンスへのアクセス権を付与します。 |
IAP ポリシー管理者(roles/iap.admin) |
iap.web.getIamPolicyiap.web.setIamPolicyiap.webTypes.getIamPolicyiap.webTypes.setIamPolicyiap.webServices.getIamPolicyiap.webServices.setIamPolicyiap.webServiceVersions.getIamPolicyiap.webServiceVersions.setIamPolicyiap.tunnel.getIamPolicyiap.tunnel.setIamPolicyiap.tunnelZones.getIamPolicyiap.tunnelZones.setIamPolicyiap.tunnelInstances.getIamPolicyiap.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/ で始まるという条件で誰でもリソースにアクセスできるようにするポリシーは無効です。