如何解决允许基于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","Principal": {
"AWS": "arn:aws:iam::1234567890:role/EC2Role"
},]
}
如您所见,我们希望公众通常能够获取链接到的对象。这行得通。
我们希望开发人员能够使用其AWS密钥访问存储桶中的特定隐藏文件夹。这行得通。
我们希望EC2能够仅使用分配的安全角色在同一隐藏文件夹上运行aws-cli命令。这不起作用。
我还在EC2语句上尝试过"Effect": "Deny","NotPrincipal": { ... }
,但这也不起作用。
此ACL有什么问题?
解决方法
在此您有一个Deny
语句,其中委托人不是那个特定的IAM用户。在任何AWS特权中,deny will always override an allow就是这里发生的情况。
要在此处允许此操作,您还需要在NotPrincipal
语句中include the IAM role arn。这看起来像下面的语句。
{
"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/*"
}
]
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。