分析基盤(Google Cloud Platform)に当社セキュリティ要件を適用

こんにちは、GMOあおぞらネット銀行でエンジニアをしているT.Kです。
前回のGoogle Cloud Platformに分析基盤を構築で分析基盤構築に触れましたが、今回はこの環境に適用したセキュリティに関してブログを書きたいと思います。
内容の方は、昨年当社グループで行われましたGMO Developer Day 2022で触れたセキュリティ部分の詳細となります。
適用した内容は当社基準の要件となります。
今回のブログの対応を行う事で、一旦要件は満たせていますが、改善点は多くある状況です。今後、より良い形に改善する事が出来れば、またブログで報告させて頂こうと考えています。

目的

当社セキュリティ要件は多くありますが、GCP側で対応する要件は下記7件が代表的なものになります。
今回は下記7要件を満たす事がミッションとなります。

1 GCPへの通信はセキュアな経路を利用出来る事
2 GCPへの接続元を限定出来る事
3 GCP上の全ての処理をモニタリングが出来る事
4 当社GCP環境からの外部通信を制限出来る事
5 GCPアカウントの権限管理が出来る事
6 GCP上のデータが暗号化出来る事
7 当社データが国内に保存される事

各要件への対応等

1. GCPへの通信はセキュアな経路を利用出来る事

セキュアな経路対応は、専用線やVPN等の利用を行う要件です。
対応自体は必要な対応や設定を進めればよいのですが、対応を行うことによる影響が想定以上に大きなものとなりました。

GCPコンソールはインターネット経由のアクセスを前提としているサービスとなります。つまりこの要件の対応を行う事で、GCPコンソールの利用が出来なくなると言う事になります。

一つ目から高いハードルではありますが、下記利用方針で対応を進める事にしました。

workbench GCP内に立てたwindowsサーバ経由でブラウザから利用
その他 gcloud CLIを利用
作業環境イメージ

上記、当要件の為に準備した開発環境構成イメージとworkbench利用手順になります。こちらの構成で、要件は満たしておりますが、利便性の面で改善の余地は大きいと感じています。

ⅰ. ネットワーク設定

利用環境に合わせて、"ネットワークサービス"や"VPCネットワーク"等を適宜設定

ⅱ. windowsサーバ準備

GCP内の踏み台として、"Compute Engin"の"VMインスタンス"からwindowsサーバを準備
 1. 『リージョン』で国内リージョンを選択
 2. 『ブートディスク』で"Windows Server 2022 Datacenter"を選択
  ※無料版の場合、同時接続可能ユーザは2名となるようです。
 3. 『IDとAPIへのアクセス』で"Compute Engine"と"ユーザ情報"を変更
 4. 『ネットワーク インターフェース』で作成した共有サブネットワークを選択
  ※不要であればSKIP可
 5. 『プライマリ内部IP』は"エフェメラル(自動)"、『外部IPv4アドレス』は"なし"を選択
  ※不要であればSKIP可
 6. 『Shielded VM』は全てチェック
  ※不要であればSKIP可

ⅲ. workbench準備

workbenchを"Vertex AI"の"ワークベンチ"から作成
 1.『リージョン』で国内リージョンを指定
 2.『Shielded VM』は全てチェック
  ※不要であればSKIP可
 3. 『ネットワーキング』で共有サブネットワークを選択、外部IPのチェックを外す
  ※不要であればSKIP可

ⅳ. 権限設定

windowsサーバからworkbenchにアクセスする為、必要に応じて権限を付与
下記、参考権限ロール
 ・Compute インスタンス管理者(v1)
 ・Compute 閲覧者

ⅴ. VPC Service Controls設定

『制限付きサービス』と『上り(内向き)ポリシー』にnotebooks追加

ⅵ. アクセス確認

 1. 利用端末からwindows serverへアクセス
   - 接続先IP情報はネットワークを確認
   - ログイン情報はwindows serverの"WINDOWSパスワードを設定"から取得
   ※RDPなので、基本ポートは『3389』
 2. アクセスしたwindows serverで"Google Cloud SDK Shell"を起動
 3. 下記、コマンドを実行

gcloud compute ssh  --project 【notebookが立っているプロジェクトID】
  --zone asia-northeast1-a  
  【notebookインスタンス名】 
  --internal-ip  
  -- -L 8080:localhost:8080

 4. ブラウザから『localhost:8080』にアクセス

2. GCPへの接続元を限定出来る事

コチラはよくある設定ですが、当社環境へアクセス可能なIPを制限する設定となります。
当社ではべスプラを参考に本番と開発フォルダを作成し、其々にプロジェクトを配置するような構成としたので、接続元の設定は各フォルダレベルで設定を行いました。

ⅰ. アクセスを許可するIPを設定

接続元IPの設定は"Access Context Manager"で設定可能
許可・不許可の双方で設定可能だが、今回の要件では許可対象を登録

