配置 AWS S3 IAM 用户权限

希望为拥有 AK/SK 的 AWS IAM 用户配置权限策略,使其仅能访问指定的 S3 存储桶(bucket),且无法列出或访问其他任何 S3 bucket,这是典型的最小权限原则应用场景,核心是通过 IAM 策略精准控制权限范围。

解决方案:配置精细化的 IAM 权限策略

AWS 的权限控制完全依赖 IAM 策略(JSON 格式),我们需要编写一个策略,拒绝用户访问所有非目标 bucket 的资源,同时允许用户对目标 bucket 执行必要操作

1. 核心策略模板(可直接复制使用)

替换模板中的 YOUR_TARGET_BUCKET_NAME 为你要授权的 bucket 名称,根据实际需求调整允许的操作(如仅读、读写等):
json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DenyListAllBuckets",
            "Effect": "Deny",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "*"
        },
        {
            "Sid": "AllowAccessToTargetBucketOnly",
            "Effect": "Allow",
            "Action": [
                // 基础权限:列出目标bucket内的对象(必选,否则无法查看bucket内容)
                "s3:ListBucket",
                // 读权限:获取bucket内的对象(根据需求保留/删除)
                "s3:GetObject",
                // 写权限:上传/删除对象(根据需求保留/删除)
                "s3:PutObject",
                "s3:DeleteObject",
                // 可选:获取bucket的基本信息
                "s3:GetBucketLocation"
            ],
            "Resource": [
                // 授权bucket本身(对应ListBucket、GetBucketLocation等bucket级操作)
                "arn:aws:s3:::YOUR_TARGET_BUCKET_NAME",
                // 授权bucket内的所有对象(对应GetObject、PutObject等对象级操作)
                "arn:aws:s3:::YOUR_TARGET_BUCKET_NAME/*"
            ]
        }
    ]
}

2. 策略关键部分解释

部分 作用
DenyListAllBuckets 明确拒绝用户执行s3:ListAllMyBuckets操作,彻底禁止列出所有 bucket
Resource 精准指定 仅授权目标 bucket(arn:aws:s3:::桶名)和其下所有对象(桶名/*
按需配置 Action 只保留用户需要的操作(如仅读则删除 PutObject/DeleteObject),最小权限

3. 应用策略到 IAM 用户(操作步骤)

  1. 登录 AWS 控制台,进入IAM 服务 → 左侧「用户」→ 找到目标用户。
  2. 切换到「权限」标签页 → 点击「添加权限」→ 选择「附加现有策略直接」→ 点击「创建策略」。
  3. 在策略创建页面,选择「JSON」标签,粘贴上述模板(替换桶名)→ 点击「下一步」。
  4. 为策略命名(如S3_Access_Only_TargetBucket),添加描述 → 点击「创建策略」。
  5. 回到用户权限页面,刷新策略列表,选中刚创建的策略 → 点击「添加权限」完成绑定。

4. 验证权限是否生效

可以通过 AWS CLI 测试(需配置该用户的 AK/SK):
# 测试1:列出所有bucket(应失败,提示权限拒绝)
aws s3 ls

# 测试2:列出目标bucket内的对象(应成功)
aws s3 ls s3://YOUR_TARGET_BUCKET_NAME

# 测试3:访问其他bucket(应失败)
aws s3 ls s3://OTHER_BUCKET_NAME

总结

  1. 核心逻辑:通过Deny拒绝全局列 bucket 操作,通过Allow仅授权目标 bucket 的精准资源和必要操作。
  2. 最小权限:仅保留用户实际需要的 Action(如只读场景删除写操作),避免过度授权。
  3. 资源粒度:必须同时授权bucketbucket/*两级资源,否则 ListBucket/GetObject 等操作会失效。
如果需要更严格的控制(比如仅允许访问 bucket 内特定前缀的对象),只需将Resource中的YOUR_TARGET_BUCKET_NAME/*改为YOUR_TARGET_BUCKET_NAME/指定前缀/*即可。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/318900.html

(0)
上一篇 2025年12月21日 22:07
下一篇 1天前

相关推荐

发表回复

登录后才能评论