BigQuery の VPC Service Controls

このページでは、VPC Service Controls で境界を作成して BigQuery リソースのセキュリティを強化する方法について説明します。これらの境界は、BigQuery との間のアクセスを制限し、Identity and Access Management(IAM)制御とは独立しています。次のようなユースケースで役立ちます。

  • 上り(内向き)ルールと下り(外向き)ルールで明示的に許可されているリソースを除き、リソースへのアクセスを制限することで、データ漏洩を防止する。
  • サードパーティ ソースまたは Google Cloud サービス(Cloud Storage など)から BigQuery にデータを安全に読み込む。
  • BigQuery から Cloud Storage などのターゲットへのデータ エクスポートを制御する。

詳細については、VPC Service Controls の概要をご覧ください。

始める前に

境界を作成する

次の例では、VPC Service Controls 境界を作成して、BigQuery プロジェクトにアクセスできる外部 IP アドレスの範囲を制限する方法を説明します。

  1. 指定された範囲の IP アドレス(企業ネットワーク内のアドレスなど)へのアクセスのみを許可するアクセスレベルを作成します。これを作成するには、gcloud access-context-manager levels create コマンドを使用します。

    echo """
    - ipSubnetworks:
      - 162.222.181.0/24
      - 2001:db8::/48
    """ > level.yaml
    
    gcloud access-context-manager levels create ACCESS_LEVEL_NAME \
        --title="TITLE" --basic-level-spec=level.yaml
    

    次のように置き換えます。

    • ACCESS_LEVEL_NAME: アクセスレベルの ID
    • TITLE: サービス境界のタイトル(人が読める形式)

    アクセスレベルの作成の詳細については、実装例をご覧ください。

  2. 境界を作成または更新して、BigQuery リソースを保護します。次の例では、プロジェクトを保護します。別のプロジェクトの Cloud Storage バケットからのデータ転送の保護など、その他のユースケースについては、ユースケースをご覧ください。

    境界を作成する

    BigQuery プロジェクトを保護する新しい境界を作成するには、gcloud access-context-manager perimeters create コマンドを使用します。

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: bigquery.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    
    gcloud access-context-manager perimeters create BIGQUERY_PERIMETER --title="TITLE" \
        --resources=BIGQUERY_PROJECT_NUMBER \
        --restricted-services=bigquery.googleapis.com \
        --ingress-policies=ingress.yaml
        --policy=POLICY_NAME
    

    次のように置き換えます。

    • POLICY_NAME: アクセス ポリシーの ID
    • ACCESS_LEVEL_NAME: アクセスレベルの ID
    • PERIMETER: 境界の ID
    • TITLE: サービス境界の短いタイトル(、人が読める形式)
    • BIGQUERY_PROJECT_NUMBER: BigQuery プロジェクトの ID
    • POLICY_NAME: アクセス ポリシーの ID

    境界を更新する

    既存の境界を更新するには、gcloud access-context-manager perimeters update コマンドを使用します。

    gcloud access-context-manager perimeters update BIGQUERY_PERIMETER --set-ingress-policies=ingress.yaml
    

    BIGQUERY_PERIMETER は、BigQuery リソースを保護する境界の ID に置き換えます。

境界をテストする

VPC Service Controls の境界を適用する前にテストします。詳細については、サービス境界のドライラン モードドライラン モードを使用して上り(内向き)ポリシーまたは下り(外向き)ポリシーをテストするをご覧ください。

ユースケース

次のユースケースの例では、VPC Service Controls を使用して BigQuery との間でやり取りされるデータを保護します。

別のプロジェクトの Cloud Storage バケットから外部テーブルデータをクエリする

次の例では、BigQuery プロジェクトと Cloud Storage プロジェクトが境界で分離されている場合に、これらのプロジェクト間の通信を選択的に許可します。

  1. Cloud Storage プロジェクトの周囲の境界の下り(外向き)ルールを更新して、BigQuery プロジェクトが Cloud Storage プロジェクトにアクセスできるようにします。

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - projects/BIGQUERY_PROJECT_NUMBER
    """ > egress.yaml
    
    gcloud access-context-manager perimeters update CLOUD_STORAGE_PERIMETER --policy=POLICY_NAME --set-egress-policies=egress.yaml
    

    次のように置き換えます。

    • BIGQUERY_PROJECT_NUMBER: BigQuery プロジェクトの ID
    • CLOUD_STORAGE_PERIMETER: Cloud Storage リソースを保護する境界の ID
    • POLICY_NAME: アクセス ポリシーの ID
  2. BigQuery プロジェクトの境界の下り(外向き)ルールを更新して、Cloud Storage プロジェクトが BigQuery プロジェクトにアクセスできるようにします。

    echo """
    - egressFrom:
        identityType: ANY_IDENTITY
      egressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - projects/CLOUD_STORAGE_PROJECT_NUMBER
    """ > egress1.yaml
    
    gcloud access-context-manager perimeters update BIGQUERY_PERIMETER --policy=POLICY_NAME --set-egress-policies=egress1.yaml
    

    次のように置き換えます。

    • CLOUD_STORAGE_PROJECT_NUMBER: Cloud Storage プロジェクトの ID
    • PERIMETER: 境界の ID
    • POLICY_NAME: アクセス ポリシーの ID
  3. 省略可: BigQuery プロジェクトを保護する境界に制限付きサービスとして storage.googleapis.com が含まれている場合は、上り(内向き)ルールを更新する必要があります。

    echo """
    - ingressFrom:
        identityType: ANY_IDENTITY
        sources:
        - accessLevel: accessPolicies/POLICY_NAME/accessLevels/ACCESS_LEVEL_NAME
      ingressTo:
        operations:
        - methodSelectors:
          - method: '*'
          serviceName: bigquery.googleapis.com
        - methodSelectors:
          - method: '*'
          serviceName: storage.googleapis.com
        resources:
        - '*'
    
    """ > ingress.yaml
    
    gcloud access-context-manager perimeters create BIGQUERY_PERIMETER --title="TITLE" \
        --resources=BIGQUERY_PROJECT_NUMBER \
        --restricted-services=bigquery.googleapis.com \
        --ingress-policies=ingress.yaml
        --policy=POLICY_NAME
    

BigQuery Omni からデータのインポートとエクスポートを行う

防御強化のため、VPC Service Controls の境界を使用して、BigQuery Omni と外部クラウド サービス間のアクセスを制限できます。詳細と例については、Azure Blob Storage BigLake テーブルを作成する際の VPC Service Controls の構成をご覧ください。

次のステップ