ⅱ. アクセス制限を掛ける為のグループを作成

グループ作成後、基本全てのアカウントを作成グループに追加

ⅲ. 許可対象IPとグループの紐付け

設定直後から、グループに所属するアカウントは指定IP以外からのアクセスが不可となるので注意して設定

3. GCP上の全ての処理をモニタリングが出来る事

こちらの要件は、GCP上の全操作ログを保存するとなります。
GCPではデフォルトでほぼすべてのログは収集されていますが、当社ではログ収集プロジェクトを作成したので、こちらに関して紹介させて頂きます。

ログ取集イメージ
ⅰ. ログ集約用のプロジェクトとバケット作成

プロジェクトとバケットを作成
ログの保存期間はバケットの"ライフサイクル"で設定できます。

ⅱ. ログシンク設定

"ロギング"、"ログルーター"から"シンクの作成"を選択

ⅲ. ログ書き込み権限付与

ログ収集イメージのように外部プロジェクトにログを保存する場合、シンクのサービスアカウントに対して、ログ保存先プロジェクトでログバケット書き込み者ロールを付与する必要があります。
シンクが利用するサービスアカウントは"シンクの詳細"から確認できます。

4. 当社GCP環境からの外部通信を制限出来る事

こちらの対応は、許可されたアカウントやサービスのみが当社境界を超えられるための設定となります。
こちらの対応には"組織ポリシー"と"VPC Service Controls"を利用しました。
大枠を前者で、詳細を後者で設定しているイメージとなります。

組織ポリシー

組織ポリシーは種類が多い為、1件ずつは触れていきませんがGCSの公開制御VMへの外部IP付与制御などは適宜設定を行いました。
また、当社GCP環境は分析基盤としての利用を想定しているので、Vertex AI Workbench ユーザー管理ノートブックの機密データの保護も参考に設定を行いました。

VPC Service Controls

VPC Service Controlsでは、境界に含めるプロジェクトやサービスを設定し、必要な境界の内外通信を許可していく感じで設定を行いました。
設定はコチラを参考に行っています。

5. GCPアカウントの権限管理が出来る事

こちらは基本的な機能になりますが、各アカウント毎に利用可能機能を制限する設定となります。

GCPでは非常に細かく権限管理を行う事ができますが、GCP側で利用シーンを想定したロールを多く設定されているので、基本的には必要に応じてコチラを利用する形で良いと考えています。
ただ過剰権限も多く出てしまうので、独自ロールを作成するのが理想だとは感じていますが、数千に及ぶ権限すべてを理解して適切に設定する自信が持てないので、現在はデフォルトロールを利用する事にしました。

GCPでは各アカウントに対して権限付与する事も可能ですが、当運用効率を考慮して権限はグループに対して付与する方針としています。
グループ単位とする事で、利用者の増減時にはグループへの追加・除外のみで対応する運用となります。

6. GCP上のデータが暗号化出来る事

こちらは万が一時に備えて、全てのデータを暗号化して保存すると言う事になります。
GCPでは、デフォルトで全て暗号化される為、特に変更等を行わず利用しています。
利用する暗号鍵を利用者側で変更する事は出来ますが、暗号化を行わない設定は無いかもしれません…

7. 当社データが国内に保存される事

こちらは、利用するサービスで選択可能なリージョンを国内リージョンに限定する設定となります。
組織ポリシーの”Resource location Restriction”で対応
少し設定が特殊の為、コチラを参考に設定

結果

今回のセキュリティ要件自体はGCPの機能を利用して対応することが出来ました。
実際に設定を行ってみる事で、今後の改善点なども明確になったので、引き続き改善を行っていきたいと考えています。

要件
対応可否
1. GCPへの通信はセキュアな経路を利用出来る事
設定
2. GCPへの接続元を限定出来る事
設定
3. GCP上の全ての処理をモニタリングが出来る事
対応ほぼ無し
4. 当社GCP環境からの外部通信を制限出来る事
設定
5. GCPアカウントの権限管理が出来る事
設定
6. GCP上のデータが暗号化出来る事
対応無し
7. 当社データが国内に保存される事
設定

まとめ

GCPの機能を利用して、今回の要件を満たす事は出来ましたが、一分対応の影響で想像以上に悩まされてしまった結果となりました。
セキュリティ対応を行うタイミングを分析基盤構築の後半まで対応を引っ張ってしまった事で、大きな影響が出てしまった事は大きな反省点と考えています。
一方でゼロベースで開始した取り組みに対して、どのタイミングでセキュリティ対応を実施すればよかったのかと言う問いの納得する回答はまだありませんが、対応が早ければ早いほど影響は小さいと感じています。
今後も多くの気づきと反省・改善の繰り返しになると思いますが、より有効に利用できるよう日々改善を進めて行きたいと思います。