当前位置: 首页 > 知识库问答 >
问题:

AWS bucket策略语句优先级顺序

秦育
2023-03-14

我试图限制用户使用我的桶策略访问我的桶。我有一组用户,他们都有一个S3FullAccess策略。我不能改变IAM中的任何东西。我只能使用我的遗愿保单。所以我想使用桶策略控制用户的访问。我把用户分成3类。

  1. 管理员访问我的桶(所有访问我的桶)
  2. 访问我的桶的权限有限的用户(如get-buk-策略,get-buk-位置)
  3. 无法访问我的桶。(无法访问我的桶)

下面的策略是我尝试过的,但不起作用。

{
    "Version": "2012-10-17",
    "Id": "PolicyTesting",
    "Statement": [
        {
            "Sid": "0",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<<account_id>>:user/users_with_limited_access"
            },
            "Action": [
                "s3:GetBucketPolicy",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<<my_bucket_name>>",
                "arn:aws:s3:::<<my_bucket_name>>/*"
            ]
        },
        {
            "Sid": "1",
            "Effect": "Deny",
            "NotPrincipal": {
                "AWS": "arn:aws:iam::<<account_id>>:user/admin_users"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::<<my_bucket_name>>",
                "arn:aws:s3:::<<my_bucket_name>>/*"
            ]
        }
    ]
}

我尝试了上述策略,但只有管理员用户才能访问桶。访问权限受限的用户无法执行他们授予的操作,如get-buk-策略、get-buk-位置。他们得到一个访问拒绝异常。帮我解决这个问题。

共有2个答案

吴腾
2023-03-14

您应该非常小心使用NotPrincipal。最好的做法是避免同时使用它。大多数情况下,在不使用“危险的”NotPrincipal的情况下,很容易实现相同的功能(策略语义)。

我认为您最好创建特定的IAM角色,并将它们分配给您希望允许访问S3 bucket的相应用户组。在此之后,使用主体“*”aws:userIdaws:PrincipalArn的显式Deny阻止对bucket的所有其他访问。

看看这篇文章了解更多细节https://levelup.gitconnected.com/how-i-locked-the-whole-company-out-of-an-amazon-s3-bucket-1781de51e4be

最好的,Stefan

平嘉熙
2023-03-14

AWS IAM策略中没有优先级顺序。请参考此处的策略评估逻辑。

AWS强制代码评估帐户中应用于请求的所有策略。如果代码发现哪怕是一个应用的显式拒绝,代码将返回最终的拒绝决定。

当前策略拒绝除管理员用户以外的所有用户执行任何S3操作。因此users_with_limited_access无法执行授予的操作。

请使用适当的负责人更新您的政策(根据您问题中的评论),并参考以下更新的政策使其生效。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/s3-limited-access-user"
            },
            "Action": [
                "s3:GetBucketPolicy",
                "s3:GetBucketLocation",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket/*"
            ]
        },
        {
            "Sid": "2",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/s3-no-access-user"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket/*"
            ]
        },
        {
            "Sid": "3",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/admin-user"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::example-bucket",
                "arn:aws:s3:::example-bucket/*"
            ]
        }
    ]
}
 类似资料:
  • 我有一个带有display flex的容器,其中包含2个项目。这两个项都有文本省略号以支持长文本。我想在项目之间设置一些优先级,以便根据需要将项目1作为匹配位置,为项目2保留一些固定空间。这意味着,如果容器的宽度是200px,那么第2项的最小尺寸是50px,我希望第1项达到150px(然后是文本省略号)。最好的方法是什么? JSFIDLE

  • 问题内容: 我有以下代码: 此功能在专用的go例程中执行,并每秒发送一次心跳消息。取消上下文后,整个过程应立即停止。 现在考虑以下情形: 这将在关闭的上下文中启动心跳例程。在这种情况下,我不希望传输任何心跳。因此,应该立即输入选择中的第一个块。 但是,似乎无法保证对块进行评估的顺序,并且即使上下文已取消,该代码有时也会发送心跳消息。 实施这种行为的正确方法是什么? 我可以在第二个中添加“ isCo

  • 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -> 成员选择(指针) 对象指针->成员名 2 - 负号运算符 -表达式 右到左 单目运算符 (类型) 强制类型转换 (数据类型)表达式 ++ 自增运算符 ++变量名/变量名++ 单目运算符 -- 自减运算符 --变

  • 问题内容: 我想了解express.js中的顺序优先级。例如,下面的代码 如果请求来自客户端localhost:3000 / api / abc和localhost:3000 / user / abc,则来自api和用户模块的响应。但是,如果我发出类似localhost:3000 / myName / xyz的请求,则应用程序模块将返回响应。此行为使我担心expressjs的优先顺序以及路由器模块

  • 我正在研究一种算法,在该算法中,我希望在从该优先级队列中删除元素时,保持优先级队列中具有相同优先级的元素的FIFO顺序。 虽然,我已经看到了将自动递增的序列号作为辅助键的解决方案,并使用它来打破联系,但我需要类似的链接,但我面临的问题是,我想要比较的元素-TestItemChange(下面示例中的类)没有实现Compariable,我无法(也不想)修改它以使其实现。所以现在,在优先级队列中没有FI

  • 问题内容: 我的网页包含: 引用的样式表包含: 我在ID中有一张表格,希望单元格有一些填充。但是,引用的样式表优先于内联样式。我可以通过Firebug直观地看到这一点。如果我关闭Firebug中的指令,则向左填充将生效。 我该如何上班? 问题答案: 正如其他人提到的那样,您有一个特异性问题。当确定两个规则中的哪一个优先时,CSS引擎会计算每个选择器中的s 数量。如果一个比另一个多,就使用它。否则,