セキュリティガードレールを作って、非エンジニアに安心してGCPを提供できるようにした話

はじめまして、モノタロウでGCPの管理をしている吉本です。
今回はモノタロウの社内全体でデータ基盤として使っているGCPをテーマに、大規模組織におけるクラウド運用の取り組みをお話します。

データ民主化による現場主導のデータ活用

最近、データの活用・推進が様々な企業で実施されるようになってきました。
特に2018年あたりからデータ民主化と呼ばれる、職種に問わず自らデータを集計・分析して意思決定をする文化が広まるようになった結果、非エンジニアがSQLを書く事例が増えています。*1 *2

モノタロウでも職種問わずデータドリブンな意思決定を推進しています。

2017年にデータ基盤をBigQueryに構築して以降、積極的にSQLなどの研修などを行うことで、
エンジニアに限らず営業、経理、商品開発、物流管理、マーケター、データサイエンティストなど幅広い人がSQLを使ってデータを分析しています。

具体的な数値として2021年3月現在、
社員の約6割がBigQueryでクエリを実行しています。(クエリ実行数は270万/月) *3

またモノタロウではデータを分析するだけに限らず、業務への活用にも積極的に取り組んでいます。
そのため、非エンジニアもGASを使ったり、GCPのAutoML TablesやVertex AI(元AI Platform)などの機械学習サービスを利用しています。 *4

例えば、プロモーションの最適化や需要予測などをGCP上に構築、運用しています。

クラウドの利用拡大に伴う課題

このように、モノタロウでは職種に問わず幅広い領域でGCPの利活用を推進しています。 ですが、利用の拡大に伴いセキュリティや管理コスト面での課題がでてきました。

上記のようにGCP利用のユースケース・業務が幅広く、日々利用も拡大しているため、
各業務の利用者や用途に合わせた統制や権限を集中管理しようとするとかなりのリソースを割かなくてはなりません。 その一方でむやみに機能を制限しすぎると利用者が使いづらくなってしまいます。

そのため、業務単位でプロジェクトを作成し、担当者に大きめの権限を付与することでプロジェクト単位で管理を移譲するようにしました。

しかし、GCPはサービスも多く設定も複雑なため、使い方を誤ると

  • BigQueryで誤ってデータ処理量の大きいクエリを投げることで多額の請求が発生する
  • ストレージサービスに保存しているファイルの設定を誤って世界中に公開される

などのリスクがあります。

こういったようにモノタロウではGCP利用拡大とセキュリティの担保、ならびに管理コストを抑えたいというジレンマをかかえていました。

Cloud Asset Inventoryを利用したセキュリティガードレールの構築

上記の課題解決に際し、セキュリティガードレールを参考にしました。

セキュリティガードレールとは、

積極的なクラウドの利用拡大を担保しつつセキュリティの品質を担保するために、
社内でクラウド利用のルールを定義し、 それが守られていない領域を制限あるいは検知できるようにする

という考え方です。

セキュリティガードレールの例: engineering.visional.inc

speakerdeck.com

この考え方に基づいて以下を実施しました。

制限:GCPの組織ポリシーの設定*5

検知:モノタロウ独自で決めたセキュリティポリシーに違反している項目の検知ツールの構築

ここからは社内で自作した検知ツールについて紹介します。似たようなことができるサービスやツールとしてSecurity Command CenterやForsetiなどがありますが、
金額面やガードレールとなるルールのカスタマイズ性を考慮しツールを自作することにしました。

このツールのポイントとして、GCPでどの機能をどのような設定で動いているか把握する必要がありました。
この課題を解決するGCPのサービスとしてCloud Asset Inventoryがあります。

*6

Cloud Asset Inventoryは専用のAPIにアクセスすることで指定した組織全体の各プロジェクトで使われているサービスや、設定情報を取得することができます。
また取得した情報をBigQueryに出力することで、SQLを使った集計・分析も可能です。

この機能を使って定期的にGCPの設定状況をBigQueryに出力するとともに、
社内でセキュリティ違反になる設定をクエリで定義しておき、定期的にスキャン、違反通知を行うようにしました。

具体的な処理としてはGKEクラスタ上に構築されているArgo Workflowを使って以下のワークフローを定期的に実行しています。

