はじめに

WindowsServer上に作成したローカルユーザーのパスワード運用について
パスワードローテーションの有無に応じた有効期限管理パターンのメリット/デメリットおよびその適用手順をまとめた記事になります。

前提

・本記事で使用した環境は以下の通りです。
AWS Microsoft Windows Server 2022

・パスワードローテーションを行い、かつ、運用中にパスワード有効期限が切れログインが不可となった場合は、その対象ローカルユーザ自身でパスワード更新を行いログインができることをパスワード運用の前提としています。

有効期限管理パターン

  1. WindowsServer上のローカルユーザープロパティで有効期限を無期限化する
  2. WindowsServer上のローカルセキュリティポリシーで有効期限を変更する
  3. WindowsServer上のNLA無効化およびRDP接続時に特定のセキュリティレイヤーを使用する設定に変更する
  4. AWSコンソール上からパスワードを設定するように変更する
  5. パスワード更新を定期的に行うスクリプトを作成する
パターン ローテーション メリット デメリット
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コンソール上でパスワードを更新することが可能なので、一度検討してみると良いかもしれません。