はじめに

前回、限定公開のGoogleアクセスについて記載しましたが、同じセキュリティに関連するサービスとして、今回は外部からのGoogleのAPI実行について制限するVPC Service Controlsについて記載します。

概要

VPC Service Controlsとはサービス境界を定義し、特定の条件を満たさない場合のAPIに対するアクセスを禁止することが可能です。また異なるプロジェクトからアクセスした場合、サービス境界ブリッジを定義することで、別な境界からのアクセスを許可することも可能です。

https://cloud.google.com/vpc-service-controls/docs/overview?hl=ja

イメージ図

この図ですと緑の洋服を着た人はいくつかの制限をくぐり抜けAPIアクセスできております。
ただ、赤い眼鏡の人は許可IPの時点で弾かれてしまいアクセスができない状態になっております。

それぞれ何がどういった制限になっているか後続で記載します。

VPC Service Controls の内容

ここ以降にイメージ図に記載したような内容はどう実現されていたか、を記載します。

Access Context Manager

アクセスレベルを定義することができるサービスです。
画面上、以下のような形で定義が可能です。
今回イメージ図のような許可を行いたい場合、IPサブネットワークにIPアドレスを登録する形になります。
ここで定義したアクセスレベルをVPC Service Controlsでは利用することになります。
プレミアムをすることでデバイスポリシーを利用した制限が可能になります。

https://cloud.google.com/access-context-manager/docs/overview?hl=ja

VPC Service Controls

今回の実現したい内容を行うための肝のサービスとなります。

https://cloud.google.com/vpc-service-controls/docs/use-access-levels?hl=ja

制限に関わる部分のみ設定画面をスクリーンショットはります。
①対象プロジェクトないし対象VPCを設定
以下「ADD RESOURCES」にてプロジェクトを追加することで対象プロジェクトに対する境界が追加できます。

②保護するサービスを設定
境界を対象にするサービスを絞ることができます。
なお、全サービスを対象にする場合、Google Cloud 自体のサービスが増えると、追加する必要がありそうです。

③VPCからアクセス可能なサービス
VPCからのアクセスについてはどのサービスも限定公開アクセスを利用するよう、基本的には「すべての制限付きサービス」を選択します。


④お待ちかねのIPアドレス制限
Access Context Manager で設定したIPアドレスを許可しそれ以外は拒否するよう、ここではAccess Context Managerで設定したアクセスレベルを選択します。図内の赤い眼鏡の人を弾きます。


⑤内向きのポリシーとしてプリンシパルを指定する
ここが吹き出し上、許可プリンシパルにあたります。
APIクライアントのFROM属性のID箇所には選択したIDとし、対象のプリンシパルを選択します。
ソースについては、基本的にはAccess Context Managerで許可したアクセスレベルを選択します(図内の赤い眼鏡の人を弾きます。)。
TO属性箇所のサービスやリソースは今回絞る必要はなくすべてのサービス、すべてのプロジェクトが設定する値となります。


⑥完了
以上で必要箇所の設定が完了しました。
設定後の画面としては以下のような形になります。
プロジェクトに対して、あるアクセスレベルで、上り通信をIDで許可する、という形です。

挙動確認

例えばアクセスできない場合、以下のようにリクエストを実行できない旨、出力されます。


なお、アクセス可能な条件が揃うと以下となります。

所感

それほど難しくなくプロジェクト内のリソースに対するAPI制限を行うことができました。APIを制限するような仕組みが必要な場合には活躍するサービスかと思います。また、プロジェクト間のサービスもブリッジ境界を組むことで許可できたり、対象APIによって制限を変えたりと、制限対象に合わせて柔軟に調整することが可能です。
ただ、VPC Service Controlsでの制限に対応しているAPI、していないAPIがあるので、必ずすべてを網羅しようとするとできない点が出てくると思います、そのため、制限という観点ではIAMに付与する権限については、引き続き気にしなければならない点となりますので、注意ください。
もともとのセキュリティ制限の思想の違いだとは思いますが、AWSではこういったものが対象サービス内での制限やIAMでの制限になってくると思うので、Google Cloudでは制限可能なサービスがあるという点で差別化できる点かと思います。