f:id:namusic701042:20210616171140p:plain

  1. Cloud Asset InventoryにアクセスしてデータをBigQueryに出力する(CAI Data)

  2. セキュリティ違反になるルールのクエリ(Scan Rule View)を実行し、集計結果をテーブルとして保存(Scan Result)

例:BigQueryで定額料金に入っていないプロジェクトの一覧を集計する Scan Rule View(特定のプロジェクトを除く)

WITH reservation_assignment_list AS (
   SELECT
       project_id AS reservation_project_id,
       assignee_id AS project_id
   FROM
       `.region-us`.INFORMATION_SCHEMA.ASSIGNMENTS_BY_PROJECT
   WHERE
       assignee_type = "PROJECT"
)
, project_list AS (
   SELECT
       record_time,
       JSON_EXTRACT_SCALAR(resource.data, '$.projectId') as project_id,
       ancestor_path,
       JSON_EXTRACT_SCALAR(resource.data, '$.lifecycleState') as lifecycle_state,
   FROM
       <Cloud Asset InventoryのIAM Policyの出力テーブル>
   WHERE
       asset_type = 'cloudresourcemanager.googleapis.com/Project'
)
, project_list_exclude_gas_or_non_active AS (
   SELECT
       *
   FROM
       project_list
   WHERE
       NOT REGEXP_CONTAINS(project_id, '^sys-') -- GAS 用プロジェクトは除外
   AND
       lifecycle_state = "ACTIVE"
)
SELECT
   project_list_exclude_gas_or_non_active.record_time,
   project_list_exclude_gas_or_non_active.project_id,
   project_list_exclude_gas_or_non_active.ancestor_path,
   project_list_exclude_gas_or_non_active.lifecycle_state
FROM
   project_list_exclude_gas_or_non_active
LEFT JOIN
   reservation_assignment_list
USING
   (project_id)
WHERE
   reservation_assignment_list.project_id IS NULL
AND
   project_id NOT IN (
      <オンデマンド対象のプロジェクト>
   )
ORDER BY ancestor_path

スキャン結果から違反になっている設定と件数をSlackに通知

f:id:namusic701042:20210616171208p:plain

このツールによって最低限守るべきポリシーに対して違反となっている設定があるか検知することができ、
検知したものをGCP管理担当者が即座に確認・対応ができるようになりました。

現在ではGCPプロジェクトが増えた場合でも安心してGCPの管理統制をとることができるようになっています。

まとめ

エンジニアに限らず、多くの人が利用するクラウドにおいて発生するセキュリティリスクに対して、
利便性やスピード感を担保しながら統制をとるためにセキュリティガードレールを構築することで解決しました。

ただこれでクラウドの管理がなくなることはなく、

  • リアルタイムでのセキュリティ検知
  • クラウドのコスト最適化

など多くの改善点があります。モノタロウではこうした大規模組織におけるクラウド管理をエンジニアリングで解決していきたい方の応募をお待ちしております。

*1:メルカリさんやPaizaさんなどデータの民主化に取り組んでいる事例があります。
データ分析は、アナリストだけの仕事じゃない。メルカリの「データ民主化」の進め方 | SELECK [セレック]
企画や営業など非エンジニア職がSQLを勉強したらメリットばかりだった話 - paiza開発日誌

*2:非エンジニアを対象にしたSQLによるデータ分析の本も発売されています。
集中演習 SQL入門 Google BigQueryではじめるビジネスデータ分析(できるDigital Camp) - インプレスブックス

*3:サービスアカウントによる実行分は入っていないため、間接的にBigQueryを使っている人も合わせるとさらに増えます。

*4:モノタロウでデータを業務で活用している方のインタビューや事例などを公開しています。 常識破りのデータドリブン企業・モノタロウが分析から施策までを直結させ、PDCAを3倍速にできた理由 | CX Clip
GCPで飛躍するデータ活用とリアーキテクチャリング! モノタロウの急成長を支えるECシステムの舞台裏【デブサミ2020】 (1/2):CodeZine(コードジン)
大規模ネット広告をグロースハックする-Webマーケターの1年間の挑戦|株式会社MonotaRO(モノタロウ)|note

*5:GCPの組織ポリシーについて:
組織ポリシー サービスの概要  |  Resource Manager のドキュメント  |  Google Cloud

*6:Cloud Asset Inventoryについてはこちらを参照ください。
Cloud Asset Inventory  |  Google Cloud
Google Cloud のイケてる(ような気がする)サービス・機能のご紹介 | google-cloud-jp