😎

Snowflakeの権限管理ではPUBLICロールに気をつけようっていうお話

2022/06/22に公開

前置き

こんにちは。株式会社GENDAのこみぃです。

先日snowflakeの権限関係でやや苦戦したことがあったので、今日はそのお話です。

snowflakeにおける権限管理

snowflakeの権限はRoleとUserという概念で行われます。

Roleが権限をまとめたグループで、Userをグループに所属させる形になります。
User自体に権限を与えることもできますが、ある程度大きな組織になるとRoleを使って権限を分けたほうがスムーズです。

例としてはこんな感じで、他にも部署ごとに扱えるSchemaを分けたりなどもできますね。

  • SUGOI_TSUYOI_ROLE
    • 管理者
    • 偉い人
  • FUTSU_ROLE
    • 一般的なエンジニア
    • 作業者
  • YOWAI_ROLE
    • 閲覧のみの弱いユーザー

とりあえずユーザー作成、のはずが

さて、先日弱めの権限のユーザーを作成しようとしてユーザーを作成しました。

create_yowai_user
create user sugoi_yowai_user;

この時点ではユーザーを作っただけなのでroleはついていません。

このユーザーでログインしなおし、とりあえず現状では何も見られないことを確認しようとすると

select
select * from sugoi_daijina_schema.daijina_data limit 1;
+-----------+----------+
| YABAI_ID  | DATA     |
|-----------+----------|
|    123456 | YABAI    |
+-----------+----------+

あ、あれ???

PUBLICロールという存在

実はsnowflakeにはPUBLICというROLEがあります。

このROLEは作成したユーザー全てに自動的に付与されます。

付与されてしまうんです。

今回起きていたのは、やや強めの権限のROLEが何故かPUBLICに付与されていたのが原因でした。
PUBLICはユーザーに付与したROLE一覧にも出てきませんので、なかなか気づけなかった。。。

show_grants
show grants to user sugoi_yowai_user;
+------------+------+------------+--------------+------------+
| created_on | role | granted_to | grantee_name | granted_by |
|------------+------+------------+--------------+------------|
+------------+------+------------+--------------+------------+

※↑の状態でもPUBLICは付与されています。

PUBLICロールからの権限の剥奪

さて、意図しないでPUBLICに付与されてしまっていたロールはきっちり剥奪しておきましょう。

revoke
revoke role sugoi_tsuyoi_role from role public;

これでselectもできなくなり、一件落着です!!

結論

この話のまとめは以下の2つです。

  • ユーザーを作ったら意図した権限設定になっているか必ず確認しましょう
  • 何故か謎の権限がついてしまっていたらPUBLICを見直しましょう

ね、簡単でしょ?

結びの言葉

データ基盤だけの話ではありませんが、権限管理は非常に重要です。
意図しない権限がついてしまって悲しい自体が起こるというのは避けたいので、権限管理の仕様についてはしっかり把握しておきたいですね。

さらに詳細が聞きたいという方は、私がわかる範囲であればお答えしますので、Twitterあたりでお気軽にお声がけください。
@kommy_jp

なお、株式会社GENDAでは、一緒に働くデータ関連の人材を絶賛募集中です。
興味がある方は是非お声がけください。
https://genda.jp/

本日はこのあたりで。
それじゃあ、バイバイ!

Discussion