VPC Service Controlsの組織レベルのアクセスポリシーとスコープ付きアクセスポリシーを検証してみた

VPC Service Controlsの組織レベルのアクセスポリシーとスコープ付きアクセスポリシーを検証してみた

Google CloudのVPC Service Controlsを使用してCloud StorageへのAPIアクセスを制限する方法を組織レベルのアクセスポリシーとスコープ付きアクセスポリシーの2パターンで検証してみました。
2026.08.07

はじめに

こんにちは。
クラウド事業本部コンサルティング部の渡邉です。

Cloud Storage にアップロードした機密データやBigQueryに格納されたデータを意図せず外部に持ち出されてしまうようなリスクに対処できるサービスがVPC Service Controlsです。
VPC Service Controlsは「サービスペリメーター」と呼ばれるセキュリティ境界を設定することで、Google Cloud の API へのアクセスをプロジェクト単位で囲い込み、境界の外からのデータアクセスをブロックできます。

Google Cloud のサービスは、すべて API を通じて操作されます。gcloud コマンドやクライアントライブラリ、Google Cloud コンソールも裏側では API を呼び出しています。VPC Service Controls はこの API レベルでアクセスを制御します。

本記事では、VPC Service Controls を使って Cloud Storage への API アクセスを制限する方法を、組織レベルのアクセスポリシースコープ付きアクセスポリシーの 2 パターンで実際に試してみます。

VPC Service Controls とは

VPC Service Controls は、Google Cloud のマネージドサービスに対するセキュリティ境界(サービスペリメーター)を定義し、データの流出リスクを軽減するための機能です。

IAM が「誰が何をできるか」を制御するのに対し、VPC Service Controls は「どこからアクセスできるか」を制御する仕組みです。IAM で適切な権限を付与していても、認証情報が漏洩した場合などにはデータが持ち出されるリスクがあります。VPC Service Controls はそのような場合に備える追加の防御層として機能します。

Access Context Manager とは

VPC Service Controls の設定を進める前に、その基盤となる Access Context Manager について理解しておきましょう。

Access Context Manager は、Google Cloud リソースへのアクセスをリクエストの属性(コンテキスト)に基づいて制御するためのサービスです。VPC Service Controls は、この Access Context Manager と組み合わせて利用されます。
今回利用するVPC Service Controls以外でも、Identity-Aware Proxyや、条件付きIAMでも利用されます。

アクセスポリシー

アクセスポリシーは、アクセスレベルやサービスペリメーターをまとめるトップレベルのコンテナです。アクセスポリシーには 組織レベルのアクセスポリシースコープ付きアクセスポリシー の 2 種類があります。

組織レベルのアクセスポリシー スコープ付きアクセスポリシー
適用範囲 組織全体 特定のフォルダまたはプロジェクト
作成数 組織に 1 つのみ 最大 50 個
管理者 組織レベルの管理者 委任された管理者(プリンシパルで指定)
用途 組織全体のペリメーター管理 部門やプロジェクト単位でのペリメーター管理の委任
前提条件 なし 組織レベルのアクセスポリシーが存在すること

アクセスレベル

アクセスレベルは、リクエストの属性に基づいてアクセスを許可するかどうかを判定するルールです。サービスペリメーターと組み合わせることで、「特定の条件を満たすリクエストだけペリメーター外からのアクセスを許可する」といった制御が可能になります。

アクセスレベルで条件として指定できる主な属性は以下のとおりです。

属性 説明
IP サブネットワーク リクエスト元の IP アドレス範囲 xxx.xxx.xxx.xxx/24(社内ネットワーク)
デバイスの種類・OS リクエスト元デバイスの属性 「Chrome OS かつ画面ロック有効」
ユーザー ID リクエストを送信したユーザーやグループ 特定の Google グループのメンバー
リージョン リクエスト元の地理的な場所 日本(JP)からのアクセスのみ

例えば、「社内ネットワーク(xxx.xxx.xxx.xxx/24)からのアクセスのみ許可する」アクセスレベルを作成し、サービスペリメーターに紐付けると、社内からの API 呼び出しだけがペリメーター内のリソースにアクセスできるようになります。

サービスペリメーターの仕組み

