目次
Microservicesアーキテクチャを実践中!
VPC Service Controls (VPC-SC) に関する雑多な事項を記載します。
Private Google Access の基本形
Private Google Access は外部 IP を持たない VM のための機能です。
VPC の機能ですが、VPC-SC と関連するため基本事項を記載します。
Firewall Egress (Internet) | 外部 IP | Private Google Access | Google API アクセス (Public IP) | インターネットアクセス |
---|---|---|---|---|
Deny | 有/無 | ON/OFF | X | X |
Allow | 有 | ON | O | O |
Allow | 有 | OFF | O | O |
Allow | 無 | ON | O | X |
Allow | 無 | OFF | X | X |
Firewall によって、Google API の Public IP への Egress 通信が許可されている必要があります。
設定箇所
Private Google Access は VPC 内の subnet 毎に有効化します。
アクセス先 Google API の IP について
外部IP を持たない VM であっても、Google API のパブリック IP にアクセスできます。
They can reach the external IP addresses of Google APIs and services.
Private Google Access
Google API の IP がパブリック IP であったとしても、ネットワーク経路としては Google ネットワーク内で閉じます。
These IP addresses are publicly routable, but the path from a VM in a VPC network to those addresses remains within Google's network
Configuring Private Google Access
Accessing APIs from VMs with external IP addresses
外部IP を持つ VM であっても、同様にネットワーク経路としては Google ネットワーク内で閉じます。
Though the connection is made from the VM's external IP address, the traffic stays within Google Cloud and is not sent through the public internet.
Accessing APIs from VMs with external IP addresses
インターネットアクセスのための条件
Private Google Access はインターネットアクセスと区別されます。
インターネットアクセスのための条件は以下のすべてを満たすことです。参考: Internet access requirements
- VPC 内の default internet gateway へのルーティングが存在すること。
- Firewall による Egress 通信が許可されていること。
- 外部IP または Cloud NAT が利用できること。
gcloud コマンドが通信する Google API の確認
--log-http
オプションを付与することで、具体的にどの Google API と通信しているかを確認できます。
インターネットへの egress 通信が Firewall で禁止されている VPC における Private Google Access
以下のような背景のもと、Public IP による Google API へのアクセスが困難である場合があります。
- セキュリティ要件でインターネットへの Egress 通信を Firewall で禁止している。
- Google API が利用する Public IP の範囲をすべて Firewall で許可するのは避けたい。
Google API のエンドポイントは、Google が保有する、Public IP でありながらもインターネットで利用されていない 8 つの IP によってアクセスできます。
Firewall Egress (Internet) | Firewall Egress (restricted.googleapis.com) | 外部 IP | Private Google Access | Google API アクセス (restricted.googleapis.com) | インターネットアクセス |
---|---|---|---|---|---|
Deny | Deny | 有/無 | ON/OFF | X | X |
Deny | Allow | 有 | ON | O | X |
Deny | Allow | 有 | OFF | O | X |
Deny | Allow | 無 | ON | O | X |
Deny | Allow | 無 | OFF | X | X |
- restricted.googleapis.com 199.36.153.4/30
- VPC-SC でサポートする Google API に対してのみ有効です。
- private.googleapis.com 199.36.153.8/30
- 上表は restricted.googleapis.com に関するものですが、private.googleapis.com でも同様です。
DNS 設定
gcloud コマンド等の Google API クライアントが restricted.googleapis.com を利用するための DNS 設定を作成します。参考: DNS configuration
restricted.googleapis.com の A レコードはインターネット上の DNS でも引けます。ただし、今回 CNAME レコードのための googleapis.com ゾーンを作成することに伴い、インターネット上の googleapis.com ゾーンを利用できなくなるため、A レコードの作成も必要です。
DNS response policy
DNS private zone の代わりに、DNS response policy を利用することもできます。
For general use of VPC Service Controls, we recommend that you use Cloud DNS response policies to configure DNS for your VPC networks. When you use Cloud DNS, you don't need to create a managed private zone to configure DNS.
Configuring DNS
A レコード相当のルール
オンプレミスや AWS VPC からの Google API 利用
restricted.googleapis.com および private.googleapis.com は、オンプレミスや AWS VPC に存在する、インターネットアクセス経路を持たないサーバからの Google API アクセスのためにも利用できます。
199.36.153.4/30
および 199.36.153.8/30
の経路はインターネットに広報されていないため、オンプレミスや AWS VPC に対して、GCP に向くような経路情報を広報することが可能になります。
GCP VPC の設定となるため、GCP subnet に対する設定である Private Google Access の有効無効は関係しません。
Private Google Access for on-premises hosts
VPC Service Controls と Private Google Access の併用
VPC Service Controls (VPC-SC) に含まれるプロジェクトの VPC は Authorized VPC となります。Authorized VPC は Google API にアクセスした際に、VPC-SC に含まれるプロジェクトについて、VPC-SC で囲われているサービスを操作できます。
補足: VPC-SC に含まれていないプロジェクトに対してはアクセスできません。
username@instance-1:~$ gsutil cp gs://spls/gsp072/baby-names.zip .
AccessDeniedException: 403 Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Private Google Access with VPC Service Controls
以下のいずれの経路であってもアクセスできます。
- restricted.googleapis.com 199.36.153.4/30
- private.googleapis.com 199.36.153.8/30
- インターネットに経路情報が広報されている Public IP
実際の運用では VPC からインターネットへのアクセスは Firewall で制限していると考えられ、その場合「3」の経路は使えません。VPC-SC でサポートしていない Google API へのアクセスが要件として不要である場合は、「2」の経路である必要もありません。その場合、結果として「1」の経路を設定することになります。
「3」の場合に関する補足
Cloud DNS を利用できない等の理由で「1」または「2」を選択できない場合は「3」を利用することになります。
その場合に「3」以外のインターネットアクセスを禁止するためには、IP addresses for default domains で言及されている goog.json への egress 通信を明示的に Firewall で許可しつつ、他のインターネットへの egress 通信を禁止することになります。
その際に、「3」の IP であっても VPC-SC の制限の影響を受けることに注意します。VPC-SC 境界外のプロジェクトの API にアクセスするためには perimeter bridges または egress rule の設定が必要です。
ただし、「3」の場合は「2」の場合と同様に VPC-SC でサポートされていない Google API にもアクセスが可能であり、そのような Google API は VPC-SC の境界の影響を受けません。
例えば www.googleapis.com
は VPC-SC でサポートされていない Google API です。以下のように「2」および「3」の場合は利用できてしまいます。
「1」の場合
myuser@instance-1:~$ tail -1 /etc/hosts
199.36.153.7 www.googleapis.com
curl -sS -XGET https://www.googleapis.com/gmail/v1/users/me/messages
Error 403 (Forbidden)!!1
「2」の場合
myuser@instance-1:~$ tail -1 /etc/hosts
199.36.153.8 www.googleapis.com
curl -sS -XGET https://www.googleapis.com/gmail/v1/users/me/messages
401 Login Required.
「3」の場合
myuser@instance-1:~$ tail -1 /etc/hosts
#199.36.153.8 www.googleapis.com
curl -sS -XGET https://www.googleapis.com/gmail/v1/users/me/messages
401 Login Required.
関連資料:
- Ingress and egress rules
- Ingress/Egress ルールを追加することで、VPC-SC 外のリソースとの通信を柔軟に許可します。
- Secure data exchange with ingress and egress rules
- Context-aware access with ingress rules
- Sharing across perimeters with bridges
- VPC accessible services
- VPC から利用できる Google API を制限します。
- Designing Secure Data Pipelines with VPC Service Controls
- Cloud Functions を VPC-SC と併用する場合の注意点です。
- Serverless VPC Access
- Configuring Serverless VPC Access
VPC Service Controls と Private Google Access と Private Service Connect の併用
2021/8/5 に GA となった Private Service Connect を利用すると、以下の「4」の選択肢によって、任意の IP で Google API にアクセスできるように設定できます。オンプレミスや AWS VPC からインターネットを経由せずに Google API を利用する際、従来は「1」または「2」を利用する必要がありましたが、「4」が選択可能になったことにより、199.36.153.4/30
および 199.36.153.8/30
に縛られることがなくなり、オンプレミスや AWS VPC における柔軟なルーティング設定が可能となります。
- restricted.googleapis.com 199.36.153.4/30
- private.googleapis.com 199.36.153.8/30
- インターネットに経路情報が広報されている Public IP
- Private Service Connect で設定した Endpoint IP
利用料金は 0.01 USD * 24 * 30 * 110 = 800円/月 程度です。
Private Service Connect は AWS PrivateLink に相当するサービスです。Google API だけでなく一般の SaaS に対してインターネット経由せずにアクセスする場合にも利用できます。例えば、Snowflake は 2021/10/27 の記事で Private Service Connect に対応したことが発表されました。
参考資料:
- Consume services faster, privately and securely - Private Service Connect now in GA 2021/8/5
- Snowflake Announces Support for Google Cloud Private Service Connect 2021/10/27
- pricing
Private Service Connect Endpoint へのアクセス経路
GCP VPC 内の VM から Private Service Connect Endpoint にアクセスする場合:
オンプレミスから Private Service Connect Endpoint にアクセスする場合:
Access Google APIS using Private Service Connect
Private Service Connect の設定例
API の有効化
事前に Cloud DNS API、Service Directory API を有効化する必要があります。有効化していない場合であっても Private Service Connect 自体は利用できますが、例えば p.googleapis.com
の DNS ゾーンが自動作成されない原因となります。
Firewall 設定
Private Service Connect の Endpoint に設定する IP に対する egress 通信が許可されるように Firewall を設定する必要があります。
Private Google Access
Private Service Connect の利用時に Private Google Access は必須ではありません。GCP VPC 内の VM が External IP を持たない場合は、Private Google Access を subnet の設定で有効化する必要があります。VM が External IP を持つ場合は、Private Google Access が有効化されていない場合であっても Private Service Connect Endpoint にアクセスできます。External IP の有無、および Private Google Access の有効無効に関わらず、Google API への通信はインターネットを経由しません。
Private Service Connect Endpoint の作成
VPC で利用されていない任意の IP の割り当てます。
Private Service Connect Endpoint でサポートする target を選択します。VPC-SC と併用する場合は VPC-SC を選択します。最初の選択肢は private.googleapis.com
に相当し、二番目の選択肢は restricted.googleapis.com
に相当します。最後の選択肢は Snowflake 等の SaaS を利用する場合に選択します。
p.googleapis.com
ゾーンが自動作成されます。
Private Service Connect Endpoint は Service Directory という枠組みに登録されます。
VM から Endpoint IP にアクセスできることを確認します。
username@instance-2:~$ curl -v 123.123.123.123/generate_204
* Expire in 0 ms for 6 (transfer 0x5590da276fb0)
* Trying 123.123.123.123...
* TCP_NODELAY set
* Expire in 200 ms for 4 (transfer 0x5590da276fb0)
* Connected to 123.123.123.123 (123.123.123.123) port 80 (#0)
> GET /generate_204 HTTP/1.1
> Host: 123.123.123.123
> User-Agent: curl/7.64.0
> Accept: */*
>
< HTTP/1.1 204 No Content
< Content-Length: 0
< Date: Sun, 12 Dec 2021 06:38:56 GMT
<
* Connection #0 to host 123.123.123.123 left intact
Private Service Connect Endpoint の利用
自動作成された p.googleapis.com
には以下のような A レコードが登録されています。
username@instance-2:~$ ping compute-mygoogleendpoint.p.googleapis.com
PING compute-mygoogleendpoint.p.googleapis.com (123.123.123.123) 56(84) bytes of data.
username@instance-2:~$ ping storage-mygoogleendpoint.p.googleapis.com
PING storage-mygoogleendpoint.p.googleapis.com (123.123.123.123) 56(84) bytes of data.
gcloud で利用する場合は以下のようにします。
gcloud config set api_endpoint_overrides/compute https://compute-mygoogleendpoint.p.googleapis.com/compute/v1/
p.googleapis.com
を利用できない場合等は DNS で *.googleapis.com
を 123.123.123.123
に向けます。
username@instance-2:~$ tail -1 /etc/hosts
123.123.123.123 compute.googleapis.com
動作検証
gcloud compute instances list --log-http
VPC-SC
Target に VPC-SC を選択した場合は、以下のように www.googleapis.com
等へのアクセスは不可となります。
username@instance-2:~$ tail -1 /etc/hosts
123.123.123.123 www.googleapis.com
curl -sS -XGET https://www.googleapis.com/gmail/v1/users/me/messages
Error 403 (Forbidden)!!1
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- GKE における Node および Pod の autoscalingGoogle Kubernetes Engine (GKE) における autoscaling について、用語の意味を整理します。 GKE の機能による Node の autoscaling GKE のクラスタには Standard と Autopilot の二種類が存在します。 Autopilot の場合は Node は Google によって管理されるため、自動で autoscaling され...
- Snowflake におけるネットワーク関連の設定本ページではネットワーク関連の設定について記載します。 Network Policy によるアクセス元 IP 制限 IPv4 で指定します。IPv6 は 2021/9/21 時点では利用できません。 allowed list で許可されていない IP は block されます。 allowed list が /24 等で指定されており、その一部を
- AWS IAM Role を GCP から STS 認証で利用する設定例GCP から AWS IAM Role を利用するための設定例を記載します。 GCP Service Account の作成 Service Account を作成して Unique ID を確認します。 AWS IAM Role の作成 Trust relationship の設定は Web Identity を選択します。Identity Provider
- Amazon Comprehend を GCP VPC 内から実行する設定の例 (Public Internet 接続なし)GCP DLP に相当する AWS サービスに Amazon Comprehend が存在します。GCP VPC 内から Public Internet を経由せずに利用する設定の例を記載します。 AWS VPC と GCP VPC の作成 クラウド 項目 値 AWS VPC region ap-northeast-1 AWS VPC CIDR 10.2.0.0/16 AWS ap-north
- GCP IAP tunnel を HTTP プロキシを通して利用する場合の注意点IAP tunnel は、HTTPS トンネル内で TCP パケットを forward するための技術です。 この HTTPS トンネルは、ユーザと tunnel.cloudproxy.app の間で確立される WebSocket です。 そのため、IAP tunnel を HTTP プロキシ環境下で利用する際には、以下の二つに注意する必要があります。 tunnel.cloudproxy.app ...