AWS IAMでMFAデバイスの管理を許可しようとして詰まった話
機能を絞ったグループ属しているユーザーがMFAデバイスの管理もできるようにしたいな〜と思って設定した話。
経緯
調べてみると公式ドキュメントで提供されていた。
ページに書いてあったJSONでポリシーを作ってグループにアタッチし、
いざやってみたらエラーになった。
User: arn:aws:iam::{アカウントID}:user/{ユーザー名} is not authorized to perform: iam:CreateVirtualMFADevice on resource: arn:aws:iam::{アカウントID}:mfa/{入力したMFAデバイス名称} because no identity-based policy allows the iam:CreateVirtualMFADevice action
調査
調べてみたら同じ事象に当たっている方がいて、AWS側でMFAデバイスが複数登録できるようにアップデートがあったことによる影響とのことだった。
以前はMFAデバイスが1つしか登録できなかった + 今だと設定しているMFAデバイスの名前がユーザー名で固定だったため、公式ドキュメントが提供しているポリシーで問題なかった。
しかし、アップデートによってMFAデバイスが複数登録できるようになり、MFAデバイスの名前が任意に付けられるようになったことでResourceに指定した条件に一致しなくなった。
(MFAデバイスの名前がユーザー名であれば今までのポリシーでもいける)
"Resource": [
"arn:aws:iam:::mfa/${aws:username}",
"arn:aws:iam:::user/${aws:username}"
]
対策
MFAデバイスの認証権限(CreateVirtualMFADevice)について、MFAデバイスの名称リソースをusernameのみから任意の文字列に広げてあげる。
{
"Sid": "AllowIndividualUserToManageTheirOwnMFA",
"Effect": "Allow",
"Action": [
"iam:CreateVirtualMFADevice",
"iam:DeleteVirtualMFADevice",
"iam:ListMFADevices",
"iam:EnableMFADevice",
"iam:ResyncMFADevice"
],
"Resource": [
- "arn:aws:iam::*:mfa/${aws:username}",
+ "arn:aws:iam::*:mfa/*",
"arn:aws:iam::*:user/${aws:username}"
]
}
Discussion