You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法在AWS S3存储桶策略中使用aws:username获取当前IAM用户名

解决S3桶策略中使用${aws:username}变量报错的问题

问题原因

AWS S3桶策略不支持在Principal或Resource字段中直接使用${aws:username}这类IAM上下文变量。这类变量仅在IAM身份策略(附加到用户/组/角色的策略)中可以被正确解析,直接在桶策略中使用会触发策略验证失败。

解决方案

方法一:使用IAM身份策略(推荐)

创建IAM策略并附加到目标IAM用户或用户组,利用${aws:username}变量动态匹配用户专属的S3路径,无需修改S3桶策略。

示例IAM策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::example-bucket/${aws:username}/*"
        }
    ]
}

当用户执行S3操作时,AWS会自动将${aws:username}替换为当前用户的IAM用户名,确保每个用户只能访问自己命名的目录。

方法二:桶策略结合条件键(仅限必须用桶策略的场景)

如果必须通过桶策略实现权限控制,不能直接在Principal中使用变量,但可以通过Condition字段结合aws:username条件键来限制访问范围:

示例桶策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::1111111111:user/*"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::example-bucket/*",
            "Condition": {
                "StringEquals": {
                    "s3:prefix": "${aws:username}/*"
                }
            }
        }
    ]
}

该策略允许账户下所有IAM用户访问桶内资源,但通过Condition限制用户仅能访问以自己IAM用户名为前缀的目录路径。


内容的提问来源于stack exchange,提问作者Wai Yan Hein

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:13:15