サービスペリメーターは、指定した Google Cloud プロジェクトとサービスの周囲にセキュリティ境界を作成します。ペリメーター内のリソース同士は自由に通信できますが、ペリメーター境界を越えた通信はデフォルトでブロックされます。

以下の図で、ペリメーターがどのように機能するかを見てみましょう。

例えば、Cloud Storage がペリメーターで保護されている場合、以下のような制御が行われます。

シナリオ 結果
ペリメーター内の VM からペリメーター内のバケットにアクセス ✅ 許可
ペリメーター外の VM からペリメーター内のバケットにアクセス ❌ 拒否(Ingress ルールで許可可能)
ペリメーター内の VM からペリメーター外のバケットにアクセス ❌ 拒否(Egress ルールで許可可能)
ペリメーター内のバケット間でのコピー操作 ✅ 許可
ペリメーター内外のバケット間でのコピー操作 ❌ 拒否

Enforced モードと Dry-run モード

サービスペリメーターには Enforced モードDry-run モードの 2 つのモードがあります。

モード 説明
Enforced モード ペリメーターポリシーに違反するリクエストを拒否する(デフォルト)
Dry-run モード 違反リクエストを拒否せずログに記録する。ペリメーター設定のテストやサービス利用状況の監視に利用

Ingress / Egress ルール

サービスペリメーターはデフォルトで境界越えの通信をすべてブロックしますが、Ingress ルールEgress ルールを使うことで、特定の条件を満たすアクセスだけを選択的に許可することができます。業務上必要なアクセスはこちらの機能を利用して通信を明示的に許可していきます。

それぞれのルールは「誰が(From)」「何に対して(To)」という 2 つのブロックで構成されています。

ルール From ブロック(誰が / どこから) To ブロック(何に対して)
Ingress ルール ID タイプ・アクセス元ソース 許可する API サービス・リソース
Egress ルール ID タイプ・アクセス元ソース 許可する API サービス・外部リソース

押さえておきたい用語

ここまでの内容を踏まえて、主要な用語を整理します。

用語 説明
Access Context Manager リクエストの属性(IP アドレス、デバイス情報など)に基づいてアクセスレベルを定義・評価するサービス。アクセスポリシーやアクセスレベルの管理を担い、VPC Service Controls や IAP などのサービスがポリシーの適用(エンフォースメント)を行う
サービスペリメーター Google マネージドサービスの周囲に作るセキュリティ境界。「囲い」のようなイメージで、境界の内外でアクセスを制御する
アクセスポリシー サービスペリメーターやアクセスレベルを束ねるコンテナ。組織レベルのアクセスポリシー(組織に 1 つ)と、特定のフォルダやプロジェクトに適用範囲を絞ったスコープ付きアクセスポリシー(最大 50 個)がある
アクセスレベル IP アドレス範囲やデバイスの属性など、リクエストの条件を定義したルール。ペリメーター外からのアクセスを条件付きで許可する際に使う
Ingress ルール ペリメーターの外から中へのアクセスを許可するルール
Egress ルール ペリメーターの中から外へのアクセスを許可するルール
制限付きサービス ペリメーターで保護対象として指定した Google Cloud API サービス(例: storage.googleapis.com
Enforced モード ペリメーター違反のリクエストを実際にブロックするモード
Dry-run モード ペリメーター違反をブロックせずログに記録するモード。テスト用

Cloud Storage と VPC Service Controls

ここまでは VPC Service Controls の仕組みを全般的に説明しました。ここからは、本記事のテーマである Cloud Storage に焦点を当てて、ペリメーターで保護する際のポイントを確認します。

Cloud Storagestorage.googleapis.com)は VPC Service Controls で GA(一般提供) サポートされており、ペリメーターで保護できます。

以下の図は、Cloud Storage をペリメーターで保護した場合の全体イメージです。

Cloud Storage を VPC Service Controls で利用する際の注意点として、ペリメーターで Cloud Storage API が保護されている場合、Google Cloud コンソールの Cloud Storage ページにアクセスできなくなる場合があります。アクセスを許可するには、Ingress ルールやアクセスレベルの設定が必要です。

実際に試してみる

VPC Service Controls でサービスペリメーターを作成し、Cloud Storage への API アクセスが制限されることを確認します。本記事では、組織レベルのアクセスポリシースコープ付きアクセスポリシーの 2 パターンで検証を行います。

