上り(内向き)と下り(外向き)のルール

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、VPC Service Controls の上り(内向き) / 下り(外向き)ルールについて説明します。VPC Service Controls は、上り(内向き)ルールと下り(外向き)ルールを使用して、サービス境界で保護されたリソースとクライアントに関するアクセスを可能にします。

上り(内向き)ルールと 下り(外向き)ルールのブロックは、さまざまな ID とリソースに関するアクセス方向を指定します。上り(内向き) / 下り(外向き)ルールは、以前は 1 つ以上の境界ブリッジを必要としていたユースケースを置き換え、簡素化できます。

上り(内向き)ポリシーと下り(外向き)ポリシーをサービス境界に適用する方法については、上り(内向き)と下り(外向き)のポリシーの構成をご覧ください。

セキュアなデータ交換のユースケースとサンプルのリストについては、上り(内向き) / 下り(外向き)ルールを使用したセキュアなデータ交換をご覧ください。

コンテキストアウェア アクセスのユースケースとサンプルのリストについては、上り(内向き)ルールを使用したコンテキストアウェア アクセスをご覧ください。

上り(内向き) / 下り(外向き)ルールのメリット

  1. 上り(内向き) / 下り(外向き)ルールを使用すると、Google Cloud Service API を使用して、組織内および組織間において限定公開で効率的にデータを交換できます。
  2. 上り(内向き) / 下り(外向き)ルールを使用すると、API リクエストのコンテキストに基づいて、境界内の Google Cloud リソースへのアクセスを許可できます。
    1. ソース ネットワーク、IP アドレス、またはデバイスで使用可能な ID タイプまたは ID を制限します。
    2. ソース ネットワーク、IP アドレス、デバイス、ID タイプに対してアクセスできる Google Cloud APIs とメソッドを制限します。
  3. データ交換の実行に使用される正確なサービス、メソッド、Google Cloud プロジェクト、ID を制限することで、情報流出のリスクを軽減します。
  4. 自分が管理していない外部データセットやイメージに対する読み取り専用アクセス権を付与します。
  5. 権限の低いセグメント内のクライアントから、多くの特権セグメントの Google Cloud リソースにアクセスできないようにする一方で、他の方向へのアクセスを許可します。
  6. 従来は境界ブリッジを 1 つ以上必要としていた構成を簡素化できます。

上り(内向き)と下り(外向き)の定義

  • 上り(内向き): サービス境界の外部からサービス境界内のリソースに対して API クライアントが行うすべてのアクセスを指します。例:

    • サービス境界外の Cloud Storage クライアントが、境界内の Cloud Storage リソースに対する読み取り、書き込み、またはコピー オペレーションを呼び出す。
  • 下り(外向き): サービス境界内の API クライアントまたはリソースがサービス境界外のリソースに対して行うすべてのアクセスを指します。例:

    • サービス境界内の Compute Engine クライアントが、使用するイメージ リソースが境界外にある Compute Engine の create オペレーションを呼び出す。
    • Cloud Storage クライアント(境界内または外部)は、あるバケットが境界内にあり、他方のバケットが外部にある場合に、copy コマンドを呼び出します。

ポリシーモデル

上り(内向き)ルールまたは下り(外向き)ルールは、fromto のブロックで構成されます。その場合:

  • from は API クライアントの属性を参照します。
  • to は、Google Cloud サービスとリソースの属性を参照します。

サービス境界には、複数の上り(内向き)ルールと下り(外向き)ルールを関連付けることができます。Google Cloud サービスの呼び出しは、次のセマンティクスに基づいて許可または拒否されます。

  • 境界外のクライアントから境界内の Google Cloud リソースに対するリクエストは、必要な上り(内向き)ルールの条件が満たされた場合に許可されます。
  • 境界内のクライアントから境界外の Google Cloud リソースへのリクエストは、必要な下り(外向き)ルールの条件が満たされた場合に許可されます。
  • クライアントが上り(内向き)ルールを満たしている場合(クライアントが境界内にない場合)かつ外部リソースが下り(外向き)ルールを満たしている場合、境界内の Google Cloud リソースと境界外の Google Cloud リソースに対する API 呼び出しが許可されます。

