1. はじめに
VPC Service Controls(VPC-SC)は、Google Cloud の組織レベルのセキュリティ制御であり、企業のお客様がデータ漏洩のリスクを軽減できます。VPC Service Controls は、インターネットや他のサービスからマルチテナント サービスへの接続について、一定の承認済み IP、クライアント コンテキスト、デバイス パラメータに限定してアクセスを許可することで、マルチテナント サービスへのゼロトラスト スタイルのアクセスを提供します。これにより、意図的または意図しない損失を減らすことができます。VPC Service Controls を使用すると、明示的に指定したサービスのリソースとデータを保護する境界を作成できます。
このチュートリアルの目標は次のとおりです。
- VPC Service Controls の基本を理解する
- VPC サービス境界を作成する
- VPC Service Controls でプロジェクトを保護する
- VPC Service Controls の上り(内向き)違反のトラブルシューティングを行う
2. 設定と要件
このチュートリアルでは、次の前提条件が必要です。
- GCP 組織。
- 組織内のフォルダ。
- 同じ組織内の 2 つの GCP プロジェクトがフォルダに配置されている。
- 組織レベルで必要な権限。
- 両方のプロジェクトの請求先アカウント。

リソースの設定
- Google Cloud コンソールで、組織の下にフォルダを作成し、2 つの新しいプロジェクトを作成します(既存のプロジェクトを再利用することもできます)。
(Google Workspace アカウントまたは Cloud Identity アカウントをまだお持ちでない場合は、このチュートリアルで組織が必要になるため、アカウントを取得する必要があります)。
- このチュートリアルに必要な権限が組織レベルで付与されていることを確認します。
- フォルダレベルでスコープ付きポリシーを作成する必要があるため、両方のプロジェクトがフォルダで使用可能であることを確認します。プロジェクトをフォルダに移動する方法について学習する。

費用
Cloud のリソースや API を使用するには、Cloud コンソールで課金を有効にする必要があります。この Codelab の操作をすべて行って、費用が生じたとしても、少額です。このチュートリアルの終了後に請求が発生しないようにリソースをシャットダウンするには、作成したリソースを削除するか、プロジェクトを削除します。Google Cloud の新規ユーザーは、300 米ドル分の無料トライアル プログラムをご利用いただけます。
費用が発生するリソースは VM インスタンスのみです。費用の見積もりについては、料金計算ツールをご覧ください。
3. 境界を作成する
このラボでは、次の手順を行います。
- Google コンソールで、組織を選択して VPC Service Controls にアクセスします。組織レベルであることを確認してください。

- [ポリシーを管理] をクリックして、[Codelab] フォルダをスコープにした新しいアクセス ポリシーを作成します。

- 自動適用モードで新しい境界を作成します。このチュートリアルでは、「SuperProtection」という名前にします。
- 境界を作成するときに、適用するプロジェクトとして ProjectZ を選択します。
- 境界タイプとして [標準] を選択します。
- [制限するサービスを指定] ダイアログで、制限するサービスとして [Compute Engine] を選択します。
境界の設定は次のようになります。

4. 境界が適用されていることを確認する
- ProjectX にアクセスし、VM インスタンスのホームページにアクセスして、Compute Engine API にアクセスできるかどうかを確認します。projectX は作成した VPC SC 境界で保護されていないため、アクセスできるはずです。
- ProjectZ にアクセスし、Compute Engine にアクセスできるかどうかを確認します。サービス境界 SuperProtection が ProjectZ と Compute Engine API を保護しているため、リクエストが VPC Service Controls によって禁止されていることがわかります。