今回のハンズオンで構築する構成

以下の構成を作成し、ペリメーター外からの Cloud Storage API アクセスがブロックされることを確認した後、アクセスレベル(IP 制限)と Ingress ルール(ユーザー指定)を組み合わせて、特定の条件を満たすアクセスのみを許可するまでを検証の範囲とします。

前提条件

  • Google Cloud の組織が利用可能であること(VPC Service Controls は組織レベルの機能のため)
  • Google Cloud コンソールにアクセスできること
  • 以下の IAM ロールが付与されていること
    • Access Context Manager 編集者roles/accesscontextmanager.policyEditor):アクセスポリシー・ペリメーターの作成
    • Resource Manager 組織閲覧者roles/resourcemanager.organizationViewer):コンソールから VPC Service Controls を操作するために必要
    • ストレージ管理者roles/storage.admin):Cloud Storage バケットの操作

パターン 1: 組織レベルのアクセスポリシーで検証

組織レベルのアクセスポリシーは、組織全体に適用されるポリシーです。組織に 1 つだけ存在し、組織内のすべてのプロジェクトをペリメーターに追加できます。Access Context Manager ページで組織を選択して作成するアクセスレベルは、この組織レベルポリシーに紐付きます。

ステップ 1-1: アクセスポリシーの確認

  1. Google Cloud コンソールのナビゲーションメニューから [セキュリティ] > [VPC Service Controls] をクリックします
  2. プロジェクトセレクタで組織を選択します
  3. 組織レベルのアクセスポリシーが存在する場合は、VPC Service Controls のページが表示されます

ステップ 1-2: アクセスレベルの作成

Ingress ルールで「どこからのアクセスを許可するか」を制御するためのアクセスレベルを作成します。

  1. Google Cloud コンソールで [Access Context Manager] ページを開きます
  2. プロジェクトセレクタで組織を選択します
  3. ページ上部の [新規] をクリックします
  4. [新しいアクセスレベル] パネルで以下を設定します
    • アクセスレベルのタイトル: office-ip
  5. [条件] セクションで [属性を追加] をクリックし、[IP サブネットワーク] を選択します
  6. [パブリック IP] を選択し、自分の IP アドレスを CIDR 形式で入力します(例: xxx.xxx.xxx.xxx/32
  7. [保存] をクリックします

alt text

ステップ 1-3: サービスペリメーターの作成

  1. [セキュリティ] > [VPC Service Controls] をクリックします
  2. プロジェクトセレクタで組織を選択し、組織レベルのアクセスポリシーが選択されていることを確認します

alt text

  1. [新しい境界] をクリックします
  2. 以下を設定します
    • タイトル: storage_perimeter
    • 説明: Cloud Storageへのアクセスを制限
    • ペリメーターのタイプ: 「標準(デフォルト)」のまま
    • 適用モード: 「適用済み」のまま
  1. [続行] をクリックします

alt text

  1. [プロジェクトの追加] をクリックし、保護対象のプロジェクトを選択して [選択したプロジェクトを追加] をクリックします
  2. [続行] をクリックします

alt text

  1. [制限付きサービス] セクションで [サービスの追加] をクリックします
  2. フィルタに「Cloud Storage」と入力し、[Cloud Storage API]storage.googleapis.com)にチェックを入れます
  3. [選択したサービスを追加] をクリックします

alt text

  1. [ペリメーターを作成] をクリックします

alt text

ステップ 1-4: ペリメーター外からのアクセス確認

ペリメーターが有効になった後、コンソールから Cloud Storage バケットにアクセスしてみます。

  1. Google Cloud コンソールで [Cloud Storage] > [バケット] ページに移動します
  2. 先ほど作成したバケットをクリックしてオブジェクト一覧を表示しようとします

ペリメーターが正しく機能していれば、Cloud Storage のページにアクセスできず、VPCセキュリティ管理ポリシーによって拒否されましたとアクセスエラーが表示されます。

alt text

今回の全体の流れとしては以下の通りです。

ブロックされたリクエストの詳細は Cloud Logging で確認できます。監査ログに記録される vpcServiceControlsUniqueIdentifier を検索すると、どのペリメーターポリシーに違反したかを特定できます。

