
限定公開のGoogleアクセスでGoogle APIへセキュアに接続したい
クラウド事業本部コンサルティング部の渡邉です。
Google Cloudには、Google APIへセキュアに接続することができる 限定公開のGoogleアクセス という機能があることをご存じでしょうか?
今回は、限定公開のGoogleアクセスについての解説と、限定公開のGoogleアクセスを利用したGoogle APIへの接続を実際に試してみたいと思います。
限定公開のGoogleアクセスとは
限定公開のGoogleアクセスとは、インターネットに出ることができない内部IPアドレスしか持たないVMインスタンス(Compute Engine)がCloud StorageやBigQueryなどのGoogle APIへGoogle内部のネットワークを経由してアクセスすることができる機能です。限定公開のGoogleアクセスはPrivate Google Access (PGA)とも呼ばれたりします。
通常、Cloud StorageやBigQueryなどのGoogle APIへアクセスするためにはインターネットを経由する必要があり、外部IPアドレスが必要になりますが、セキュリティ要件の厳しいお客様や統制の取れた環境ではCompute Engineに外部IPを付与することができないケースがあると思います。そういったケースでもGoogle APIへアクセスしたい場合に、この限定公開のGoogleアクセスは非常に有効な機能となります。
限定公開のGoogleアクセス
限定公開のGoogleアクセスの仕様
以下を満たす場合に、限定公開のGoogleアクセスを使用してGoogle APIに接続することができます。
- 限定公開のGoogleアクセスが有効なサブネットにVMインスタンスが接続されていること。(限定公開のGoogleアクセスはサブネット単位で有効/無効を選択することができます。)
- VMインスタンスに外部IPアドレスが付与されていないこと。
- 接続したいサービスのGoogle APIを有効化していること。(storage.googleapis.com APIへアクセスしたい場合は、Cloud Storage API を有効にする必要がある。)
- ネクストホップがデフォルトのインターネットゲートウェイである適切なルート(0.0.0.0/0)が存在すること(VPCネットワーク作成時に自動的に作成される。)
- VPCネットワークのファイアウォールでデフォルトのインターネットゲートウェイ(0.0.0.0/0)へのHTTPS(443)アクセスが許可されていること(暗黙のEgress許可のため基本的に対応不要)
ドメインオプション
限定公開のGoogleアクセスにはセキュリティ要件とアクセス範囲により、3つのドメインオプションから選択することができます。デフォルトドメインはほぼすべてのGoogle APIとサービスにアクセスできることができますが、セキュリティ上の制限は最も緩くなります。private.googleapis.comはGoogle APIのみに限定し、Google Workspaceなど一部サービスへのアクセスを遮断することで、不要なサービスへの接続を防ぐことができます。restricted.googleapis.comは最も厳格で、VPC Service Controls対応サービスのみにアクセスを制限し、データ境界の保護が必要な環境に最適です。
今回はデフォルトドメインを利用するパターンで検証を行っていきたいと思います。
デフォルトドメイン、private.googleapis.com、restricted.googleapis.comを利用するにあたっての比較内容や、Cloud DNSの必要な設定内容については、以下の公式ドキュメントをご参照ください。
ドメイン オプション | 限定公開の Google アクセスを構成する | VPC | Google Cloud
DNS構成 | 限定公開の Google アクセスを構成する | VPC | Google Cloud
試してみた
今回は、限定公開のGoogleアクセスを使用して、Compute EngineからCloud Storageに存在するファイルを確認することができるか検証してみようと思います。
アーキテクチャ
検証するアーキテクチャとしては以下になります。
限定公開のGoogleアクセスをオンにしたサブネット上に存在するCompute EngineからCloud Storageへアクセスできることの確認と、限定公開のGoogleアクセスをオフに更新したサブネット上に存在するCompute EngineからCloud Storageへアクセスできないことの確認をしていきます。
検証するアーキテクチャ
限定公開のGoogleアクセスを使用するパターン
VPCネットワークの作成
まずは、VPCネットワークを作成していきます。
gcloud compute networks create test-vpc \
--subnet-mode=custom \
--bgp-routing-mode=regional
VPCネットワーク
VPCネットワークを作成したと同時にネクストホップがデフォルトインターネットゲートウェイのルートが作成されることも確認できます。
デフォルトインターネットゲートウェイのルート
サブネットワークの作成
限定公開のGoogleアクセスを有効化にしたサブネットを作成していきます。
gcloud compute networks subnets create test-subnet \
--network=test-vpc \
--range=192.168.0.0/24 \
--region=asia-northeast1 \
--stack-type=IPV4_ONLY \
--enable-private-ip-google-access
限定公開のGoogleアクセスを有効化にしたサブネット
Compute Engineの作成
限定公開のGoogleアクセスを有効化にしたサブネット内に内部IPアドレスのみを持つCompute Engineを作成します。
gcloud compute instances create vm-01 \
--zone=asia-northeast1-a \
--machine-type=e2-medium \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--network=test-vpc \
--subnet=test-subnet \
--no-address
Compute Engine
ファイアウォールの作成
内部IPアドレスのみを持つCompute EngineにSSH接続をするためには、Identity-Aware Proxy(IAP)TCP 転送を使用してアクセスします。
IAPのTCP転送を利用してSSHをするためには、ファイアウォールを作成する必要があるので作成します。
今回はこちらの詳細な説明は省略します。
gcloud compute firewall-rules create allow-iap-ssh-access \
--network test-vpc \
--direction=INGRESS \
--action=allow \
--rules=tcp:22 \
--source-ranges=35.235.240.0/20
IAP利用許可のファイアウォール
インターネットへの接続確認
まずは、Compute Engine内へIAP経由でSSHを行い、Compute Engine内からインターネットへ接続できないことを確認します。curlコマンドを利用しhttps://classmethod.jp/
へアクセスしましたが、
内部IPアドレスのみで、外部IPアドレスが付与されていないためインターネットへアクセスすることはできません。(タイムアウトしました)
インターネットへの接続確認
Cloud Storageへのアクセス確認
次に、Compute EngineからCloud Storageへアクセスできることを確認します。
事前に、Cloud Storageバケットの作成とテストファイルをアップロードしておきます。
Compute Engine内からgsutilコマンドを実行することで、限定公開のGoogleアクセスの機能を利用してCompute EngineからCloud Storageバケットのテストファイルへアクセスすることができました。
限定公開のGoogleアクセスを利用したCloud Storageアクセス
限定公開のGoogleアクセスを無効化するパターン
限定公開のGoogleアクセスを無効化
サブネットを更新し、限定公開のGoogleアクセスを無効化にしていきます。
gcloud compute networks subnets update test-subnet \
--region=asia-northeast1 \
--no-enable-private-ip-google-access
限定公開のGoogleアクセスが無効化になりました。
限定公開のGoogleアクセスを無効化
Cloud Storageへのアクセス確認
次に、Compute EngineからCloud Storageへアクセスできないことを確認します。
先ほどと同様に、Compute Engine内からgsutilコマンドを実行しましたが、限定公開のGoogleアクセスを無効化にしていることで、Cloud Storageバケットのテストファイルへアクセスすることができませんでした。
さいごに
今回は、限定公開のGoogleアクセスについての解説と限定公開のGoogleアクセスを利用したGoogle APIへの接続を実際に試してみました。
限定公開のGoogleアクセスを利用することで、Google内部のネットワークを経由してGoogle APIへセキュアにアクセスすることができました。サブネット作成時にオンするだけの簡単な設定で限定公開のGoogleアクセスを利用することができるので、是非、積極的に利用していただくとよいと思います。
今回試した、限定公開のGoogleアクセスはデフォルトドメインのパターンのみでしたが、private.googleapis.com
やrestricted.googleapis.com
などの特殊なドメインを利用した限定公開のGoogleアクセスの方法についてはまた別の機会で検証したいと思います。
この記事が誰かの助けになれば幸いです。
以上、クラウド事業本部コンサルティング部の渡邉でした!