[新機能]Snowflakeのユーザーに対し「TYPE」propertyを設定できるようになり、外部サービス連携用のユーザーを区別出来るようになりました
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
さがらです。
先日のSnowflake 8.26のリリースノートで、Snowflakeのユーザーに対して「TYPE」propertyが追加されました。
この「TYPE」propertyについて、本記事でまとめてみます。
「TYPE」propertyとは
まず、「TYPE」propertyですが、USERオブジェクトに紐づく新しいオプションのプロパティとなります。
上記のドキュメントによると、PERSON、SERVICE、LEGACY_SERVICE、NULLの4つが選択出来るようです。デフォルト値はNULLです。
PERSON- ユーザーのログイン方法や設定に特に制限はない。(これまでと変わらないSnowflakeユーザーと同じ扱い)
NULLPERSONと同じ挙動となる。(これまでと変わらないSnowflakeユーザーと同じ扱い)
SERVICE- パスワードやSAML SSOを用いて、ログインが不可能となる
- MFAの設定も不可能であり、authentication policyによるMFAの強制からも除外される
FIRST_NAME、MIDDLE_NAME、LAST_NAME、PASSWORD、MUST_CHANGE_PASSWORD、MINS_TO_BYPASS_MFAの設定が不可能
LEGACY_SERVICESERVICEと異なり、パスワードまたはSAML SSOを用いてログインが可能- MFAの設定も不可能であり(後述する相樂の検証範囲では)、authentication policyによるMFAの強制からも除外される
この情報を踏まえると、基本的には以下の使い分けが良いと感じました。
PERSON- 実際にSnowsightにログインして操作する人間に割り当てるユーザー
SERVICE- dbt CloudやFivetranなどのSnowflake外のサービスからの認証や、自社製のアプリからの認証に使用するユーザー
LEGACY_SERVICE- パスワード認証しか対応していない外部サービスからの認証に使用するユーザー。authentication policyによるMFAの強制から除外されてしまうがパスワードで認証できるユーザーとなるため、特別な事情がない限りは
LEGACY_SERVICEのユーザーは非推奨です
- パスワード認証しか対応していない外部サービスからの認証に使用するユーザー。authentication policyによるMFAの強制から除外されてしまうがパスワードで認証できるユーザーとなるため、特別な事情がない限りは
SERVICEユーザーに関する挙動を確かめてみた
TYPEがSERVICEのユーザーに関する挙動を確かめてみます。
まず、以下のようにpasswordも含むcreate userコマンドを実行すると、エラーとなります。これにより、パスワードでの認証が絶対にできないユーザーを作成可能です。
create user sagara_service
type = service
password = '<任意のパスワード>'
default_role = public;

以下のようにpasswordなど、TYPEがSERVICEのときに利用できないオプションを含まないようにすると、無事にユーザーを作ることができます。
create user sagara_service
type = service
default_role = public;

Userから確認すると、TYPEは一覧に表示されないようです。対象ユーザーの詳細画面でも、TYPEは確認できませんでした。(個人的にはこのユーザー一覧でも各ユーザーの詳細画面でも、TYPEがわかるようにしてほしいですね)


LEGACY_SERVICEユーザーに関する挙動を確かめてみた
TYPEがLEGACY_SERVICEのユーザーに関する挙動を確かめてみます。
まず、以下のようにpasswordも含むcreate userコマンドを実行すると、SERVICEのときと変わりユーザーの作成ができます。
create user sagara_legacy_service
type = legacy_service
password = '<任意のパスワード>'
default_role = public;

ドキュメント上に明記がなかったMFAの設定がTYPEがLEGACY_SERVICEのユーザーに設定できるかどうかを試してみます。対象のLEGACY_SERVICEのユーザーでログインしてMFAの設定を進めようとすると、MFAの設定の最後でエラーが起きました。私が検証した範囲では、LEGACY_SERVICEのユーザーに対してMFAの設定ができませんでした。



最後に
Snowflakeのユーザーに対し「TYPE」propertyを設定できるようになったので、内容をまとめたうえで動作検証もしてみました。
MFAのポリシーは適用したうえで、外部サービス連携用のユーザーはTYPESERVICEで作るとセキュアなユーザー管理になると思います。ぜひご活用ください!