以下が Cloud Logging で確認できる JSON の内容になります。

{
  "protoPayload": {
    "@type": "type.googleapis.com/google.cloud.audit.AuditLog",
    "status": {
      "code": 7,
      "message": "Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: UNIQUE_IDENTIFIER",
      "details": [
        {
          "@type": "type.googleapis.com/google.rpc.PreconditionFailure",
          "violations": [
            {
              "type": "VPC_SERVICE_CONTROLS",
              "description": "UNIQUE_IDENTIFIER"
            }
          ]
        },
        {
          "@type": "type.googleapis.com/google.rpc.ErrorInfo",
          "reason": "SECURITY_POLICY_VIOLATED",
          "domain": "googleapis.com",
          "metadata": {
            "service": "storage.googleapis.com",
            "troubleshootToken": "TROUBLESHOOT_TOKEN",
            "uid": "UNIQUE_IDENTIFIER"
          }
        }
      ]
    },
    "authenticationInfo": {
      "principalEmail": "wa...u@al...o"
    },
    "requestMetadata": {
      "callerIp": "xxx.xxx.xxx.xxx",
      "requestAttributes": {},
      "destinationAttributes": {}
    },
    "serviceName": "storage.googleapis.com",
    "methodName": "google.storage.buckets.list",
    "resourceName": "projects/YOUR_PROJECT_NUMBER",
    "metadata": {
      "accessLevels": [
        "accessPolicies/YOUR_POLICY_ID/accessLevels/YOUR_ACCESS_LEVEL_1",
        "accessPolicies/YOUR_POLICY_ID/accessLevels/YOUR_ACCESS_LEVEL_2"
      ],
      "vpcServiceControlsUniqueId": "UNIQUE_IDENTIFIER",
      "resourceNames": [
        "projects/_"
      ],
      "ingressViolations": [
        {
          "targetResource": "projects/YOUR_PROJECT_NUMBER",
          "servicePerimeter": "accessPolicies/YOUR_POLICY_ID/servicePerimeters/storage_perimeter",
          "targetResourcePermissions": [
            "storage.buckets.list"
          ]
        }
      ],
      "securityPolicyInfo": {
        "servicePerimeterName": "accessPolicies/YOUR_POLICY_ID/servicePerimeters/storage_perimeter",
        "organizationId": "YOUR_ORGANIZATION_ID"
      },
      "violationReason": "NO_MATCHING_ACCESS_LEVEL",
      "@type": "type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata",
      "intermediateServices": [
        "cloudclient-pa.googleapis.com"
      ],
      "deviceState": "Unknown",
      "vpcServiceControlsTroubleshootToken": "TROUBLESHOOT_TOKEN"
    }
  },
  "insertId": "k84qjd1ihg",
  "resource": {
    "type": "audited_resource",
    "labels": {
      "project_id": "YOUR_PROJECT_ID",
      "service": "storage.googleapis.com",
      "method": "google.storage.buckets.list"
    }
  },
  "timestamp": "2026-08-04T01:13:47.570573172Z",
  "severity": "ERROR",
  "logName": "projects/YOUR_PROJECT_ID/logs/cloudaudit.googleapis.com%2Fpolicy",
  "receiveTimestamp": "2026-08-04T01:13:48.176538558Z"
}

ステップ 1-5: Ingress ルールで特定のアクセスを許可

アクセスレベル(IP 制限)と特定ユーザーを組み合わせた Ingress ルールを設定します。

  1. [セキュリティ] > [VPC Service Controls] でペリメーター一覧から storage_perimeter をクリックします
  2. [編集] をクリックします
  3. [上り(内向き)ポリシー] をクリックします
  4. [ルールを追加] をクリックします
  5. From セクションを以下のとおり設定します
    • ソース: 「アクセスレベルを選択」を選択し、office-ip を選択
    • ID: 「ID とグループを選択」を選択し、[ID を追加] で許可するユーザーのメールアドレスを入力
  6. To セクションを以下のとおり設定します
    • プロジェクト: 「選択したプロジェクト」を選択し、対象のプロジェクトを追加
    • サービス: 「選択したサービス」を選択し、Cloud Storage API を追加
    • メソッド: 「すべてのメソッド」を選択
  7. [保存] をクリックします

