Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

マルチデータプロダクト基盤としての Snowflake の権限管理とコスト管理

Kosaku Ono
August 21, 2024
2.1k

マルチデータプロダクト基盤としての Snowflake の権限管理とコスト管理

「みんなの考えた最強のデータ基盤アーキテクチャ2024前半おまとめ拡大版SP!」の発表スライドです。
https://datatech-jp.connpass.com/event/319827/

Kosaku Ono

August 21, 2024
Tweet

Transcript

  1. © 2024 Finatext Holdings Ltd. ナウキャストにおける Snowflake の権限管理とコスト管理を紹介します! 3 Service

    Role 層 Warehouse Account Role Service_R Database Warehouse Account Role Service_RW Access Role 層 System User 2 Human User A Human User B System User 1 Database Role table-create Database Role table-select tables views Database Role view-create Database Role view-select Functional Role 層 Warehouse Account Role Service_RW Warehouse Account Role Service_R Database Role ReadWrite Database Role Read
  2. © 2024 Finatext Holdings Ltd. アジェンダ 1. 自己紹介・会社紹介 2. Snowflake

    の権限・コストの基礎 3. ナウキャストの権限管理・コスト管理の変遷 4. Appendix 4
  3. © 2024 Finatext Holdings Ltd. 1. 自己紹介・会社紹介 自己紹介 • 名前:大野巧作

    ◦ 大体けびんと呼ばれています ◦ X / GitHub / Zenn / SpeakerDeck などは @Kevinrobot34 • 役職:Data Engineer / Data Platform Engineer @ Nowcast ◦ POSデータのパイプライン作成・運用 ◦ Snowflake x dbt x Terraform な社内データ基盤構築・運用 ◦ 2020年卒の社会人5年目です • 最近興味のある技術 ◦ Apache Iceberg 5 会社のメンバーでSnowflake Summit に行った時の写真→
  4. © 2024 Finatext Holdings Ltd. アジェンダ 1. 自己紹介・会社紹介 2. Snowflake

    の権限・コストの基礎 3. ナウキャストの権限管理・コスト管理の変遷 4. Appendix 8
  5. © 2024 Finatext Holdings Ltd. 2. Snowflake の権限・コストの基礎 Snowflake における権限管理

    - RBAC オブジェクトの権限はロールに付与され、ロールはユーザーに付与される、という形で権限管理する 9 https://select.dev/posts/snowflake-roles より GRANT USAGE ON DATABASE DBA; TO ROLE RA; GRANT ROLE RA TO USER UA;
  6. © 2024 Finatext Holdings Ltd. 2. Snowflake の権限・コストの基礎 ロールの階層と継承 Snowflake

    のロールは階層構造を作ることができ、 あるロールの権限は親のロールに権限が継承される。 つまりあるロールの実際の権限は、 自身とその子孫のロールで grant されている 権限の和集合。 → Snowflake での権限管理は   ロールとその階層構造の作り方が重要 10 https://docs.snowflake.com/ja/user-guide/security-access-control-overview より
  7. © 2024 Finatext Holdings Ltd. 2. Snowflake の権限・コストの基礎 ウェアハウスとコスト Snowflake

    では仮想ウェアハウスが計算資源で、これを何秒使ったか?で課金される。 またウェアハウスはいくつも作ることができ、ウェアハウスごとのコストは簡単に確認できる。 → Snowflake のコスト管理はウェアハウスの使い分けが重要 11 https://www.snowflake.com/ja/blog/cost-management-interface-generally-available/ より
  8. © 2024 Finatext Holdings Ltd. アジェンダ 1. 自己紹介・会社紹介 2. Snowflake

    の権限・コストの基礎 3. ナウキャストの権限管理・コスト管理の変遷 4. Appendix 12
  9. © 2024 Finatext Holdings Ltd. 3. ナウキャストの権限管理・コスト管理の変遷 ナウキャストのデータ基盤における権限管理・コスト管理の変遷を見ながら、 Service /

    Functional / Access Role というロールの層の導入、 またそれに合わせたウェアハウスの管理方法について紹介していきます。 • フェーズ① - Snowflake 導入直後 • フェーズ② - Access Role 層の作成 • フェーズ③ - 階層を無くし、 Account Role と Warehouse をセットに • フェーズ④ - Service / Functional Role 層の作成 • フェーズ⑤ - Access Role 層に必要に応じて一つだけ階層を作る ※ 説明のため一部簡略化したりしています。また一部まだ検証段階の要素もあります。 13
  10. © 2024 Finatext Holdings Ltd. 3. ナウキャストの権限管理・コスト管理の変遷 フェーズ① - Snowflake

    導入直後 各エンジニアがロール・ウェアハウスを管理。初期はルールもほぼなく、様々な問題があった • Snowflake の権限についてよく知らないと管理できない • ロール階層について理解していないと管理できない • ウェアハウスの切り分けが雑 14 System User 2 Human User A Human User B System User 1 Account Role Account Role Account Role Tables Views Warehouse Account Role Account Role Account Role Account Role Warehouse Warehouse
  11. © 2024 Finatext Holdings Ltd. 「Schema内のTableのselectのためのロール」というように、 DB 内のオブジェクトの各種権限を持った Database Role

    を用意(Access Role 層)。 Access Role を他のロールへ付与する形で DBオブジェクトの権限を付与する。 Database Access Role 層 3. ナウキャストの権限管理・コスト管理の変遷 フェーズ② - Access Role 層の作成 15 System User 2 Human User A Human User B System User 1 Account Role Database Role table-create Database Role table-select Tables Views Warehouse Database Role view-create Database Role view-select Account Role Account Role Warehouse
  12. © 2024 Finatext Holdings Ltd. 引き続き以下の問題は残ったまま。 • ロール階層について理解していないと管理できない • ウェアハウスの切り分けが雑

    Database Access Role 層 3. ナウキャストの権限管理・コスト管理の変遷 フェーズ② - Access Role 層の作成 16 System User 2 Human User A Human User B System User 1 Account Role Database Role table-create Database Role table-select Tables Views Warehouse Database Role view-create Database Role view-select Account Role Account Role Warehouse
  13. © 2024 Finatext Holdings Ltd. Account Role の権限は Access Role

    を付与するかどうかで権限管理する。 また Account Role 同士で階層をなくすことでシンプルに。 Account Role と Warehouse をセットにし、 権限管理とコスト管理を同時にしやすくした。 Database Warehouse Account Role ReadWrite Access Role 層 3. ナウキャストの権限管理・コスト管理の変遷 フェーズ③ - 階層を無くし、 Account Role と Warehouse をセットに 17 System User 2 Human User A Human User B System User 1 Warehouse Account Role Read Database Role table-create Database Role table-select Tables Views Database Role view-create Database Role view-select
  14. © 2024 Finatext Holdings Ltd. まだウェアハウスの切り分けがあまく、コスト管理上問題がある。システムとエンジニアとで Role/Warehouse が共有されており、例えば定期バッチとアドホックな開発のコストが分けられない Database Warehouse

    Account Role ReadWrite Access Role 層 3. ナウキャストの権限管理・コスト管理の変遷 フェーズ③ - 階層を無くし、 Account Role と Warehouse をセットに 18 System User 2 Human User A Human User B System User 1 Warehouse Account Role Read Database Role table-create Database Role table-select Tables Views Database Role view-create Database Role view-select
  15. © 2024 Finatext Holdings Ltd. System User は Service Role

    を、人間は Functional Role を使うことで、ロールもウェアハウスも 管理しやすく! Service Role 層 Warehouse Account Role Service_R Database Warehouse Account Role Service_RW Access Role 層 3. ナウキャストの権限管理・コスト管理の変遷 フェーズ④ - Service / Functional Role 層の作成 19 System User 2 Human User A Human User B System User 1 Database Role table-create Database Role table-select Tables Views Database Role view-create Database Role view-select Functional Role 層 Warehouse Account Role Service_RW Warehouse Account Role Service_R
  16. © 2024 Finatext Holdings Ltd. Service / Functional Role の権限管理をしやすくするために、Access

    Role 層で一つ階層を追加。 Service Role 層 Warehouse Account Role Service_R Database Warehouse Account Role Service_RW Access Role 層 3. ナウキャストの権限管理・コスト管理の変遷 フェーズ⑤ - Access Role 層に必要に応じて一つだけ階層を作る 20 System User 2 Human User A Human User B System User 1 Database Role table-create Database Role table-select Tables Views Database Role view-create Database Role view-select Functional Role 層 Warehouse Account Role Service_RW Warehouse Account Role Service_R Database Role ReadWrite Database Role Read
  17. © 2024 Finatext Holdings Ltd. まとめ • データ基盤では権限管理とコスト管理が大事 ◦ Snowflake

    ではロールとウェアハウスの使い方をどうするか?という話 • 以下の3つの層に分けて考えると管理しやすい ◦ Access Role 層 ▪ Database / Schema 内のオブジェクトの権限を表現するためのロールの層 ▪ Database Role で実装する ◦ Functional Role 層 ▪ 人間が使うロールとウェアハウスの層で、役割ごとに分離する ▪ Account Role で実装する ▪ Functional Role 同士で階層は作らない ▪ Access Role を付与するかどうかで DB / Schema 内のオブジェクトの権限管理をする ◦ Service Role 層 ▪ Functional Role 層と基本同じだが、利用者が人間ではなくシステム 21
  18. © 2024 Finatext Holdings Ltd. 4. Appendix References • https://select.dev/posts/snowflake-roles

    • https://select.dev/posts/snowflake-rbac-best-practices • https://zenn.dev/dataheroes/articles/snowflake-database-role-20240727 • https://dev.classmethod.jp/articles/snowflake-terraform-design-with-functional-and-access-role/ • https://docs.snowflake.com/en/user-guide/security-access-control-overview • https://docs.snowflake.com/en/user-guide/security-access-control-considerations 24
  19. © 2024 Finatext Holdings Ltd. 4. Appendix Account Role と

    Database Role Snowflake の代表的なロールとして以下の2つがあり、適宜使い分けると管理しやすくなる • Account Role ◦ Account Object ◦ Schema Object だけでなく、 Global / Account Object の権限など何でも権限を付与できる ◦ User に権限を付与できる ◦ Role 選択画面に子孫のロール含め出てくる ◦ Functional / Service Role 層に最適 • Database Role ◦ Database Object ◦ Schema や Schema Object の権限しか付与できない ▪ Warehouse の権限は付与できない ◦ User には権限を付与できない ◦ Role選択の画面には出てこない ◦ Access Role 層に最適 25
  20. © 2024 Finatext Holdings Ltd. 4. Appendix Schema を中心にオブジェクトを整理する •

    Snowflake の多くのオブジェクトは Schema オブジェクト • 役割ごとにSchemaを用意し、これ単位でオブジェクトを 整理すると見通しが良い • 例 ◦ POSデータのDWH層のSchema ◦ POSデータのMart層のSchema ◦ クレカデータのDWH層のSchema ◦ クレカデータのMart層のSchema ◦ … 26 https://docs.snowflake.com/en/user-guide/security-access-control-overview#securable-objects より
  21. © 2024 Finatext Holdings Ltd. 4. Appendix Schema 中心の権限管理 •

    権限管理もSchema単位で考えていくとやりやすい ◦ FUTURE TABLES / ALL TABLES といった grant がある ▪ GRANT SELECT ON FUTURE TABLES IN SCHEMA s1 TO DATABASE ROLE r1; ▪ GRANT SELECT ON ALL TABLES IN SCHEMA s1 TO DATABASE ROLE r1; ◦ Schema 単位でオブジェクトをまとめて考えることで、 FUTURE / ALL の Grant が利用でき 必要となる Grant が一気に減る(増えない)ため、管理しやすくなる ◦ このように Grant も奥が深いので、 Access Role 層として適切な粒度のロールを 用意しておくと権限管理のハードルが下がる 27 例:テーブル Schema 単位 オブジェクト単位 権限管理の単位 <db>.<schema> 内の全テーブル <db>.<schema>.<table> 必要な Grant 以下の2つを privilege ごとに設定すれば、追加は不要 - FUTURE/ALL TABLES IN SCHEMA テーブル・privilege ごとに設定 テーブルの増減に伴いgrant系の設定も増減が必要
  22. © 2024 Finatext Holdings Ltd. 4. Appendix コスト管理の観点 マルチデータプロダクトの基盤として、コスト管理できることは重要。 影響範囲が広いため早いうちから適切に設計しておくことが大事。考えておくべきポイントは以下。

    • 定期バッチとAdhocな開発のコストの切り分けができるか? ◦ Functional Role と Service Role とを切り分けるのが大事。 これによって定期バッチとAdhocな開発のWarehouse を分かれる • プロダクトごとに開発コストを確認できるか? ◦ Functional / Service Role はそれぞれプロダクトごとに作成するのが大事。 これにより Warehouse もプロダクトごとに分かれ、プロダクトのコストが確認できる。 • Workload ごとにコストを確認できるか? ◦ Snowflake ではクエリ単位でコストを確認するのは容易だが、 dbt model などのワークロードごとにコストを確認するのはそのままではできない ◦ dbt model ごとに query tag / コメント を適切に設定するなどの工夫が必要になる ◦ SELECTのような SaaS を使うのも一つの手段 28
  23. © 2024 Finatext Holdings Ltd. 4. Appendix Role / Warehouse

    構成のアンチパターン • Access Role を Account Role で作る ◦ Access Role は単に権限をまとめて使いやすくしたものなので Account Role でなくて良い ◦ Account Role で作成すると Role が多すぎて Role 選択画面が大変なことになる • Access Role の作り方が雑 ◦ 荒すぎると権限管理がうまくできないし、細かすぎても使いにくい ◦ 最初に程よい粒度で作るのが大事 • Functional / Service Role の中で階層を作る ◦ 複雑な階層になり、管理しきれなくなりがち ◦ 結果として強めの権限のロールが多用されがち • Ownership の取り扱いを考えない ◦ Owner 権限を持つ Access Role を用意し、必要に応じて複数の Role に Table の Owner な どを配れるようにしておくのが大事 ◦ そうでないと Functional Role 側の階層が必要になり複雑になる • 命名が雑 29
  24. © 2024 Finatext Holdings Ltd. 4. Appendix データ基盤のインフラは IaC で管理する

    Snowflakeのオブジェクトは基本的に Terraform で管理するのが良い。 • メリット ◦ サイロ化を解消するためにデータを集めたデータ基盤は当然利用者が多く、 権限管理が非常に重要だが、 IaC による管理は以下の通り各種メリットがある。 ▪ IaC で権限設定を管理すれば、そのコードが権限設定の SSoT となり管理しやすくなる ▪ IaC のコードをGitで管理をしておくことで権限の履歴の管理にもなる ▪ 適切な GitOps の設定をすることで、レビューされないと権限付与ができない といった権限申請のワークフローを自然と用意することができる ◦ 適切に Terraform モジュールを作成しておくことで、 新しいパイプラインの立ち上げ工数が大幅に削減できる • デメリット ◦ Snowflake における IaC は Terraform がデファクトスタンダードであり、 Terraform に慣れているメンバーが必要 30
  25. © 2024 Finatext Holdings Ltd. 4. Appendix Terraform でのモジュールイメージ •

    モジュール① : Schema モジュール ◦ 管理対象オブジェクト ▪ Schema そのもの ▪ Schema object • table や view は dbt で作成するのでそれ以外のイメージ • stage や format など ▪ Access Role としての Database Role ▪ Access Role の実際の権限である各種 grant • FUTURE / ALL TABLES IN SCHEMA など 31
  26. © 2024 Finatext Holdings Ltd. 4. Appendix Terraform でのモジュールイメージ •

    モジュール② : Role / Warehouse モジュール ◦ 管理対象 ▪ Functional / Service Role となる Account Role ▪ 指定した Access Role である Database Role の Grant ▪ Warehouse とその Grant • 誰が開発するか? ◦ モジュール自体の開発は Platform チーム ▪ Access Role をモジュール①で実装するなど ◦ モジュールを利用し実際のオブジェクトを作るのは各チームのエンジニア ▪ モジュール①・②を利用しプロダクトの Schema と 関連する Functional / Service Role を用意する ▪ どのような Access Role があるのかを理解していれば簡単に権限管理ができる 32