VPC Service Controlsを設計/実装する

  • Google Cloud
  • セキュリティ
  • 運⽤管理
  • ネットワーク
  • エンジニア

投稿日:

はじめに

こんにちは。クラウドアーキテクトの山下です。今回はVPC ServiceControlsを実際にユースカジノ twitterしていきます。

VPC Service ControlsはGoogleCloud内のプロジェクト毎のAPIとVPCをユースカジノ twitterを定義してアクセス制御をL7ネットワークで実現できるサービスです。ユースカジノ twitterを定義して保護したいプロジェクト、APIとVPCを登録していくもので非常にシンプルな構成になります。

しかし、ユースカジノ twitterに含まれていないものはコンソールを操作するユーザーであってもリソースを操作するサービスアカウントであっても一切通信が行えなくなります。そのため、通信が成立するためにユースカジノ twitterに穴を開けていきます。具体的な設定方法についてこの記事で触れていきます。

画面イメージ

通信設計

まずはプロジェクトのAPI, VPCの通信経路、連携するサービスを特定する必要があります。どの通信を許可して、どの通信は許可されないのかを決める必要があります。この設計内容によって通信制御内容が変わるためです。

考えるべき観点

以下の観点で通信を整理していきます。構成図も設けるとよりイメージがしやすいので、機能要件/非機能要件を満たす設計を行った最後にこちらを行うとより手戻りが少なくなりおすすめです。

また、観点としてはGoogleCloudのプロジェクト外部かどうかになります。プロジェクト外部なのでマネジメントコンソールもCLIも対象となるのがポイントです。

誰が? どこから? どこに? 何をする?
管理者 自社端末 GCPコンソール プロジェクト内の
リソース管理
Cloud
Functions
プロジェクトBの
サービスアカウント
プロジェクトAの
GCSバケット
GCSバケットに
オブジェクトを
アップロードする

ユースカジノ twitter方法

前提

  • GoogleCloudの組織が必要となります。組織を構成した上でこちらをユースカジノ twitterしていきます。
  • 権限も組織スコープで実施する必要があるため、組織管理者が実施するのか各プロジェクト担当者に最低限の権限を解放してユースカジノ twitterさせるのかは規模や運用方針に依ります。
  • また、特定のIPアドレスや地域からのアクセスを指定したい場合はAccessContextManagerでの許可ユースカジノ twitterを予め作成します。

実際のユースカジノ twitter

コンソールにて組織を選択した上でVPC Service Controlsと検索しサービスを選択する。

画面イメージ

ユースカジノ twitterを作成する

VPC Service Controlsはドライランモードで「新しいユースカジノ twitter」をクリックします。

※ポリシーを分けて定義することも可能ですが、1組織で統制をかける場合はdefaultをそのまま指定でも問題ないです

画面イメージ

ユースカジノ twitterの種別を選択する

ユースカジノ twitter名を入力し、ユースカジノ twitterのタイプで標準ユースカジノ twitter(デフォルト)を選択します。

ユースカジノ twitterブリッジは特定のサービス間の通信制御で利用できるものですが、基本的には標準ユースカジノ twitterの方がより細かいアクセス制御が行えるので推奨です。

画面イメージ

ユースカジノ twitterの範囲を定義する

ADD RESOURCESでユースカジノ twitterに含める対象を選択します。

対象リソースはプロジェクトとVPCを選択する事ができますが、以下の2点考慮事項があります。

考慮事項

  • プロジェクトは複数を指定する事ができる
    ユースカジノ twitterにプロジェクトを複数含める事が出来るため、複数プロジェクトで成立するサービスを構成している場合は複数指定もありです。ただし、後述の上り/下りポリシーで通信を制限する事も出来るため、より厳密に定義したい場合は1プロジェクトのみをユースカジノ twitterに入れるようにします。
  • ユースカジノ twitterできるプロジェクトとVPCの関係
    プロジェクトAにVPC-Aが存在しユースカジノ twitterに入れたい場合、保護するリソースに両方を登録する必要があるように一見見えますが、その必要はありません。プロジェクトを保護対象に指定した時点でそのプロジェクトが持つVPCもユースカジノ twitterに含まれます。VPC NETWORKを使うポイントは別プロジェクト全体をユースカジノ twitterには入れたくないが、別プロジェクトの特定のVPCだけユースカジノ twitterに入れたい場合に利用します。
画面イメージ

ユースカジノ twitterで公開/非公開にするAPIを選択する

ユースカジノ twitterで保護するAPIを選択します。外部へ無制限に公開するAPIがない限りはすべてのサービスを追加をクリックします。こちらも後述の上り/下りポリシーでAPIの特定の操作のみ外部公開する設定を行えるので、基本的には全てのサービスを含める事を推奨します。

画面イメージ

VPC-API間の通信制御方法を選択する

VPCから保護したAPIにアクセスする際の許可/拒否をユースカジノ twitterします。基本的にはすべてのサービスまたはサービスなしを選択します。

ここまでと同様に特定のAPIを外部に公開したい場合やアクセス制限したくない場合にこちらのユースカジノ twitterを行います。ひとつ前のユースカジノ twitterで外部に対してAPIが公開されなくなったため、VPCからAPIにアクセスするにはパブリック通信経由ではアクセスできず、限定公開を通じてしかアクセスできません。

