IAMユーザーのパスワード変更の設定手順

このブログシリーズ 「クラウドセキュリティ 実践集」 では、一般的なセキュリティ課題を取り上げ、「なぜ危険なのか?」 というリスクの解説から、「どうやって直すのか?」 という具体的な修復手順(コンソール、AWS CLI、Terraformなど)まで、分かりやすく解説します。
この記事では、長期間変更されていないIAMユーザーのパスワードをリセットする手順について解説します。

ポリシーの説明
[IAM.7] IAM ユーザーのパスワードポリシーには強力な設定が必要です
https://docs.aws.amazon.com/ja_jp/securityhub/latest/userguide/iam-controls.html#iam-7
このコントロールは、IAM ユーザーのアカウントパスワードポリシーが強力な設定を使用しているかどうかをチェックします。パスワードポリシーが強力な設定を使用していない場合、コントロールは失敗します。カスタムパラメータ値を指定しない限り、Security Hub は前の表に記載されているデフォルト値を使用します。
PasswordReusePrevention
パラメータおよびMaxPasswordAge
パラメータにはデフォルト値がないため、これらのパラメータを除外した場合、Security Hub はこのコントロールを評価する際にパスワードローテーションの回数とパスワードの有効期間を無視します。
IAMユーザーのパスワードを定期的に変更することは、セキュリティのベストプラクティスとされています。特に、Center for Internet Security (CIS) ベンチマークでは、90日以内にパスワードをローテーション(変更または期限切れ)させることが推奨されています ([例: CIS AWS Foundations Benchmark 1.3])。 長期間同じパスワードを使用し続けることは、パスワードが漏洩した場合のリスクを高め、不正アクセスにつながる可能性を増大させます。 AWS Security Hubなどのツールでも、90日以上変更されていないパスワードを持つIAMユーザーが検出されることがあります。この記事では、そのようなユーザーのパスワードをリセットする具体的な手順を紹介します。
修復手順
AWSコンソールでの修正手順
- https://console.aws.amazon.com/iamv2/home#/users から IAM ユーザー一覧ページにアクセスします。
- 対象の IAM ユーザーを選択し、「セキュリティ認証情報」タブを開きます。
- 「コンソールサインイン」セクションにある「コンソールアクセスを管理」ボタン(または「パスワードを管理」など類似のボタン)をクリックします。
- パスワード管理オプションで、「パスワードをリセット」を選択します。
- コンソールパスワードのオプションで、「自動生成されたパスワード」を選択するか、または自身で管理するユーザーの場合は「カスタムパスワード」を選択して任意のパスワードを設定します。
- 「ユーザーは次回のサインイン時に新しいパスワードを作成する必要があります (推奨)」にチェックを入れます。(これにより、ユーザー自身が初回ログイン時に新しいパスワードを設定するよう強制できます。管理者側でパスワードを管理し、すぐに伝達・変更しない特殊なケースを除き、チェックを入れることを強く推奨します。)。
- 「パスワードをリセット」をクリックします。
- パスワードを変更したユーザーアカウントで、問題なくAWSマネジメントコンソールにログインできることを確認します。(自動生成パスワードの場合は、生成されたパスワードを安全な方法でユーザーに伝達する必要があります)。
AWS CLIでの修正コード
注意: 以下のスクリプトはコマンドライン引数で新しいパスワードを受け取ります。実行するとシェルの履歴にパスワードが残る可能性があるため、取り扱いには注意してください。
#!/bin/bash
# 必要な引数のチェック
if [ $# -ne 2 ]; then
echo "使用方法: $0 <ユーザー名> <新しいパスワード>"
exit 1
fi
user_name="$1"
new_password="$2"
echo "ユーザー '$user_name' のパスワードをリセットしています..."
# AWS CLI の設定確認
if ! aws sts get-caller-identity &> /dev/null; then
echo "エラー: AWS CLIが正しく設定されていません。"
exit 1
fi
# ユーザーの存在確認
if ! aws iam get-user --user-name "$user_name" &> /dev/null; then
echo "エラー: ユーザー '$user_name' が見つかりません。"
exit 1
fi
# IAM ユーザーのパスワードをリセットし、次回ログイン時に変更を要求
if aws iam update-login-profile --user-name "$user_name" --password "$new_password" --password-reset-required; then
echo "成功: ユーザー '$user_name' のパスワードをリセットしました。次回ログイン時に変更が必要です。"
else
echo "エラー: パスワードのリセットに失敗しました。"
exit 1 # エラーで終了
fi
exit 0
実行してみます!
$ sh resolve.sh "ユーザー名" "パスワード"
"成功: ユーザー 'XXXX' のパスワードをリセットしました。次回ログイン時に変更が必要です。"
対象ユーザのパスワードがリセットされました。
最後に
今回は、IAMユーザーにて90日以上利用されている(またはリセットが必要な)パスワードのリセット手順についてご紹介しました。 Center for Internet Security (CIS) において、90日以内にパスワードをローテーションさせることが推奨されており、これはAWSを利用する上での重要なベストプラクティスです。
90日以上変更されていないパスワードを使用し続けることは、漏洩リスクや不正アクセスを受ける可能性を高めます。本記事を参考に対応していただき、セキュリティを高めることをお勧めします。
なお、90日以上パスワードが変更されていないIAMユーザーの検出は、弊社が提供するSecurifyのCSPM機能で簡単に行うことが可能です。
運用が非常に楽に出来る製品になっていますので、ぜひ興味がある方はお問い合わせお待ちしております。
最後までお読みいただきありがとうございました。この記事が皆さんの役に立てば幸いです。