能否创建区分访问密钥与用户名密码认证的AWS IAM策略?
可以用IAM策略条件区分控制台(用户名密码)和访问密钥认证
答案是肯定的,你可以通过AWS自带的条件键组合,精准区分用户是通过控制台(用户名密码)还是长期访问密钥(AK/SK)进行认证,进而实现差异化的权限管控。
核心区分逻辑
用户通过控制台登录时,AWS会自动通过STS生成临时会话凭证,这类请求会携带aws:TokenIssueTime条件键(值为凭证签发的时间戳);而直接用AK/SK调用API时,请求里不会有这个键。利用这个差异就能把两种认证方式分开。
如果还要结合MFA状态,还可以用aws:MultiFactorAuthPresent键——控制台登录启用MFA的话,这个键值为true,未启用则不存在或为false。
实际策略示例
比如你要实现:拒绝未给自己添加Compliance:Done标签的控制台用户执行s3:ListBucket,但允许AK/SK用户正常操作,策略代码如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::your-target-bucket", "Condition": { "Null": { "aws:TokenIssueTime": "false" // 只匹配控制台登录的请求 }, "StringNotEquals": { "aws:PrincipalTag/Compliance": "Done" // 检查用户是否有合规标签 }, "BoolIfExists": { "aws:MultiFactorAuthPresent": "false" // 可选:额外限制未启用MFA的用户 } } } ] }
注意事项
- 控制台的所有操作本质都是用临时凭证发起的,所以都会带
aws:TokenIssueTime;AK/SK调用则完全不会有这个键,这个区分逻辑很可靠。 - 测试时可以分别用控制台和CLI执行目标操作,验证权限是否生效。
- 如果要排除角色登录的情况,可以再加一个
StringEquals条件,限定aws:PrincipalType为User。
内容的提问来源于stack exchange,提问作者Szzaass
相关产品推荐
相关产品推荐

