amazon-web-services - 将 AWS S3 存储桶访问限制为单个角色
问题描述
我正在尝试将对 S3 存储桶的访问限制为单个 EC2 角色。我已将以下存储桶策略附加到存储桶,并且该存储桶已关闭公共访问。但是,当应用该策略时,我仍然可以在没有附加角色的情况下使用 curl 从实例访问存储桶。谁能让我知道我错过了什么?
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucketname",
"Condition": {
"StringLike": {
"aws:userid": [
"AROQQQCCCZZDDVVQQHHCC:*",
"123456789012"
]
}
}
},
{
"Sid": "",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:DeleteObject",
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::bucketname/*",
"Condition": {
"StringLike": {
"aws:userid": [
"AROQQQCCCZZDDVVQQHHCC:*",
"123456789012"
]
}
}
},
{
"Sid": "",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucketname/*",
"arn:aws:s3:::bucketname"
],
"Condition": {
"StringNotLike": {
"aws:userid": [
"AROQQQCCCZZDDVVQQHHCC:*",
"123456789012"
]
}
}
}
]
}
解决方案
我相信以下 S3 策略应该可以完成这项工作。请记住将角色 arn 替换为我认为它附加到您的 EC2 实例的正确角色。此外,请确保您的 ec2 角色具有正确的策略来执行列表、获取、放置、删除操作。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "ExplicitDenyAllActions",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucketname/*",
"arn:aws:s3:::bucketname"
]
},
{
"Sid": "AllowListForIAMRole",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:role/ROLENAME"
},
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucketname"
},
{
"Sid": "AllowDeleteGetPutForIAMRole",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111111111111:role/ROLENAME"
},
"Action": [
"s3:Delete*",
"s3:Get*",
"s3:Put*"
],
"Resource": [
"arn:aws:s3:::bucketname/*",
"arn:aws:s3:::bucketname"
]
},
{
"Sid": "AllowAllActionForUser",
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::111111111111:user/USERNAME"
]
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucketname/*",
"arn:aws:s3:::bucketname"
]
}
]
}
有用的文档,您可以在其中找到更多信息 ->有关 s3 策略的 AWS 文档
推荐阅读
- go - 带有 $lookup 查询的 MGO Pipe 不会附加“已加入”集合中的匹配文档
- vue.js - v-for 未定义的循环属性“事件”,但适用于硬编码索引或没有属性
- c# - 更改对象数组中的一个元素会更改所有元素,c#,如何按值分配对象
- chart.js - 如何在数据标签中给出断线
- vba - 存在命令按钮时的奇怪行为。字VBA
- python - 从范围创建十六进制代码列表
- java - Spring Boot,组合类的 Thymeleaf 验证
- c++ - 有没有办法修复编译器找不到特定的 openCV 变量/函数?
- javascript - 图像加载为空
- google-cloud-firestore - 如何创建具有类似于 JS ES6 中模板文字的变量的字符串?