この記事は株式会社エス・エム・エス Advent Calendar 2024の4日目の記事です。
エス・エム・エス BPR推進部 データ基盤チームの橘と申します。
私は「ナース専科 転職」等のキャリア事業を中心に、社内のデータ活用の推進、データ基盤の開発運用を担当する、データエンジニアの役割を担っています。
はじめに
キャリア事業のデータ基盤は、Google Cloud 上に、BigQuery を中心に構築しています。 近年、データ活用の需要はますます拡大し、事業部門がTableauやQuickSightなどのBIツールを介してデータ基盤を利用したり、Google スプレッドシートや BigQuery Studio からSQLを実行しての分析等が進んでいます。
データ基盤の活用を推進する中で、以下を目指し日々運用をしています。
- 必要なデータがどこにあるかがわかる(Discoverable)
- 必要な人が必要なデータにすぐにアクセスできる(Addressable)
- セキュリティやガバナンスが守られている(Secure)
昨年のAdvent Calendar の記事は、上記のDiscoverable、Addressableを達成するための手段の1つでした。
今回は、AddressableとSecureを実現する、権限管理について触れたいと思います。 キャリア事業は複数のサービスを抱え、サービス内に複数の活用できるデータが眠っています。データ基盤の拡大とともに、Google Cloud のプロジェクトも複数となり、BigQuery のデータセットだけを見ても、多数に分割して管理されています。
煩雑化と属人化が進みつつある権限管理を昨年見直し、運用をしてきましたので、その事例をご紹介します。
データ基盤における権限管理
私たちのデータ基盤は、Google Cloud のプロジェクトのIAM、BigQuery やCloud Storage などのデータへの読み書きのアクセス権限、App Engine アプリケーションへのアクセス権限など、複数個所での権限設定を運用しています。キャリア事業にかかわる社内のあらゆるデータを蓄積しているため、ユーザー側の見れるデータ、編集できるデータを最小限にするためにポリシーを設けて、データ基盤管理者がポリシーに沿って適切な権限を設定していく運用を続けています。 従来は、データ基盤管理者数名で、依頼ベースでGoogle Cloud のコンソール上から手動での権限設定の対応を行ってきました。権限設定自体はGUI上でも簡単にできますが、以下の問題がありました。
- 変更履歴を管理できない
- 複数人複数個所の設定が手動での運用だと大変
- 権限設定を依頼する人は権限を操作する権限を持たないため、変更箇所の指定をしにくい
上記を解消するために、構成管理ツール、Terraform を昨年度に導入しました。 元々データ基盤では管理するリソースが多くもなかったのでTerraformを導入していなかったという背景がありました。Cloud Storage のバケット毎、BigQuery のデータセット毎の権限設定等を目的にTerraformの導入をし、付帯的にインフラの構成管理としての導入も進めました。 導入から1年ほど経ったので具体的な構成や導入後のメリットをご紹介します。
Terraformの構成
まず、Terraformのディレクトリ構成としては以下になります。
. ├── modules/ │ └── 共通モジュールなど └── projects/ ├── プロジェクト1 │ ├── resources/ │ │ ├── bigquery.tf │ │ ├── cloud_storage.tf │ │ ├── iam.tf │ │ ├── members.tf │ │ ├── service_account.tf │ │ └...他リソースごとのtfファイル │ ├── .terraform.lock.hcl │ ├── main.tf │ └── variables.tf ├── プロジェクト2/ └...以降プロジェクト毎のディレクトリ/
キャリア事業のデータ基盤として複数のGoogle Cloud のプロジェクトがあるため、複数プロジェクトを一元管理できる構成としています。
projects/[実際のプロジェクトID]/resources
配下には、biguery.tf
、cloud_storage.tf
などのリソース毎の定義ファイルを置いてます。例えば、bigquery.tf
は、BigQuery のデータセットごとのリソース管理と、データセットのReaderやWriterの定義を管理しています。
Google Cloud の権限は、GoogleグループやGoogleアカウント毎に定義が可能ですが、権限管理の目的内でのグルーピングができるように、member.tf
を作成しています。この中でlocal変数として、GoogleグループやGoogleアカウントをリストで定義して、各リソースに設定できるようにしています。
運用フロー
まず、ユーザー部門がデータ基盤チーム宛に、権限設定の依頼をします。具体的に見たいBigQueryのデータセットを書いて依頼をしたり、業務上どういうデータを分析したいかなどの抽象的な相談をしたりします。 その要求をデータ基盤チームの開発者が受け取り、必要であればユーザー部門に業務のヒアリングを行い、Terraformのコードを書いてGitHubのプルリクエストを作成していきます。 プルリクエストをデータ基盤管理者がレビュー・承認することで、権限設定ができる仕組みとしています。
導入してから変わったこと
- いつ、誰に、どういう目的で、何の権限設定をしたかを把握できるようになった
- 複数プロジェクトまとめての権限の棚卸しがしやすくなった
- テキストエディタ上で設定を記述するため、AIによる自動入力の支援を得られるようになった
- ユーザー側の要求によってどの権限が必要かのレビューがしやすくなった
- 今まではデータ基盤管理者のみが権限を把握していたが、Terraformのコードを書く開発メンバーも、データ基盤の権限構成を理解できるようになった
など複数のメリットがありました。 特に後者の2つはデータ基盤の管理の属人化を避けるためにも効果的で、データ基盤”チーム”として運用をしていく体制が確立したと思います。
まとめと今後の展望
以上、データ基盤における権限管理についてご紹介しました。BIや生成AIの発展とともに、ますますデータ基盤の利用機会も増えてきました。データのAddressableとSecureを加味した適切な運用はこれからも継続して見直していきたいと考えています。
エス・エム・エスは新しいメンバーを募集しています。 私達データ基盤チームでは、今回ご紹介したデータ基盤の運用から、データパイプラインの開発、データマートやダッシュボードの開発、AIを用いたソリューションの提供など様々な業務を通して事業を支援しています。 弊社の事業に携わってみたい方、興味のある方は、ぜひこちらのページものぞいてみてください。