alt text

ルールの反映後、許可した IP アドレスの端末から許可したユーザーで Cloud Storage ページにアクセスすると、バケット内のオブジェクトが正常に表示されます。

alt text

逆に、同じユーザーであっても接続元の IP アドレスがアクセスレベルで許可した IP と異なる場合はアクセスが拒否されます。例えば、テザリングや VPN 接続先の変更などでグローバル IP が変わると、許可ユーザーであってもブロックされます。Ingress ルールではアクセスレベル(IP 条件)と ID(ユーザー条件)の両方を同時に満たす必要があるためです。

alt text

パターン 2: スコープ付きアクセスポリシーで検証

スコープ付きアクセスポリシーは、特定のフォルダやプロジェクトに適用範囲を絞ったポリシーです。組織レベルの管理者がポリシーの管理権限を特定のプリンシパルに委任でき、部門やプロジェクト単位での VPC Service Controls 運用に適しています。

ステップ 2-1: スコープ付きアクセスポリシーの作成

  1. Google Cloud コンソールのナビゲーションメニューから [セキュリティ] > [VPC Service Controls] をクリックします
  2. プロジェクトセレクタで組織を選択します
  3. [ポリシーを管理する] をクリックします

alt text

  1. [作成] をクリックします

alt text

  1. [アクセスポリシー名] に任意の名前(例: Hikaru Access Policy)を入力します
  2. [スコープ] をクリックし、ポリシーの適用範囲を設定します
    • [プロジェクトの追加] をクリックします
    • ハンズオンで使用するプロジェクトを選択し、[完了] をクリックします
  3. [プリンシパル] をクリックし、ポリシーの管理者を設定します
    • [プリンシパルを追加] をクリックします
    • 自分のユーザーアカウントを選択し、ロールに [Access Context Manager管理者] を選択します
    • [保存] をクリックします

alt text

  1. [アクセスポリシーの作成] をクリックします

alt text

アクセスポリシーの作成が完了しました。

ステップ 2-2: アクセスレベルの作成

  1. Google Cloud コンソールで [セキュリティ] > [VPC Service Controls] をクリックします
  2. スコープ付きポリシーのコンテキストに切り替わったことを確認します

alt text

  1. Google Cloud コンソールで [Access Context Manager] ページを開きます
  2. プロジェクトセレクタで、スコープ付きポリシーの対象に設定したプロジェクトを選択します
  3. ページ上部の [アクセスレベルの作成] をクリックします

alt text

  1. [新しいアクセスレベル] パネルで以下を設定します
    • アクセスレベルのタイトル: office_ip
  2. [条件] セクションで [属性を追加] をクリックし、[IP サブネットワーク] を選択します
  3. [パブリック IP] を選択し、自分の IP アドレスを CIDR 形式で入力します(例: xxx.xxx.xxx.xxx/32
  4. [保存] をクリックします

alt text

ステップ 2-3: サービスペリメーターの作成

  1. [セキュリティ] > [VPC Service Controls] をクリックします
  2. VPC Service Controls ページで、作成したスコープ付きポリシーHikaru Access Policy)を選択します
  3. [新しい境界] をクリックします
  4. 以下を設定します
    • タイトル: storage_perimeter
    • 説明: Cloud Storageへのアクセスを制限
    • ペリメーターのタイプ: 「標準(デフォルト)」のまま
    • 適用モード: 「適用」のまま
  5. [続行] をクリックします

alt text

  1. [プロジェクトの追加] をクリックし、保護対象のプロジェクトを選択して [選択したプロジェクトの追加] をクリックします
  2. [続行] をクリックします

alt text

  1. [制限付きサービス] セクションで [サービスを追加] をクリックします
  2. フィルタに「Cloud Storage」と入力し、[Cloud Storage API]storage.googleapis.com)にチェックを入れます
  3. [選択したサービスを追加] をクリックします

alt text

  1. [ペリメーターを作成] をクリックします

alt text

ステップ 2-4: ペリメーター外からのアクセス確認

パターン 1 と同様に、コンソールから Cloud Storage バケットにアクセスし、ブロックされることを確認します。

  1. Google Cloud コンソールで [Cloud Storage] > [バケット] ページに移動します
  2. 先ほど作成したバケットをクリックしてオブジェクト一覧を表示しようとします

