配置强制CLI使用MFA的正确AWS策略
解决方案:配置MFA强制验证的IAM策略
1. 修正用户的IAM策略(附加到newUserMumbai用户)
你的现有策略存在两个关键问题:
- 第二个
sts:AssumeRole的Statement未添加MFA条件,导致无需验证MFA就能执行角色切换,直接绕开MFA限制 - 第三个Statement用了泛用的
apigateway:POST,但import-rest-api对应的IAM动作是apigateway:ImportRestApi,需使用具体动作名
正确的用户策略需确保所有操作(包括AssumeRole)都必须通过MFA验证:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "*", "Resource": "*", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } }, { "Effect": "Allow", "Action": "iam:ListMFADevices", "Resource": "arn:aws:iam::681278469643:user/newUserMumbai" } ] }
- 第一个Statement:强制所有操作必须携带MFA验证才能执行
- 第二个Statement:允许用户查看自身MFA设备(可选,若脚本已硬编码或用户手动输入序列号则可省略)
2. 配置角色的信任策略(针对TestiRooli1角色)
仅靠用户策略还不够,需确保只有经过MFA验证的用户才能假设该角色,在角色的信任关系中添加MFA条件:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::681278469643:user/newUserMumbai" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } ] }
3. 配置角色的权限策略(针对TestiRooli1角色)
给角色分配实际需要的操作权限,比如允许apigateway:ImportRestApi及其他你需要的CLI操作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "apigateway:ImportRestApi", // 在此添加其他需要的CLI操作,例如s3:ListBuckets等 "sts:GetCallerIdentity" ], "Resource": "*" } ] }
4. 脚本执行的关键注意事项
执行sts assume-role时必须携带MFA参数,否则会被拒绝:
aws sts assume-role ` --role-arn "arn:aws:iam::681278469643:role/TestiRooli1" ` --role-session-name "MFA-Auth-Session" ` --serial-number "arn:aws:iam::681278469643:mfa/newUserMumbai" ` --token-code "你的MFA令牌"
- 执行完成后,需将返回的
AccessKeyId、SecretAccessKey、SessionToken设置为环境变量,或写入AWS配置文件,确保后续apigateway import-rest-api命令使用这些已通过MFA验证的临时凭证
验证逻辑说明
- 若用户未提供正确MFA令牌,
sts assume-role会直接失败(用户策略和角色信任策略均要求MFA) - 即使绕过用户策略,角色的信任策略也会拒绝未验证MFA的角色切换请求
- 成功切换角色后,临时凭证自带MFA验证标识,后续所有CLI操作会自动满足用户策略中的
aws:MultiFactorAuthPresent条件
内容的提问来源于stack exchange,提问作者JukkaT
相关产品推荐
相关产品推荐