上り(内向き)ルールで許可された API リクエストの例

  • 境界内の Cloud Storage バケットからローカルマシンにオブジェクトをダウンロードする境界外の Cloud Storage クライアント(たとえば、gsutil cp コマンドを使用)。
  • 境界内のプロジェクトの BigQuery ジョブを使用して、境界内の BigQuery データセットをクエリする境界外の BigQuery クライアント(たとえば、bq query コマンドを使用)。

下り(外向き)ルールで許可された API リクエストの例

  • 境界外の Cloud Storage バケットと境界内のバケットの間でオブジェクトをコピーする境界内の Cloud Storage クライアント(たとえば、gsutil cp コマンドを使用)。
  • 境界外のプロジェクトの BigQuery ジョブを使用して、境界内の BigQuery データセットをクエリする境界内の BigQuery クライアント(たとえば、bq query コマンドを使用)。

上り(内向き)ルールと下り(外向き)ルールの組み合わせによって許可された API リクエストの例

  • 境界外の Cloud Storage バケットと境界内のバケットの間でオブジェクトをコピーする境界外の Cloud Storage クライアント(たとえば、gsutil cp コマンドを使用)。
  • 境界外のプロジェクトの BigQuery ジョブを使用して、境界内の BigQuery データセットをクエリする境界外の BigQuery クライアント(たとえば、bq query コマンドを使用)。

複数のサービス境界に関わる API リクエスト

アクセスされたリソースと API クライアントが別のサービス境界に属している場合、関連するすべての境界のポリシーによって API リクエストが許可される必要があります。例:

  • 境界 A 内の Cloud Storage クライアントに、境界 A 内の Cloud Storage バケット a と境界 B 内の Cloud Storage バケット b の間でオブジェクトのコピーを許可するには、次の上り(内向き)と下り(外向き)のルールが必要になります。

    • Cloud Storage バケット b へのアクセスを許可する境界 A 内の下り(外向き)ルール
    • Cloud Storage バケット a へのアクセスを許可する境界 B 内の下り(外向き)ルール
    • 境界 B 外の Cloud Storage クライアントへのアクセスを許可する境界 B の上り(内向き)ルール。

上り(内向き)ルールのリファレンス

上り(内向き)ルールは、Google Cloud コンソール、JSON ファイル、または YAML ファイルを使用して構成できます。次のサンプルでは、.yaml 形式を使用します。

