amazon-web-services - 允许基于 EC2 角色的 S3 存储桶操作
问题描述
我们的 EC2 使用 IAM 角色进行保护。当尝试运行aws s3 cp
我看到的 AWS 控制台命令时:
fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden
如果基于给定密钥的特定用户允许,则没有问题。这只是不适用于角色。
这是存储桶 ACL:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Public",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
},
{
"Sid": "Devs",
"Effect": "Deny",
"NotPrincipal": {
"AWS": "arn:aws:iam::1234567890:user/DevUser"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/something-privileged/*"
},
{
"Sid": "EC2s",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::1234567890:role/EC2Role"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/something-privileged/*"
},
]
}
如您所见,我们希望公众通常能够获取我们链接到的对象。这行得通。
我们希望开发人员能够使用他们的 AWS 密钥访问存储桶中的特定隐藏文件夹。这行得通。
我们希望 EC2 能够仅使用分配的安全角色在同一个隐藏文件夹上运行 aws-cli 命令。这不起作用。
我也尝试"Effect": "Deny", "NotPrincipal": { ... }
过 EC2 声明,但也没有用。
这个 ACL 有什么问题?
解决方案
您有一个Deny
声明,其中委托人不是特定的 IAM 用户。在任何 AWS 特权中,拒绝总是会覆盖允许,这就是这里发生的情况。
要在此处允许此操作,您还需要在语句中包含 IAM 角色 arn 。NotPrincipal
这看起来像下面的语句。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Public",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
},
{
"Sid": "Devs",
"Effect": "Deny",
"NotPrincipal": {
"AWS": ["arn:aws:iam::1234567890:user/DevUser", "arn:aws:iam::1234567890:role/EC2Role"]
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::my-bucket/something-privileged/*"
}
]
}
推荐阅读
- c++ - 如何解决与测试的链接问题?
- oracle - 如何为 OCI Kubernetes 集群中的服务设置静态 LoadBalancer IP?
- python - 从同一个python程序下载后如何导入python模块
- entity-framework - 对内部集合的 DbSet LINQ 查询不会引发 Argumentexception
- google-cloud-platform - 谷歌云,如何重写存储桶服务的负载均衡器主机和路径,这样我就不必将我的文件嵌套在下面,例如:/files/public?
- capacitor - 如何在 Capacitor ImagePicker 中获取纬度/经度
- mysql - 在两个表之间的 WHERE 子句中使用 mysql SUM()
- python - pm.Simulator 不接受单参数向量函数
- python - Pandas 从值中减去值 - 使用 DateTime 7 天 - .shift 不是答案
- android - 播放应用签名以进一步上传 Alpha 大头钉