希望为拥有 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 用户(操作步骤)
- 登录 AWS 控制台,进入IAM 服务 → 左侧「用户」→ 找到目标用户。
- 切换到「权限」标签页 → 点击「添加权限」→ 选择「附加现有策略直接」→ 点击「创建策略」。
- 在策略创建页面,选择「JSON」标签,粘贴上述模板(替换桶名)→ 点击「下一步」。
- 为策略命名(如
S3_Access_Only_TargetBucket),添加描述 → 点击「创建策略」。 - 回到用户权限页面,刷新策略列表,选中刚创建的策略 → 点击「添加权限」完成绑定。
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
总结
- 核心逻辑:通过
Deny拒绝全局列 bucket 操作,通过Allow仅授权目标 bucket 的精准资源和必要操作。 - 最小权限:仅保留用户实际需要的 Action(如只读场景删除写操作),避免过度授权。
- 资源粒度:必须同时授权
bucket和bucket/*两级资源,否则 ListBucket/GetObject 等操作会失效。
如果需要更严格的控制(比如仅允许访问 bucket 内特定前缀的对象),只需将
Resource中的YOUR_TARGET_BUCKET_NAME/*改为YOUR_TARGET_BUCKET_NAME/指定前缀/*即可。原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/318900.html