このページでは、上り(内向き)ルールと下り(外向き)ルールで Identity and Access Management(IAM)ロールを使用して、サービス境界で保護されたリソースへのアクセスを許可する方法について説明します。
VPC Service Controls は、上り(内向き)ルールと下り(外向き)ルールを使用して、サービス境界で保護されたリソースとクライアントに関するアクセスを可能にします。必要に応じて、IAM ロールを使用して上り(内向き)ルールと下り(外向き)ルールを制限できます。ルールで IAM ロールを指定すると、IAM ロールの一部である権限に関連付けられたアクションのみがルールで許可されます。
始める前に
上り(内向き)ルールと下り(外向き)ルールについて確認する。
上り(内向き)ルールで IAM ロールを構成する
Console
Google Cloud コンソールを使用してサービス境界の上り(内向き)ポリシーを更新する場合、または境界の作成時に上り(内向き)ポリシーを設定する場合は、IAM ロールを使用するように上り(内向き)ルールを構成できます。
コンソールで境界を作成するとき、または境界を編集するときに、[上り(内向き)ポリシー] を選択します。 Google Cloud
[上り(内向き)ルール] ペインで、既存の上り(内向き)ルールを選択するか、[上り(内向き)ルールを追加] をクリックします。
上り(内向き)ポリシーの [宛先] セクションで、[オペレーションまたは IAM ロール] リストから [IAM ロールの選択(プレビュー)] を選択します。
[IAM ロールを追加] をクリックします。
[IAM ロールを追加] ペインで、許可する IAM ロールを選択します。
サポートされているサービスとロールについては、サポートされているプロダクトをご覧ください。
[選択した IAM ロールを追加] をクリックします。
[完了] をクリックします。
他の上り(内向き)ルール属性については、上り(内向き)ルールのリファレンスをご覧ください。
gcloud
JSON ファイルまたは YAML ファイルを使用して、IAM ロールを使用する上り(内向き)ルールを構成できます。次のサンプルでは、YAML 形式を使用します。
- ingressFrom:
identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
*OR*
identities:
- PRINCIPAL_IDENTIFIER
sources:
- resource: RESOURCE
*OR*
- accessLevel: ACCESS_LEVEL
ingressTo:
operations:
- serviceName: SERVICE_NAME
methodSelectors:
- method: METHOD_NAME
*OR*
roles:
- ROLE_NAME
resources:
- projects/PROJECT_NUMBER
ROLE_NAME
は、ルールで指定されたサービスのアクセス範囲を定義する IAM ロールに置き換えます。サービスへのアクセスに必要なすべての権限を含む単一のロールまたはロールの組み合わせを指定します。ロールを指定するには、ロール コンポーネントで説明されているロール名の形式を使用します(projects/PROJECT_ID/roles/IDENTIFIER
形式を除く)。
サポートされているサービスとロールについては、サポートされているプロダクトをご覧ください。
他の上り(内向き)ルール属性については、上り(内向き)ルールのリファレンスをご覧ください。
既存の上り(内向き)ルールを更新して IAM ロールを構成した後、サービス境界のルールポリシーを更新する必要があります。
gcloud access-context-manager perimeters update PERIMETER_ID --set-ingress-policies=RULE_POLICY.yaml
次のように置き換えます。
PERIMETER_ID
: 更新するサービス境界の ID。RULE_POLICY
: 変更された上り(内向き)ルールファイルのパス。
詳細については、サービス境界の上り(内向き)ポリシーと下り(外向き)ポリシーの更新をご覧ください。
下り(外向き)ルールで IAM ロールを構成する
Console
Google Cloud コンソールを使用してサービス境界の下り(外向き)ポリシーを更新する場合、または境界の作成時に下り(外向き)ポリシーを設定する場合は、IAM ロールを使用するように下り(外向き)ルールを構成できます。
コンソールで境界を作成するとき、または境界を編集するときに、[下り(外向き)ポリシー] を選択します。 Google Cloud
[下り(外向き)ルール] ペインで、既存の下り(外向き)ルールを選択するか、[下り(外向き)ルールを追加] をクリックします。
下り(外向き)ポリシーの [宛先] セクションで、[オペレーションまたは IAM ロール] リストから [IAM ロールを選択(プレビュー)] を選択します。
[IAM ロールを追加] をクリックします。
[IAM ロールを追加] ペインで、許可する IAM ロールを選択します。
サポートされているサービスとロールについては、サポートされているプロダクトをご覧ください。
[選択した IAM ロールを追加] をクリックします。
[完了] をクリックします。
他の下り(外向き)ルール属性については、下り(外向き)ルールのリファレンスをご覧ください。
gcloud
JSON ファイルまたは YAML ファイルを使用して、IAM ロールを使用する下り(外向き)ルールを構成できます。次のサンプルでは、YAML 形式を使用します。
- egressTo:
operations:
- serviceName: SERVICE_NAME
methodSelectors:
- method: METHOD_NAME
*OR*
roles:
- ROLE_NAME
resources:
- projects/PROJECT_NUMBER
egressFrom:
identityType: ANY_IDENTITY | ANY_USER_ACCOUNT | ANY_SERVICE_ACCOUNT
*OR*
identities:
- PRINCIPAL_IDENTIFIER
sources:
- resource: RESOURCE
*OR*
- accessLevel: ACCESS_LEVEL
sourceRestriction: RESTRICTION_STATUS
ROLE_NAME
は、ルールで指定されたサービスのアクセス範囲を定義する IAM ロールに置き換えます。サービスへのアクセスに必要なすべての権限を含む単一のロールまたはロールの組み合わせを指定します。ロールを指定するには、ロール コンポーネントで説明されているロール名の形式を使用します(projects/PROJECT_ID/roles/IDENTIFIER
形式を除く)。
サポートされているサービスとロールについては、サポートされているプロダクトをご覧ください。
他の下り(外向き)ルール属性については、下り(外向き)ルールのリファレンスをご覧ください。
既存の下り(外向き)ルールを更新して IAM ロールを構成した後、サービス境界のルールポリシーを更新する必要があります。
gcloud access-context-manager perimeters update PERIMETER_ID --set-egress-policies=RULE_POLICY.yaml
次のように置き換えます。
PERIMETER_ID
: 更新するサービス境界の ID。RULE_POLICY
: 変更された下り(外向き)ルールファイルのパス。
詳細については、サービス境界の上り(内向き)ポリシーと下り(外向き)ポリシーの更新をご覧ください。
サポート対象プロダクト
上り(内向き)ルールと下り(外向き)ルールで、次の Google Cloud サービスの IAM ロールを使用できます。
プロダクト | 制限事項 |
---|---|
Artifact Registryartifactregistry.googleapis.com |
|
BigQuerybigquery.googleapis.com |
|
BigQuery Data Transfer Servicebigquerydatatransfer.googleapis.com |
|
Bigtablebigtable.googleapis.com |
|
Binary Authorizationbinaryauthorization.googleapis.com |
|
Cloud Composercomposer.googleapis.com |
|
Cloud Key Management Servicecloudkms.googleapis.com |
|
Cloud Logginglogging.googleapis.com |
|
Cloud Monitoringmonitoring.googleapis.com |
|
Cloud Runrun.googleapis.com |
|
Cloud Run functionscloudfunctions.googleapis.com |
|
Cloud SQLsqladmin.googleapis.com |
|
Cloud Storagestorage.googleapis.com |
|
Compute Enginecompute.googleapis.com |
|
Dataflowdataflow.googleapis.com |
|
Dataprocdataproc.googleapis.com |
|
Google Kubernetes Enginecontainer.googleapis.com |
|
Identity and Access Managementiam.googleapis.com |
|
Pub/Subpubsub.googleapis.com |
|
Resource Managercloudresourcemanager.googleapis.com |
|
Secret Managersecretmanager.googleapis.com |
|
Spannerspanner.googleapis.com |
|
上り(内向き)ルールと下り(外向き)ルールで使用できるこれらのサービスの事前定義 IAM ロールの一覧については、事前定義ロールをご覧ください。
ただし、これらのサービスには、上り(内向き)ルールと下り(外向き)ルールで使用できる IAM ロールがいくつかありますが、基盤となる権限の一部またはすべてがサポートされていないため、部分的にサポートされているか、サポートされていません。
上り(内向き)ルールまたは下り(外向き)ルールで部分的にサポートされている IAM ロールを使用すると、サポートされていない基盤となる権限に固有のリクエストまたはアクションに対してルールが機能しなくなります。
部分的にサポートされているロールと、関連するサポートされていない権限の一覧については、部分的にサポートされている IAM ロールをご覧ください。
上り(内向き)ルールまたは下り(外向き)ルールでサポートされていない IAM ロールを使用すると、ルールが無効になります。
サポートされていないロールの一覧については、サポートされていない IAM ロールをご覧ください。
上り(内向き)ルールと下り(外向き)ルールでカスタムロールを使用する場合は、カスタムロールに、サポートされているサービスの一部であるサポートされている権限のみが含まれていることを確認してください。サポートされているサービスのサポートされていない権限の一覧については、部分的にサポートされている IAM ロールとサポートされていない IAM ロールをご覧ください。
プロジェクト レベルで作成したカスタムロールは使用できません。つまり、projects/PROJECT_ID/roles/IDENTIFIER
の形式のカスタムロールは使用できません。
一部サポートされている IAM ロール
次の表に、特定のサービスで部分的にサポートされている IAM ロールを示します。
プロダクト | 一部サポートされているロール | サポートされていない権限 |
---|---|---|
Cloud SQL |
|
|
|
|
|
Cloud Storage |
|
|
Identity and Access Management |
|
|
Resource Manager |
|
|
|
|
|
|
|
|
Spanner |
|
|
一部サポートされているその他のロール |
|
|
サポートされていない IAM ロール
次の表に、特定のサービスでサポートされていない IAM ロールを示します。
プロダクト | サポートされていないロール |
---|---|
Identity and Access Management |
|
制限事項
ロールベースの上り(内向き)または下り(外向き)ルールを使用して、境界境界を越えてプロジェクトの IAM 許可ポリシーを設定するリクエストを許可することはできません。
VPC Service Controls の制限により、Google Cloud コンソールでサービスの編集ページを読み込む際に問題が発生した場合、上り(内向き)ルールで IAM ロールを使用しても問題が解決しないことがあります。この制限は、これらのサービスの閲覧専用ページには影響しません。
リクエストに異なるプロジェクトの複数のリソースタイプが含まれる場合、IAM ロールを使用する上り(内向き)ルールまたは下り(外向き)ルールが機能しないことがあります。たとえば、別のプロジェクトの Cloud Storage からテキストを読み取る Dataflow テンプレートを起動するときなどです。
境界の上りまたは下りルールでロールを参照した後にカスタムロールを削除すると、境界は編集できなくなります。