はじめに
WindowsServer上に作成したローカルユーザーのパスワード運用について
パスワードローテーションの有無に応じた有効期限管理パターンのメリット/デメリットおよびその適用手順をまとめた記事になります。
前提
・本記事で使用した環境は以下の通りです。
AWS Microsoft Windows Server 2022
・パスワードローテーションを行い、かつ、運用中にパスワード有効期限が切れログインが不可となった場合は、その対象ローカルユーザ自身でパスワード更新を行いログインができることをパスワード運用の前提としています。
有効期限管理パターン
- WindowsServer上のローカルユーザープロパティで有効期限を無期限化する
- WindowsServer上のローカルセキュリティポリシーで有効期限を変更する
- WindowsServer上のNLA無効化およびRDP接続時に特定のセキュリティレイヤーを使用する設定に変更する
- AWSコンソール上からパスワードを設定するように変更する
- パスワード更新を定期的に行うスクリプトを作成する
パターン | ローテーション | メリット | デメリット |
1. | なし | ・有効期限をローカルユーザー単位で無効化できる。
・有効期限を無効化した場合、パスワードローテーションが不要になり運用負荷が軽減される。 |
・パスワードローテーションを実施しないことによりセキュリティ強度が低下する。 |
2. | なし | ・有効期限を「0日」または長期間有効にした場合、パスワードローテーションが不要/低頻度になり運用負荷が軽減される。 | ・パスワードローテーションを実施しないことによりセキュリティ強度が低下する
・全てのローカルユーザーに有効期限が適用されてしまうため、個別のユーザに対してそれぞれのパスワード管理ポリシーが存在する場合、こちらの設定は使用できない。 |
3. | あり | ・有効期限が設定されていた場合、パスワードが切れた後にそのユーザ自身でパスワードを更新することができる。 | ・NLA無効化およびRDP接続時に特定のセキュリティレイヤーを使用する設定に変更することで、セキュリティ強度が低下する。 |
4. | あり | ・有効期限が設定されていた場合、パスワードが切れた後にAWS コンソール上から対象ユーザーのパスワードを更新することができる。 | ・KMSキーを作成する必要があるため、およそ1ドル程度のAWS月額利用料がかかる。 |
5. | あり | ・パスワード更新作業が不要になる。 | ・スクリプトによる自動化を実現することで、スクリプトの運用が必要となり運用負荷がかかる。 |
実現方法
1. WindowsServer上のローカルユーザープロパティで有効期限を無期限化する
1.OS上の「コンピュータ管理」から任意のユーザを選択
2.「プロパティ」からPassword never expiresのチェックを有効化
2. WindowsServer上のローカルセキュリティポリシーで有効期限を変更する
1.OS上の「ローカルセキュリティポリシー」→「アカウントポリシー」→「パスワードポリシー」へ遷移
2.有効期限を無期限にする場合、Maximum password ageを「0」に変更
3. WindowsServer上のNLA無効化およびRDP接続時に特定のセキュリティレイヤーを使用する設定に変更する
・NLAの無効化
1.OS上の「ローカルグループポリシーエディター」→「コンピューターの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「リモートデスクトップサービス」→「リモートデスクトップセッションホスト」→「セキュリティ」へ遷移
2.「リモート接続時にネットワークレベル認証を使用したユーザー認証を必要とする」を「無効」に変更
・RDP接続時に使用するセキュリティレイヤーの変更
3.OS上の「ローカルグループポリシーエディター」→「コンピューターの構成」→「管理用テンプレート」→「Windowsコンポーネント」→「リモートデスクトップサービス」→「リモートデスクトップセッションホスト」→「セキュリティ」へ遷移
4.「リモート (RDP) 接続に特定のセキュリティ レイヤーの使用を必要とする」を「有効」に変更
5.パスワードが切れた後、任意のタイミングで対象のローカルユーザーでRDP接続を行いパスワードを更新する。
4. AWSコンソール上からパスワードを設定するように変更する
1.対象のサーバに「kms:Decrypt」権限を持ったIAMロールをアタッチ
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"kms:Decrypt"
],
"Resource": "*"
}
]
}
2.カスタマー管理型キーを作成
3.SSM接続時にKMS暗号化を行う設定に変更
4.パスワード有効期限が切れた後、任意のタイミングでAWSコンソール上の「SSM管理画面」→「フリートマネージャー」から対象のサーバーを選択し、「ノードアクション」→「ノード設定」→「ノードユーザーパスワードのリセット」からローカルユーザーのパスワードを更新する。
5. パスワード更新を定期的に行うスクリプトを作成する
実現方法としては、WindowsServer上のタスクスケジューラという機能を活用したり、AWS環境であればSSM Run Commandを活用することが挙げられるが、それだけで記事が一つできてしまうため、本記事では省略する。(また機会があれば記事にしたいと思います)
おわりに
本記事でローカルユーザーのパスワード管理パターンについてまとめてみました。
パスワード運用ポリシーを元に、それぞれのパスワード管理パターンのメリットとデメリット踏まえた上で適切なパスワード運用を実現していきましょう。
またAWS環境上で稼働しているWindowsServerであれば、AWSコンソール上でパスワードを更新することが可能なので、一度検討してみると良いかもしれません。