5. 拒否に関するトラブルシューティング
まず、トラブルシューティングの方法を決定するために、ここで何が問題なのかを正確に特定する必要があります。
- VPC Service Controls のログには、保護されたリソースへのリクエストの詳細と、VPC Service Controls がリクエストを拒否した理由が含まれます。ログ エクスプローラで次のクエリを使用して、ProjectZ の監査ログで VPC Service Controls の一意の ID を見つけます。
resource.type="audited_resource" protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
これにより、すべての VPC Service Controls 監査ログが表示されます。最後のエラーログを探します。
- [VPC Service Controls] ヘッダーをクリックし、[拒否のトラブルシューティング] を選択します。これにより、VPC Service Controls Troubleshooter が開きます。
この API は、違反の理由や、違反が上り(内向き)か下り(外向き)かなど、役立つ情報をわかりやすい UI で表示します。
この演習では、次のことを確認します。
"principalEmail": "user@domain"
"callerIp": "PUBLIC_IP_ADDRESS"
"serviceName": "compute.googleapis.com"
"servicePerimeterName":
"accessPolicies/[POLICY_NUMBER]/servicePerimeters/SuperProtection
"ingressViolations": [
{
"targetResource": "projects/[PROJECT_NUMBER]",
"servicePerimeter": "accessPolicies/[POLICY_NUMBER]/servicePerimeters/SuperProtection"
}
],
"violationReason": "NO_MATCHING_ACCESS_LEVEL",
"resourceNames": "[PROJECT_ID]"
ProjectZ でこの拒否を修正するには、次の 2 つの方法があります。
- システム IP へのアクセス権を付与して、境界内のプロジェクトへのアクセスを許可するアクセスレベルを作成します。
- サービス境界外の API クライアントからサービス境界内のリソースへのアクセスを許可する上り(内向き)ルールを作成する。
このチュートリアルでは、アクセスレベルを作成してトラブルシューティングを行います。
- フォルダ(Codelab)スコープの Access Context Manager に移動し、新しいアクセスレベルを作成します。
- 「基本モード」を使用すると、IP サブネットワークと地理的位置が一致した場合にアクセスが許可されます。

- 組織スコープの VPC Service Controls に移動します。この Codelab のアクセス ポリシーを選択し、以前に作成した境界を編集します。
- フォルダ スコープで作成したアクセスレベルを追加して保存します。

6. テスト結果。
Compute Engine にアクセスして VM インスタンスを作成できることを確認します。アクセスレベルを作成したので、ProjectZ で Compute Engine にアクセスして VM インスタンスを作成してみましょう。
- [Compute Engine] に移動し、[インスタンスを作成] をクリックします。

- すべてをデフォルトのままにして、低コストの VM インスタンスを作成してみます。
約 1 分後に、VM インスタンスが作成されます。境界内で保護されている Compute Engine への完全アクセス権があることを確認できます。

7. クリーンアップ
サービスが使用されていない場合、VPC Service Controls の使用に追加料金は発生しませんが、このラボで使用した設定をクリーンアップすることをおすすめします。VM インスタンスや Cloud プロジェクトを削除して、料金が発生しないようにすることもできます。Cloud プロジェクトを削除すると、そのプロジェクト内で使用されているすべてのリソースに対する課金が停止します。
- VM インスタンスを削除するには、VM インスタンス名の左側にあるチェックボックスをオンにして、[削除] をクリックします。

- 境界を削除する手順は次のとおりです。
- Google Cloud コンソールで、[セキュリティ] をクリックし、組織スコープで [VPC Service Controls] をクリックします。
- [VPC Service Controls] ページで、削除する境界に対応するテーブル行の [削除アイコン] をクリックします。
- アクセスレベルを削除する手順は次のとおりです。
- Google Cloud コンソールで、フォルダ スコープの Access Context Manager ページを開きます。
- グリッドで、削除するアクセスレベルの行の「削除アイコン」をクリックし、[削除] をクリックします。
- プロジェクトをシャットダウンする手順は次のとおりです。
- Google Cloud コンソールで、削除するプロジェクトの [IAM と管理] の [設定] ページに移動します。
- [IAM と管理の設定] ページで、[シャットダウン] をクリックします。
- プロジェクト ID を入力し、[このままシャットダウン] をクリックします。
8. 完了
この Codelab では、VPC Service Controls の境界を作成し、適用して、トラブルシューティングを行いました。
詳細
- VPC Service Controls のドキュメントをご覧ください。
- Access Context Manager のドキュメントをご覧ください。
- VPC-SC トラブルシューティングのドキュメントをご覧ください。
ライセンス
この作業はクリエイティブ・コモンズの表示 2.0 汎用ライセンスにより使用許諾されています。