- ingressFrom:
    identityType: ANY_IDENTITY
    *OR*
    identities:
    - serviceAccount:service-account
    sources:
    - resource: projects/project
      *OR*
    - accessLevel: access-level
  ingressTo:
    operations:
    - serviceName: service
      methodSelectors:
      - method: method
      *OR*
      - permission: permission
    resources:
    - projects/project
  • - ingressFrom: - (必須)境界外の許可ソースと ID を一覧表示する from ブロックを開始します。

  • identityType: - (この属性または identities 属性を使用する必要があります)指定された sources(ネットワーク送信元)から使用できる ID のタイプを定義します。有効な値: ANY_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY は、すべての ID を許可します。ANY_USER_ACCOUNT は、すべてのユーザー(人)を許可します。ANY_SERVICE_ACCOUNT は、すべてのサービス アカウントを許可します。

  • identities: - (この属性または identityType 属性を使用する必要があります)境界のリソースにアクセスできるサービス アカウントのリストを開始します。

  • serviceAccount - 境界内のリソースへのアクセスが許可されているサービス アカウント。

  • sources: - (必須)ネットワーク送信元のリストを指定します。リスト内の各値は、アクセスレベルまたは Google Cloud プロジェクトです。accessLevel 属性を \"*\" に設定すると、上り(内向き)ポリシーはすべてのネットワーク送信元からのアクセスを許可します。

  • - resource: - (この属性または accessLevel 属性を使用する必要があります)境界外部からアクセス可能なプロジェクトを指定します。

  • - accessLevel: - (この属性または resource 属性を使用する必要があります)境界外部からアクセス可能なアクセスレベルを指定します。accessLevel 属性を \"*\" に設定すると、上り(内向き)ポリシーはすべてのネットワーク送信元からのアクセスを許可します。

  • ingressTo: - (必須)境界内の指定の Google Cloud リソースで使用可能なサービス オペレーションを一覧表示する to ブロックを開始します。

  • operations: - (必須)from ブロック条件を満たすクライアントがアクセスを許可され、アクセスが可能なサービスとアクション / メソッドのリストの開始を指定します。

  • - serviceName: - (必須)このフィールドには有効なサービス名を指定することも、\"*\" に設定して、すべてのサービスへのアクセスを許可することもできます。たとえば、bigquery.googleapis.com は有効な serviceName です。使用可能なサービスのリストについては、サポート対象プロダクトをご覧ください。

  • methodSelectors: - (必須)from ブロック条件を満たすクライアントがアクセスを許可されるメソッドのリストの開始。制限付きのメソッドとサービスの権限については、サポートされているサービス メソッドの制限をご覧ください。

  • - method: - (この属性または permission 属性を使用する必要があります)このフィールドは、有効なサービス メソッドにすることも、\"*\" に設定して、すべての指定されたサービス メソッドへのアクセスを許可することもできます。

  • - permission: - (この属性または method 属性を使用する必要があります)このフィールドは、有効なサービス権限にする必要があります。この権限が必要なオペレーションで境界内のリソースにアクセスできます。

  • resources: - (必須)この属性は、境界外のクライアントからアクセス可能で、サービス境界内に存在する Google Cloud リソースのリストを指定します。このフィールドを \"*\" に設定すると、境界内の任意の Google Cloud リソースへの上り(内向き)アクセスが許可されます。

正常に機能する上り(内向き)ルールを作成するには、次の属性を指定する必要があります。

  • sources 属性。accessLevel または resource(Google Cloud プロジェクト)を指定するか、accessLevel 属性を \"*\" に設定する必要があります。
  • identityType または identities 属性
  • resources 属性
  • serviceName 属性

上り(内向き)ポリシー ファイルの構成が完了したら、上り(内向き)ポリシー ファイルをサービス境界に適用する方法について上り(内向き)ポリシーと下り(外向き)ポリシーの更新をご覧ください。

下り(外向き)ルールのリファレンス

下り(外向き)ルールは、Google Cloud コンソール、JSON ファイル、または YAML ファイルを使用して構成できます。次のサンプルでは、.yaml 形式を使用します。

