【问题标题】:Object creation/deletion/updates restrictions for all user/admins but a specific one: AWS S3 Bucket policy所有用户/管理员的对象创建/删除/更新限制,但特定一个:AWS S3 存储桶策略
【发布时间】:2019-08-28 20:37:18
【问题描述】:

我有一个 lambda 函数,当特定 S3 存储桶中发生创建对象操作时会触发该函数。我需要在我的存储桶中为所有用户/角色(包括管理员)做出以下限制,但特定用户除外。他们是:

  • 拒绝创建对象(意味着在存储桶的任何位置或其子文件夹中手动上传新文件)
  • 拒绝对象删除(意味着手动删除存储桶中任意位置或其子文件夹中的现有文件)
  • 拒绝对象覆盖或复制(意味着手动覆盖同名文件或在存储桶及其子文件夹中的任何位置复制文件 - 请注意版本控制已关闭)
  • 拒绝对象重命名(意味着手动重命名存储桶或其子文件夹中的现有文件)

我还需要保留我的内联策略中指定的所有 lambda 对我的存储桶的写访问权限。为了实现上述所有目标,我整理了以下 Bucket Policy:

{
            "Id": "my-bucket-policy",
            "Statement": [
                    {
                            "Action": [
                                  "s3:DeleteObject",
                                  "s3:PutObject"
                                      ],
                            "Effect": "Deny",
                            "NotPrincipal": {
                                    "AWS": [
                                            "arn:aws:iam::1234555:user/allowedUser"
                                    ]
                            },
                            "Resource": [
                                    "arn:aws:s3:::my.bucket/",
                                    "arn:aws:s3:::my.bucket/*"
                            ]
                    }
            ],
            "Version": "2012-10-17"
    }

这不起作用,我返回“策略中的主体无效”消息。你能看出我的政策有什么明显的问题吗?这是满足我要求的正确方法吗?

谢谢

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda


    【解决方案1】:

    我已经在我的环境中试用了您的策略,它对我有用。

    您的逻辑是正确的,但是即使您在 Lambda 执行策略中允许 s3:putObject 操作,您的 Lambda 函数也无法写入存储桶。存储桶策略明确拒绝对存储桶的所有写入,但允许的用户除外,并且在 AWS 策略中总是明确拒绝。

    解决方案是在 NotPrincipal 中包含 Lambda 执行角色。

    请注意,putObject 和 deleteObject 都是对象级操作,因此您无需将顶级存储桶 ARN (arn:aws:s3:::my.bucket/) 指定为存储桶策略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-23
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      相关资源
      最近更新 更多