モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

VPC Service Controls に関する雑多な事項の整理

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2021/08/01
最終更新最終更新
2024/04/18
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    Microservicesアーキテクチャを実践中!

    0
    ステッカーを贈るとは?

    VPC Service Controls (VPC-SC) に関する雑多な事項を記載します。

    Private Google Access の基本形

    Private Google Access は外部 IP を持たない VM のための機能です。
    VPC の機能ですが、VPC-SC と関連するため基本事項を記載します。

    Private Google Access

    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

    以下のいずれの経路であってもアクセスできます。

    1. restricted.googleapis.com 199.36.153.4/30
    2. private.googleapis.com 199.36.153.8/30
    3. インターネットに経路情報が広報されている 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.
    

    関連資料:

    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 における柔軟なルーティング設定が可能となります。

    1. restricted.googleapis.com 199.36.153.4/30
    2. private.googleapis.com 199.36.153.8/30
    3. インターネットに経路情報が広報されている Public IP
    4. 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 に対応したことが発表されました。

    参考資料:

    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.com123.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
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Microservicesアーキテクチャを実践中!

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事