Snowflakeのパスワードポリシーにおけるロックアウト挙動を検証する
はじめに
本記事では、Snowflakeのパスワードポリシー機能において、
ログイン失敗によるアカウントロックアウト(Password Lockout)が発生した際の挙動と、その解除方法について検証した結果を整理します。
特に、PASSWORD_MAX_RETRIES(最大試行回数)と PASSWORD_LOCKOUT_TIME_MINS(ロックアウト時間)の設定がどのように作用するか、
またロックアウトされたユーザーを管理者が救済できるかどうかに焦点を当てています。
記事のまとめ
今回の検証で確認できたポイントは以下の通りです。
-
ロックアウトの発生:
PASSWORD_MAX_RETRIESで設定した回数を超えてログインに失敗すると、アカウントがロックされる。 -
自動解除:
PASSWORD_LOCKOUT_TIME_MINSで設定された時間が経過すると、自動的にロックが解除される。 -
管理者による手動解除: ロックアウト期間中であっても、権限を持つ管理者が
ALTER USER ... SET MINS_TO_UNLOCK = 0を実行することで、即座にロックを解除できる。 - 待機時間の仕様: ロックアウト設定時間を経過するまで待つ必要はなく、運用上の救済措置が可能。
構成図
今回の検証イメージは以下の通りです。
概要
Snowflakeでは PASSWORD POLICY オブジェクトを作成し、アカウント全体または特定のユーザーに適用することで、
パスワードの複雑さや有効期限、ロックアウト設定などを管理できます。
今回の検証対象パラメータは以下の2つです。
| パラメータ | 説明 |
|---|---|
| PASSWORD_MAX_RETRIES | ユーザーがロックアウトされるまでの最大ログイン試行回数 |
| PASSWORD_LOCKOUT_TIME_MINS | ロックアウトされたユーザーが再度ログインできるようになるまでの待機時間(分) |
前提
検証前に、必要なSnowflakeリソースを用意します。検証に使えるリソースがあればそちらを利用ください。
パスワードポリシーはスキーマレベルのオブジェクトであるため、格納用のデータベースとスキーマも作成します。
今回は ACCOUNTADMIN ロールで環境を準備し、ポリシー管理を行う SECURITYADMIN に権限を付与しています。
USE ROLE ACCOUNTADMIN;
-- 検証用データベース・スキーマの作成
CREATE OR REPLACE DATABASE test_lockout_db;
CREATE OR REPLACE SCHEMA test_lockout_db.test_schema;
-- SECURITYADMIN への権限付与(ポリシー作成のため)
GRANT USAGE ON DATABASE test_lockout_db TO ROLE SECURITYADMIN;
GRANT USAGE ON SCHEMA test_lockout_db.test_schema TO ROLE SECURITYADMIN;
GRANT CREATE PASSWORD POLICY ON SCHEMA test_lockout_db.test_schema TO ROLE SECURITYADMIN;
-- 検証対象ユーザーの作成
USE ROLE SECURITYADMIN;
CREATE OR REPLACE USER test_user
PASSWORD = '****************'
LOGIN_NAME = 'test_user'
MUST_CHANGE_PASSWORD = FALSE;
検証ステップ
以下ステップで検証を進めていきます。
パスワードポリシーの作成と適用
まず、検証用のパスワードポリシーを作成します。
パスワードポリシーはスキーマレベルのオブジェクトであるため、対象のスキーマを指定して作成します。
ここでは、3回の失敗で15分間ロックアウトされる設定とします。
-- パスワードポリシーの作成
USE ROLE SECURITYADMIN;
CREATE OR REPLACE PASSWORD POLICY test_lockout_db.test_schema.test_lockout_policy
PASSWORD_MIN_LENGTH = 8
PASSWORD_MAX_RETRIES = 3
PASSWORD_LOCKOUT_TIME_MINS = 15;
次に、このポリシーを対象のユーザーに適用します。
-- ユーザーへのポリシー適用
USE ROLE SECURITYADMIN;
ALTER USER test_user SET PASSWORD POLICY test_lockout_db.test_schema.test_lockout_policy;
ロックアウトの再現
test_user を使用し、意図的に間違ったパスワードでログインを試行します。
PASSWORD_MAX_RETRIES = 3 の設定であるため、4回目のログイン試行時にロックアウトが発生することを確認します。
結果:
3回失敗した後、4回目のアクセスで以下のようなエラーメッセージが表示され、ログインができなくなりました。
管理者によるロック解除
ロックアウト時間が15分に設定されていますが、即座にログインが必要な場合を想定します。
管理者(SECURITYADMIN ロール等の、ユーザー管理権限を持つロール)が別のセッションから以下のコマンドを実行し、ロックを解除できるか確認します。
-- ロックアウトの強制解除
USE ROLE SECURITYADMIN;
ALTER USER test_user SET MINS_TO_UNLOCK = 0;
結果:
コマンド実行直後に test_user で正しいパスワードを入力したところ、正常にログインできました。
これにより、PASSWORD_LOCKOUT_TIME_MINS の経過を待たずとも、管理者側で救済が可能であることが確認できました!
片付け
検証に使用したリソースを削除します。
USE ROLE ACCOUNTADMIN;
-- ユーザーの削除
DROP USER IF EXISTS test_user;
-- パスワードポリシーの削除
DROP PASSWORD POLICY IF EXISTS test_lockout_db.test_schema.test_lockout_policy;
-- データベースの削除
DROP DATABASE IF EXISTS test_lockout_db;
注意点や考慮事項
-
MINS_TO_UNLOCK の活用:
MINS_TO_UNLOCKパラメータは、一時的にロックアウト時間を上書きするものです。0を設定することで即時解除となりますが、再度ロックされた場合は、ポリシーのPASSWORD_LOCKOUT_TIME_MINSが再度適用されます。
参考URL
この記事で参考にしたURLです。
-
Snowflake Documentation: Password Policies
https://docs.snowflake.com/ja/user-guide/password-authentication#label-using-password-policies ↩ -
Snowflake Documentation: ALTER USER
https://docs.snowflake.com/ja/sql-reference/sql/alter-user ↩