ペリメーターが正しく機能していれば、エラーが表示されアクセスがブロックされます。

alt text

ステップ 2-5: Ingress ルールで特定のアクセスを許可

  1. [セキュリティ] > [VPC Service Controls] でスコープ付きポリシー(Hikaru Access Policy)を選択します
  2. ペリメーター一覧から storage_perimeter をクリックします
  3. [編集] をクリックします
  4. [上り(内向き)ポリシー] をクリックします
  5. [ルールを追加] をクリックします
  6. From セクションを以下のとおり設定します
    • ソース: 「アクセスレベルを選択」を選択し、office_ip を選択
    • ID: 「ID とグループを選択」を選択し、[ID を追加] で許可するユーザーのメールアドレスを入力
  7. To セクションを以下のとおり設定します
    • プロジェクト: 「選択したプロジェクト」を選択し、対象のプロジェクトを追加
    • サービス: 「選択したサービス」を選択し、Cloud Storage API を追加
    • メソッド: 「すべてのメソッド」を選択
  8. [保存] をクリックします

alt text

ルールの反映後、許可した IP アドレスの端末から許可したユーザーで Cloud Storage ページにアクセスすると、バケット内のオブジェクトが正常に表示されます。

alt text

組織レベルポリシーとスコープ付きポリシーの比較まとめ

2 つのパターンで検証した結果を踏まえて、組織レベルポリシーとスコープ付きポリシーの違いを整理します。
どちらを選択するかは、組織の規模や管理体制に応じて判断していただくとよいと思います。

観点 組織レベルポリシー スコープ付きポリシー
セットアップの手軽さ シンプル。ポリシーは自動作成される場合もある スコープとプリンシパルの設定が必要
アクセスレベルの作成 Access Context Manager で組織を選択して作成 Access Context Manager でプロジェクトを選択して作成
管理権限の委任 組織レベルの管理者が一元管理 プリンシパル設定で特定ユーザーに委任可能
適用範囲 組織内の全プロジェクトが対象 指定したフォルダ・プロジェクトのみが対象
ユースケース 小〜中規模の組織、一元管理が望ましい場合 大規模組織、部門ごとに独立したペリメーター管理が必要な場合
注意点 組織全体に影響するため慎重な運用が必要 アクセスレベルの作成時に、スコープ付きポリシーの対象(フォルダまたはプロジェクト)を選択する必要がある(組織を選ぶと組織レベルポリシーに作成される)

まとめ

本記事では、VPC Service Controls を使って Cloud Storage への API アクセスを制限する方法を、組織レベルのアクセスポリシースコープ付きアクセスポリシーの 2 パターンで検証しました。

どちらのパターンでも、サービスペリメーターによってペリメーター外からの Cloud Storage API 呼び出しをブロックし、Ingress ルールでアクセスレベル(IP 制限)と特定ユーザーを組み合わせた許可設定ができることを確認しました。

検証を通じて得られた重要なポイントは以下のとおりです。

  • アクセスレベルとサービスペリメーターは同じアクセスポリシー内に作成する必要がある ― 異なるポリシーのアクセスレベルは Ingress ルールから参照できません
  • 組織レベルポリシーはセットアップがシンプルで、組織全体の一元管理に向いている
  • スコープ付きポリシーはプロジェクトやフォルダ単位で管理を委任でき、大規模組織での運用に向いている
  • スコープ付きポリシーでは、Access Context Manager ページでプロジェクトを選択してアクセスレベルを作成する点に注意が必要

ペリメーターの設計においては、Dry-run モードを活用して事前に影響範囲を確認することが重要です。本番環境で既にリソースが稼働している場合、いきなり Enforced モードを適用するとサービスに影響が出る可能性があるため、まずはログを確認しながら段階的に導入を進めましょう。

データ保護要件が厳しい環境で Cloud Storage を利用している方は、VPC Service Controls によるペリメーター保護の導入を検討してみてはいかがでしょうか。

この記事が誰かの助けになれば幸いです。

以上、クラウド事業本部コンサルティング部の渡邉でした!

この記事をシェアする

関連記事