このページでは、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 コンソールで制御するには、アクセス権の追加または削除の手順に従います。
アクセス権を追加する
[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 リソースに適用されます。プロジェクトとその上位レベルのアクセス権も 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/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicy iap.webTypes.setIamPolicy |
プロジェクト内のすべての転送ルール プロジェクト内のすべての転送ルールに対する権限。 パス グローバル スコープ: https://iap.googleapis.com/v1/projects/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicy iap.webTypes.setIamPolicy |
App Engine アプリ これは、IAP 管理ページの [App Engine アプリ] チェックボックスと同じです。 パス https://iap.googleapis.com/v1/projects/ |
iap.webTypes.getIamPolicy iap.webTypes.setIamPolicy |
Compute Engine バックエンド サービス バックエンド サービスのパスには、バックエンド サービス ID またはバックエンド サービス名のいずれかを指定できます。 パス グローバル スコープ: https://iap.googleapis.com/v1/projects/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicy iap.webServices.setIamPolicy |
Compute Engine 転送ルール 転送ルールの権限。転送ルールのパスには、転送ルール ID または転送ルール名を指定できます。 パス グローバル スコープ: https://iap.googleapis.com/v1/projects/ リージョン スコープ: https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicy iap.webServices.setIamPolicy |
App Engine アプリサービス パス https://iap.googleapis.com/v1/projects/ |
iap.webServices.getIamPolicy iap.webServices.setIamPolicy |
An App Engine service version Compute Engine doesn't support versioning. Path https://iap.googleapis.com/v1/projects/ |
iap.webServiceVersions.getIamPolicy iap.webServiceVersions.setIamPolicy |
プロジェクト内で IAP によって保護されているすべての VM インスタンス これは、IAP 管理ページの [すべてのトンネル リソース] チェックボックスと同じです。 パス https://iap.googleapis.com/v1/projects/ |
iap.tunnel.getIamPolicy iap.tunnel.setIamPolicy |
1 つ以上の VM インスタンスがあるゾーン これは、IAP 管理ページのゾーン名チェックボックスと同じです(例: us-central1-c )。パス https://iap.googleapis.com/v1/projects/ |
iap.tunnelZones.getIamPolicy iap.tunnelZones.setIamPolicy |
個々の VM インスタンス パス https://iap.googleapis.com/v1/projects/ |
iap.tunnelInstances.getIamPolicy iap.tunnelInstances.setIamPolicy |
1 つ以上の宛先グループを持つリージョン(例: us-central1 ) パス https://iap.googleapis.com/v1/projects/ |
iap.tunnelLocations.getIamPolicy iap.tunnelLocations.setIamPolicy |
個々の宛先グループ パス https://iap.googleapis.com/v1/projects/ |
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.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/
で始まるという条件で誰でもリソースにアクセスできるようにするポリシーは無効です。