Aak*_*eth 6 amazon-s3 amazon-iam
I have an IAM role to be attached to a microservice in order to limit S3 folder access based on user-agent. The microservice parent account and the bucket owner are the same.
{
"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}/*"
]
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
The same S3 bucket has a default ACL where the account has R/W on objects and permissions.
Given the ACL and the IAM policy, I don't understand how this policy evaluates. For example, a user with the above role makes a put_object request to bucket-test/service/micro-b/new_object with user agent micro-a. Is this an explicit or implicit deny? Why?
基于AWS策略评估逻辑:
\n\n\n\n\n发出请求后,AWS 服务会决定是否允许或拒绝给定的请求。评估逻辑遵循以下规则:
\n\n\n
\n- 默认情况下,所有请求都会被拒绝。(通常,始终允许使用帐户中资源的帐户凭据发出的请求。)
\n- 显式允许会覆盖此默认值。
\n- 显式拒绝会覆盖任何允许。
\n
现在,如果我们查看S3 访问策略语言文档:
\n\n\n\n\n效果 \xe2\x80\x93当用户请求特定操作时会产生什么效果\xe2\x80\x94这可以是允许或拒绝。\n 如果您没有显式授予对资源的访问权限(允许),则访问权限为含蓄地否认。您还可以显式拒绝对资源的访问,这样做是为了确保用户无法访问该资源,即使不同的策略授予访问权限也是如此。
\n
现在在 S3 策略文档中指定条件:
\n\n\n\n\n访问策略语言允许您在授予权限时指定条件。Condition 元素(或 Condition 块)允许您指定策略生效的条件。
\n
从这三部分中,特别是最后一项,我们可以说您的情况是“有条件允许”,因为“条件元素允许您指定策略生效时的条件”,而这里策略中的条件是“允许”。
\n\n编辑: \n这是 AWS 的另一个有趣的博客,内容是“授权如何与多种访问控制机制一起工作?”
\n\n\n\n每当 AWS 委托人向 S3 发出请求时,授权决策取决于所有适用的 IAM 策略、S3 存储桶策略和 S3 ACL 的联合。
\n\n根据最小权限原则,决策默认为“拒绝”,并且显式“拒绝”始终胜过“允许”。例如,如果 IAM 策略授予对某个对象的访问权限,而 S3 存储桶策略拒绝对该对象的访问,并且没有 S3 ACL,则访问将被拒绝。同样,如果没有方法指定 ALLOW,则默认情况下该请求将被拒绝。仅当没有方法指定 DENY\n 并且一个或多个方法指定 ALLOW 时才会允许该请求。
\n