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

如何调整S3 Bucket Policy:仅允许指定IAM用户及角色受限访问

解决方案

以下是满足需求的S3桶策略配置,既保留原有强安全控制,又实现了角色的目录权限分配:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<my-bucket-name>",
                "arn:aws:s3:::<my-bucket-name>/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "aws:userId": [
                        "<my IAM userId>",
                        "<my AWS AccountId>",
                        "<roleA的唯一ID>",
                        "<roleB的唯一ID>"
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<我的IAM用户ARN>"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<my-bucket-name>",
                "arn:aws:s3:::<my-bucket-name>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<roleA的ARN>"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<my-bucket-name>",
                "arn:aws:s3:::<my-bucket-name>/folderA/*"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "folderA/*",
                        ""
                    ]
                }
            }
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "<roleB的ARN>"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:DeleteObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<my-bucket-name>",
                "arn:aws:s3:::<my-bucket-name>/folderB/*"
            ],
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "folderB/*",
                        ""
                    ]
                }
            }
        }
    ]
}

关键配置说明

  • 核心拒绝策略:保留原有的Deny语句,将roleA、roleB的唯一ID加入aws:userId白名单。所有不在白名单内的主体(包括账户内其他IAM用户)都会被拒绝访问,确保基础安全。角色唯一ID可通过AWS控制台(角色详情页)或CLI命令aws iam get-role --role-name <角色名>获取(返回结果中的RoleId字段)。
  • 自身完整权限:新增Allow语句,明确赋予你的IAM用户桶及所有对象的全部S3操作权限,覆盖所有管理需求。
  • 角色目录权限:
    1. 对roleA、roleB分别配置Allow语句,限定仅能对对应文件夹执行读写删操作(GetObject/PutObject/DeleteObject)。
    2. 添加ListBucket权限并通过s3:prefix条件限制,确保角色只能查看对应文件夹下的内容,无法遍历整个桶的其他目录。
    3. 资源部分同时包含桶本身(用于列表操作)和目标文件夹的对象路径。

注意事项

  • 替换所有占位符:<my-bucket-name>、<my IAM userId>、<my AWS AccountId>、<roleA的唯一ID>、<roleA的ARN>等需替换为实际值。
  • 最小权限优化:如果不需要删除权限,可移除s3:DeleteObject动作,进一步缩小权限范围。
  • 策略验证:修改后可通过AWS IAM Access Analyzer验证策略有效性,避免语法错误或权限冲突。

内容的提问来源于stack exchange,提问作者Aamit

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 23:55:22