マネージドサービス部 佐竹です。
本日はセキュリティに関する運用知見(ミスリードを発生させてしまうエラーメッセージ)について共有します。
はじめに:結論
「自分の認証情報(My security credentials)」の画面から、コンソールのパスワードを更新する際に、IAM ユーザーに iam:ChangePassword
のポリシーが適切に付与されているにも関わらず「iam:ChangePassword へのアクセスが拒否されました」や「iam:ChangePassword に対する許可がありません」等のエラーメッセージが表示されてしまう場合があります。
意図せずエラーが発生する条件
これが発生する条件ですが、IAM ユーザーのパスワードポリシー(後述)が設定されている前提において、規定のパスワードポリシーに準拠していない「新しいパスワード」を設定した場合に先の画面が表示されてしまいます。
この時、本来は「パスワードポリシーに準拠していない」旨を表示させるべきですが、現状「iam:ChangePassword に対する許可がありません」と意図しない案内が表示されてしまう状況です。
本ブログは本仕様に関する注意喚起となっています。
以下より、本エラーに見舞われる背景や仕様について詳しく解説していきます。
IAM ユーザーとパスワードポリシーについて
まず前提となるのですが、IAM ユーザーのパスワードには有効期限等のポリシーをアカウントレベルで設定することが可能です。
このためには、以下ドキュメントに記載のある「IAM ユーザー用のアカウントパスワードポリシー」を利用し設定を実施します。
仮に有効期限を365日と設定した場合は、(およそ)1年に1回はパスワードの変更が必要となります。この設定によって、エンドユーザー様は1年に1回はパスワードを変更する運用を行うこととなります*1。
またそれ以外にも文字の組み合わせや、パスワード再利用の禁止などもパスワードポリシーとして設定が可能となっています。
AWS Security Hub FSBP IAM.7 に関して
そして次に、本パスワードポリシーですが、AWS Security Hub の「AWS Foundational Security Best Practices」を設定した場合に有効とされるチェック項目の1つである [IAM.7] Password policies for IAM users should have strong configurations (IAMユーザーのパスワードポリシーには強力な設定が必要です)
をクリアするためにも設定が必要となります。
[IAM.7] Password policies for IAM users should have strong configurations の詳細は以下も合わせてご確認ください。
IAM パスワードポリシーを AWS CLI で設定する
さて、弊社では一部のエンドユーザー様で [IAM.7] の条件に準拠するために、以下の設定を施す AWS CLI を AWS アカウント開設後に実行することがあります。なお、あくまで一例となります。
- パスワードの最小文字数を強制する:12文字
- パスワードの強度
- 1 文字以上のアルファベット大文字 (A~Z) を必要とする
- 1 文字以上のアルファベット小文字 (a~z) を必要とする
- 少なくとも 1 つの数字が必要
- 少なくとも 1 つの英数字以外の文字が必要 (! @ # $ % ^ & * ( ) _ + - = [ ] { } | ')
- その他の要件
- パスワードを期限切れにする期間:365 日*2
- ユーザーにパスワードの変更を許可する
- パスワードの再利用を禁止する:3 パスワード
以下が AWS CLI です。本 AWS CLI は例ではなく実際に実行が可能な形式ですため、念のため注意してください。
aws iam update-account-password-policy --minimum-password-length 12 --require-symbols --require-numbers --require-uppercase-characters --require-lowercase-characters --allow-users-to-change-password --max-password-age 365 --password-reuse-prevention 3
本 AWS CLI を AWS CloudShell 等で実行するとアカウントパスワードポリシーの設定画面は以下の通りとなります。
パスワード変更で意図しないエラーが発生してしまう動作の確認
先の設定を施した場合、定期的にエンドユーザー様は IAM ユーザーのパスワードを変更することになります。また今回、そのパスワード変更時の動作検証の場面となっています。
またさらに、その設定画面は上画像の通り「自分の認証情報(My security credentials)」となります。
何故この画面から変更することになるかは、上記ブログに詳しく記載しています。
引き続き同画面の「AWS IAM 認証情報」→「コンソールパスワードの更新」からパスワードの変更を試みます。
今回は意図しないエラー発生の動作確認として、「自分の認証情報」から「アカウントパスワードポリシー」に沿わない、具体的には「たった1文字」のパスワードに変更したとします。以下がその結果の画面キャプチャです。
すると「パスワードの変更」の画面内に「iam:ChangePassword へのアクセスが拒否されました」に続き「iam:ChangePassword に対する許可がありません。アクセスをリクエストするには、次のテキストをコピーしてAWS管理者に送信してください。」と表示されます。
では本当にそうなのか、念のため該当 IAM ユーザーのポリシーを確認してみます。
しかし上画像の通り、該当する IAM ユーザーには IAMUserChangePassword
の AWS Managed Policy がアタッチされていることが確認できます。アタッチされているポリシーはこれのみですが、パスワードの変更のための権限が不足していることはありません。
これらの動作確認の通り、エラーメッセージが正しく表示されていないことがわかります。
パスワードは「1」それだけですので、「パスワードポリシーに準拠していない」旨が表示されるべきと考えます。しかし、現時点の仕様ではこの通りの表記となってしまうとのことでした*3。
参考 AWS ドキュメント (IAMUserChangePassword)
まとめ
繰り返しとなりますが、「自分の認証情報(My security credentials)」の画面から、コンソールのパスワードを更新する際に、IAM ユーザーに iam:ChangePassword
のポリシーが適切に付与されているにも関わらず、アカウントのパスワードポリシーに準拠していないパスワードを設定した場合、「iam:ChangePassword へのアクセスが拒否されました」や「iam:ChangePassword に対する許可がありません」等のエラーメッセージが表示されてしまう場合があります。
なお、「パスワードの再利用を禁止する」に違反した場合には正しく「Password cannot be the same as previously used password」が表示されることを以下の通り確認済です。
今回のエラーメッセージにように、正確ではない案内が表示される場合には運用上混乱をきたすことも多いと感じますため、注意喚起としてブログを記載させて頂きました。今後、正しいエラーメッセージへと修正されることを望んでおります。
では、またお会いしましょう。
*1:パスワードの定期的な変更は不要という総務省の発表は認識していますが、今現在この件については不問とさせてください https://www.soumu.go.jp/main_sosiki/cybersecurity/kokumin/security/business/staff/06/
*2:この設定は IAM.7 に必須ではありませんが、今回都合があって設定されているとご理解ください
*3:AWS サポートにフィードバック済のため、将来的に適切なメッセージへと変更されると思われます
佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ
マネージドサービス部所属。AWS資格全冠。2010年1月からAWSを利用してきています。2021-2022 AWS Ambassadors/2023-2024 Japan AWS Top Engineers/2020-2024 All Certifications Engineers。AWSのコスト削減、最適化を得意としています。