[アップデート] Amazon RDS for SQL Server で SQL Server 認証でもパスワードポリシーをカスタマイズ出来るようになりました

[アップデート] Amazon RDS for SQL Server で SQL Server 認証でもパスワードポリシーをカスタマイズ出来るようになりました

Clock Icon2024.07.23

いわさです。

Amazon RDS for SQL Server ではユーザーパスワードのコンプライアンス要件を満たすためにパスワードポリシーを設定することが出来ます。

RDS for SQL Server は混合認証モードがサポートされており、Windows 認証と SQL Server 認証を使うことが出来ます。
Windows 認証を使いたい場合は RDS for SQL Server の作成時に次のオプションを構成します。

FD3452A7-7D38-4B9C-8629-9679B7C2B259_4_5005_c

従来はパスワードポリシーのカスタマイズは Active Directory へ参加させるこの Windows 認証でのみサポートされており、SQL Server 認証ではデフォルトのローカルパスワードポリシーから変更することは出来ませんでした。
デフォルトのローカルパスワードポリシーはパスワードの最小文字数が 0 文字で複雑なパスワード設定も不要でした。

これが先日のアップデートで SQL Server 認証でもカスタムパスワードポリシーがサポートされるようになりました。

https://aws.amazon.com/about-aws/whats-new/2024/07/amazon-rds-sql-server-password-policies-logins/

本日はこちらを構成してみてパスワード設定の挙動を確認してみましたので、その様子を紹介したいと思います。

デフォルト挙動を確認する

まず、適当な RDS for SQL Server インスタンスを SQL Server 認証で作成しまして、緩いパスワードでユーザー作成をしてみましょう。
なお、一部割愛していますがユーザー作成手順は以下を参考にしています。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.CreateUser.html

1> CREATE LOGIN hoge1 WITH PASSWORD = 'password';
2> go
1> CREATE USER hoge1 FOR LOGIN hoge1;
2> go

ゆるパスワードでユーザーが作成出来ましたね。
ユーザーごとのポリシーチェック設定も確認してみます。

1> SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
2> go
name                                                                                                                             is_policy_checked is_expiration_checked
-------------------------------------------------------------------------------------------------------------------------------- ----------------- ---------------------
rdsa                                                                                                                                             1                     0
##MS_PolicyTsqlExecutionLogin##                                                                                                                  1                     0
##MS_PolicyEventProcessingLogin##                                                                                                                1                     0
admin                                                                                                                                            0                     0
hogeuser1                                                                                                                                        1                     0
hoge1                                                                                                                                            1                     0
hoge2                                                                                                                                            1                     0

RDS の管理ユーザーはパスワードポリシーが無効化されていますが、セルフで作成したユーザーはデフォルトでポリシーチェックが ON でパスワード有効期限チェックは OFF で作成されますね。
ただし、ローカルパスワードポリシーがそもそも前述のとおり緩いので、ポリシーチェック自体はされていても対して機能していない感じです。

パスワードポリシーを設定する

今回のアップデートで SQL Server 認証でもパスワードポリシーを設定出来るようになったわけですが、設定方法としては DB パラメータでカスタマイズを行う形となります。
パラメータを確認してみると、password の文字列を含むいくつかのパラメータを確認することが出来ました。

C108610F-46A5-4FAE-BBCD-BEE1496C48B5

これらのパラメータの仕様は次の公式ドキュメントにも記載されています。

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Concepts.General.PasswordPolicy.Using.html

パスワードの複雑性、長さ、期間やロックポリシーなどが設定可能です。
今回は検証のために次のようなカスタムパラメータを作成してみます。

51D19F60-1F36-4488-80AD-A1D04030E4BB

で、パラメータ設定後にまたユーザー作成を行ってみましょう。
デフォルトでパスワードポリシーチェック自体は有効化されているので機能するはず。

1> CREATE LOGIN hoge3 WITH PASSWORD = 'password';
2> CREATE USER hoge3 FOR LOGIN hoge3;
3> go
Msg 15116, Level 16, State 1, Server EC2AMAZ-P9FULUI, Line 1
Password validation failed. The password does not meet the operating system policy requirements because it is too short.

おっ、パスワードが短すぎると怒られました。いいですね。

1> CREATE LOGIN hoge4 WITH PASSWORD = 'passwordpassword';
2> go
Msg 15118, Level 16, State 1, Server EC2AMAZ-P9FULUI, Line 1
Password validation failed. The password does not meet the operating system policy requirements because it is not complex enough.

今度は長さをカスタムパラメータで指定した 10 文字以上にしてみたのですが、今度は複雑性が不十分だと怒られました。
アルファベットの大文字・小文字、記号を 1 文字以上組み合わせる必要があります。

1> CREATE LOGIN hoge6 WITH PASSWORD = 'Password123!';
2> go
1> CREATE USER hoge6 FOR LOGIN hoge6;
2> go

今度は成功しました。しっかり機能していますね。

ロックの挙動も確認してみる

先ほどのパスワードポリシーでは 3 回以上認証に失敗すると 3 分間ログイン拒否するような設定も行っています。こちらも試してみましょう。

# パスワード誤り
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password: 
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..
# パスワード誤り
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password: 
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..
# パスワード誤り
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password: 
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..
# パスワード正しい、が認証失敗
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password: 
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'hoge6'..

:

# 3 分後に正しいパスワードで認証成功
% sqlcmd -S hoge0723sqlserver.cpnu9ipu74g4.ap-northeast-1.rds.amazonaws.com -U hoge6
Password: 
1> 

こちらも期待どおり動作していますね。

ポリシー変更

なお、ALTER LOGINでポリシー変更が可能です。
ここではデフォルトでは OFF のCHECK_EXPIRATIONを ON にしてみましょう。

1> ALTER LOGIN hoge6 WITH CHECK_POLICY = ON, CHECK_EXPIRATION = ON;
2> go
1> SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins;
2> go
name                                                                                                                             is_policy_checked is_expiration_checked
-------------------------------------------------------------------------------------------------------------------------------- ----------------- ---------------------
rdsa                                                                                                                                             1                     0
##MS_PolicyTsqlExecutionLogin##                                                                                                                  1                     0
##MS_PolicyEventProcessingLogin##                                                                                                                1                     0
admin                                                                                                                                            0                     0
hogeuser1                                                                                                                                        1                     0
hoge1                                                                                                                                            1                     0
hoge2                                                                                                                                            1                     0
hoge5                                                                                                                                            1                     0
hoge6                                                                                                                                            1                     1

(9 rows affected)
1> 

変更出来ました。これで期限チェックも動作するはずです。
なおCHECK_EXPIRATIONを有効化する際は、CHECK_POLICYも併せて有効化が必要ですので注意してください。

さいごに

本日は Amazon RDS for SQL Server で SQL Server 認証でもパスワードポリシーをカスタマイズ出来るようになったので試してみました。

個人的には SQL Server 認証のほうが圧倒的に使うことが多いので、今回のアップデート良いなと思ってます。
SQL Server 認証でもパスワードポリシーをカスタマイズしたかった方は試してみてください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.