また、VPCから限定公開を通じてアクセスする事を許可するのか、許可しないのか、特定のAPIにだけ限定公開でのアクセスを強制化させるのかを選択できます。一切VPCを用いずサーバレスのみやPaaSのみを利用する場合はサービスなしを選択すると良いでしょう。

画面イメージ

AccessContextManagerのアクセス制限を適用する

ユースカジノ twitterの外からの通信(Ingress)についてACMで許可された通信内容が適用されます。次の上り(内向き)ポリシーでもIngress通信の許可設定を行う事も出来ますが、ここでACMが設定されている時点でACMの許可内容を満たすものであれば通信が無制限に行えます。

例えば、ACMで管理者の端末やVPNのIPアドレスを登録しておけば、追加ユースカジノ twitterなしにプロジェクトにそのIPアドレスからであればアクセスできます。GoogleCloud外部からの通信でIPアドレスベースでの通信を許可したい場合はこのユースカジノ twitterを行いましょう。

画面イメージ

上りポリシー(Ingress)をユースカジノ twitterする

こちらもユースカジノ twitterの外から通信を定義する項目になります。ACMとは異なり、より細かく特定のPrincipal(アクセス元が誰か)を指定する事が出来ます。

またこのPrincipalがどのAPIのどの操作を行えるかをここでユースカジノ twitter出来ます。

VPC Service Controlsはホワイトリスト形式のため、APIに対しての許可ユースカジノ twitterをここで入れていきます。

画面イメージ

Principalに指定出来るのはGoogleアカウント/グループとService Accountになります。

任意のIDを選択するとユースカジノ twitterがないのと同じ状態になります。特定のゴールデンイメージやコンテナイメージ、パッケージをプロジェクト間で共有したい場合など不特定多数かつ、今後利用が拡大する事が予想されるAPIのみに許可を与える場合に有用です。

任意のユーザーアカウント/サービスアカウントはそれぞれのアカウントへ無制限の許可を与えます。マネジメントコンソールにアクセスするユーザーは制限はしない場合や、サービスアカウントにだけ特定のAPIの閲覧操作だけを開放する場合に用います。

IDとグループを選択を指定する場合は特定のGoogleアカウント/グループ、Service Accountに限定出来ます。より細かな制御を行う場合はこちらをユースカジノ twitterします。

一方、ACMでIPアドレスが指定されていてそのIPアドレスからアクセスされる場合は、ここで明示的にユースカジノ twitterしなくてもアクセスが許可されています。マネジメントコンソールやプロジェクトのAPIへのアクセス許可ユースカジノ twitterは別途不用です。

画面イメージ

そして接続するプロジェクトとプロジェクトのAPI、そのAPIに対する操作権限をここでユースカジノ twitterします。APIの全操作権限を渡す事も全APIへのアクセス権を渡す事も可能です。よりセキュアにするのであれば、開放するAPIと操作を限定するのが望ましいです。

画面イメージ

下りポリシー(Egress)をユースカジノ twitterする

最後にユースカジノ twitterの外への通信を定義します。こちらもホワイトリストなので外部への通信がある場合は許可設定を定義する必要があります。

Egressの通信はIngress同様にどのPrincipal(誰)がどのAPIのどの操作が行えるかを定義できます。ただ、どのAPIとどの操作かというのはあくまで通信先がGoogle Cloudである事を想定したものになります。Google Cloudでない場合は外部のリソースを指定する必要があります。

画面イメージ

アクセス元のPrincipal(ID)をIngressと同様にユースカジノ twitter出来ます。内容は変わらず、Googleアカウント/グループ、ServiceAccountの指定になります。

一点考慮すべきなのはこれらはユースカジノ twitterの中に存在するものという事です。ユースカジノ twitter内のユーザーアカウントが外部に対して何か行うというケースはあまりなく殆どService Aacountがこちらの対象になる項目です。

画面イメージ

ユースカジノ twitter外部がGoogle Cloudの場合は許可するAPIと操作をこちらで定義します。ユースカジノ twitterからユースカジノ twitterに対して通信する時はそれぞれの許可設定でIngress/Egressを定義する必要があります。

画面イメージ

接続先がGoogle Cloudではない場合は以下のように外部接続先を指定出来ます。AWSとAzureのオブジェクトストレージのバケット/コンテナが現在サポートされています。

画面イメージ

まとめ

AWS/AzureのVPCエンドポイントに代わる、かつ、それらよりもよりAPIに特化してさらにアクセス制限を行えるサービスです。

しかし、そのシンプルさと全体に適用できる運用性とは裏腹にIngress/Egressのルールユースカジノ twitterを適切に行わないと通信が全く行えない状態になりかねません。

ユースカジノ twitterをどこまでに設定するのか、どのAPIを制限するのか、ユースカジノ twitter外の登場人物(Principal)を列挙し何をするのか、これらを設計して初めて構成が可能となります。

一方で、気づかない見落としていた通信内容も中にはあります。これを防ぐためにドライランモードを利用する事が出来ます。ドライランモードとデバッグ方法についてはまた別の回で紹介したいと思います。

次回予告

次回は VPC Service Controls をデバック / 許可内容の確認についてご紹介します。

著者紹介

伊藤忠テクノソリューションズ株式会社 山下 大貴

伊藤忠テクノソリューションズ株式会社
山下 大貴

ITアーキテクトとしてテレコム,Webサービス事業者様向けにプリセールス/システム導入に従事。AWS/Azure/GCPでのシステム設計からDevSecOps/コンテナ、MLOps、セキュリティ関連案件にも従事。

Pickup