我有一个IAM角色要附加到微服务,以便根据用户代理限制S3文件夹访问。微服务父帐户和存储桶拥有者是相同的。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:*"
],
"Resource": [
"arn:aws:s3:::bucket-test/service/${aws:useragent}/*"
]
},
{
"Sid": "AllowListingOfUserFolder",
"Action": [
"s3:ListBucket"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::bucket-test"
],
"Condition": {
"StringLike": {
"s3:prefix": [
"service/${aws:useragent}/*"
]
}
}
}
]
}
相同的S3存储桶具有默认ACL,其中帐户在对象和权限上具有R / W.
鉴于ACL和IAM政策,我不了解此政策的评估方式。例如,具有上述角色的用户向put_object
用户代理bucket-test/service/micro-b/new_object
发出micro-a
请求。这是明确的还是隐含的否认?为什么呢?
答案 0 :(得分:1)
基于AWS Policy evaluation logic:
发出请求时,AWS服务会决定是允许还是拒绝给定的请求。评估逻辑遵循以下规则:
- 默认情况下,拒绝所有请求。 (一般来说,提出要求 使用帐户凭据来获取帐户中的资源 永远允许。)
- 显式允许会覆盖此默认值。
- 明确的拒绝会覆盖任何允许。
醇>
现在,如果我们查看S3 access policy language documentation:
效果 - 当用户请求特定操作时会产生什么影响 - 这可以是允许或拒绝。 如果您未明确授予对(允许)资源的访问权限,则会隐式拒绝访问。您还可以明确拒绝对资源的访问,即使其他策略授予访问权限,您也可以这样做以确保用户无法访问该资源。
现在指定Conditions in S3 policy documentation:
访问策略语言允许您在授予权限时指定条件。 Condition元素(或Condition块)允许您指定策略生效的条件。
从这3个部分,特别是最后一部分我们可以说你的情况是“条件允许”,因为 “条件元素允许你指定政策何时生效的条件 < / strong>“此处您的政策中的条件是”允许“。
修改强> 以下是来自AWS "How does authorization work with multiple access control mechanisms?"
的另一篇有趣博客每当AWS委托人向S3发出请求时,授权决策取决于所有适用的IAM策略,S3存储桶策略和S3 ACL的并集。
根据最小特权原则,决策默认 对于DENY和明确的DENY总是胜过ALLOW。例如,如果 IAM策略授予对象S3存储桶策略的访问权限 拒绝访问该对象,并且没有S3 ACL,然后访问将 被拒绝。同样,如果没有方法指定ALLOW,那么 默认情况下,请求将被拒绝。仅当没有方法指定DENY时 并且一个或多个方法指定允许请求的允许。