- egressTo:
    operations:
    - serviceName: service-name
      methodSelectors:
      - method: method
      *OR*
      - permission: permission
    resources:
    - projects/project
    *OR*
    externalResources:
    - external-resource-path
  egressFrom:
    identityType: ANY_IDENTITY
    *OR*
    identities:
    - serviceAccount:service-account
  • - egressTo: - (必須)境界外の指定されたプロジェクトの Google Cloud リソースで許可されたサービス オペレーションを一覧表示する to ブロックを開始します。

  • operations: - (必須)from ブロック条件を満たすクライアントがアクセスを許可され、アクセスが可能なサービスとアクション / メソッドのリストの開始を指定します。

  • - serviceName: - (必須)このフィールドには有効なサービス名を指定することも、\"*\" に設定して、すべてのサービスへのアクセスを許可することもできます。使用可能なサービスのリストについては、サポート対象プロダクトをご覧ください。

  • methodSelectors: - (必須)from ブロック条件を満たすクライアントがアクセスを許可されるメソッドのリストの開始。制限付きのメソッドとサービスの権限については、サポートされているサービス メソッドの制限をご覧ください。

  • - method: - (この属性または permission 属性を使用する必要があります)このフィールドは、有効なサービス メソッドにすることも、\"*\" に設定して、すべての指定されたサービス メソッドへのアクセスを許可することもできます。

  • - permission: - (この属性または method 属性を使用する必要があります)このフィールドには有効なサービス権限が必要です。この権限を必要とするオペレーションで、境界外にある指定のリソースにアクセスできます。

  • resources: - (この属性または externalResources 属性を使用する必要があります)境界内のクライアントがアクセス可能で、プロジェクトで指定されている Google Cloud リソースのリストです。このフィールドを \"*\" に設定すると、すべての Google Cloud リソースへの下り(外向き)アクセスが許可されます。

  • externalResources: - (この属性または resources 属性を使用する必要があります)この属性は、境界内のクライアントがアクセスできる外部リソースのリストです。この属性では、AWS または Azure リソースのみがサポートされます。Amazon S3 の場合、サポートされる形式は s3://BUCKET_NAME です。Azure Storage の場合、サポートされる形式は azure://myaccount.blob.core.windows.net/CONTAINER_NAME です。

  • egressFrom: - (必須)境界内の指定プロジェクトの Google Cloud リソースで許可されたサービス オペレーションを一覧表示する from ブロックを開始します。

  • identityType: - (この属性または identities 属性を使用する必要があります)この属性は、境界外の指定リソースにアクセスするために使用できる ID の種類を定義します。有効な値: ANY_IDENTITYANY_USER_ACCOUNTANY_SERVICE_ACCOUNTANY_IDENTITY は、すべての ID を許可します。ANY_USER_ACCOUNT は、すべてのユーザー(人)を許可します。ANY_SERVICE_ACCOUNT は、すべてのサービス アカウントを許可します。

  • identities: - (この属性または identityType 属性を使用しなければなりません)この属性は、境界外の指定リソースにアクセスできるサービス アカウントのリストを開始します。

  • serviceAccount - 境界外の指定リソースにアクセスできるサービス アカウント。

下り(外向き)ポリシー ファイルの構成が完了したら、下り(外向き)ポリシー ファイルをサービス ポリシーに適用する方法について上り(内向き)ポリシーと下り(外向き)ポリシーの更新をご覧ください。

ドライラン モードを使用した上り(内向き) / 下り(外向き)ポリシーのテスト

サービスのすべてのメソッドへのアクセスを許可したくないときに、アクセスを許可するメソッドの正確なリストを特定することが難しい場合があります。これは、サービスの特定のメソッドが、Google Cloud の別のサービスで異なるメソッドを呼び出す可能性があるためです。たとえば、BigQuery が Cloud Storage バケットからテーブルを読み込み、クエリを実行する場合です。

許可する適切なメソッドを確認するには、VPC Service Controls のドライラン モードを使用できます。これを行うには、まず、上り(内向き)または下り(外向き)ポリシーのないドライラン モードで境界を有効にし、監査ログから呼び出されるメソッドのリストを収集します。次に、これらのメソッドを、すべての違反が停止するまでの間、ドライランの上り(内向き) / 下り(外向き)ポリシーに段階的に追加していきます。その時点で、構成をドライラン モードから自動適用モードに移行できます。

サポートされていない機能

現在、上り(内向き) / 下り(外向き)ルールについては、以下の機能はサポートされていません。

  1. プロジェクトではなくラベルで Google Cloud リソースを特定する。
  2. 上り(内向き) / 下り(外向き)from ルールの identities フィールドでグループを指定する。
  3. すべてのサービスがメソッドごとの上り(内向き) / 下り(外向き)ルールをサポートしているわけではありません。サポートされているサービス メソッドの制限をご覧ください。
  4. ANY_SERVICE_ACCOUNTANY_USER_ACCOUNT の ID の種類を使用して、次の操作を行うことはできません。

制限事項

上り(内向き)と下り(外向き)の上限については、割り当てと上限をご覧ください。