AWS S3策略,允许所有资源并拒绝某些资源

时间:2020-07-27 10:04:04

标签: amazon-web-services amazon-s3

为什么此政策无效?它允许所有资源上的所有命令,但不能拒绝所选文件夹!我该如何解决这类问题?

markers 'XXX' and 'YYY' --> therefore i want to extract 78665786 and 6866 

['XXX78665786YYYjajk', 'XXX6866YYYz6767'....]

2 个答案:

答案 0 :(得分:1)

以下是使用Deny的示例。 (我没有对此进行测试!)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:ListBucket"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::agdstorage"
            ],
            "Condition": {
                "StringNotLike": {
                    "s3:prefix": [
                        "Storage_WK/Agedi Monaco/Banca/*",
                        "Storage_WK/Agedi Monaco/Bilanci/*",
                        "Storage_WK/Agedi Monaco/Contenziosi/*",
                        "Storage_WK/Agedi France/Affari societari/*"
                    ]
                }
            }
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::agdstorage/*"
            ]
        },
        {
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Effect": "Deny",
            "Resource": [
                "arn:aws:s3:::agdstorage/Storage_WK/Agedi Monaco/Banca/*",
                "arn:aws:s3:::agdstorage/Storage_WK/Agedi Monaco/Bilanci/*",
                "arn:aws:s3:::agdstorage/Storage_WK/Agedi Monaco/Contenziosi/*",
                "arn:aws:s3:::agdstorage/Storage_WK/Agedi France/Affari societari/*"
            ]
        }
    ]
}

请注意,ListBucket是通过Prefix控制的,因此只需使用StringNotLike

对于GetObjectPutObject,它使用的是您列出的资源。

答案 1 :(得分:0)

ListBucket命令在存储桶级而非对象级进行操作。

以下是仅授予特定文件夹访问权限的策略示例:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["David/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/David/*"]
    }
  ]
}

请注意,ListBucket引用了存储桶,但通过指定Prefix来限制访问。

这与GetObjectPutObject不同,可以通过在Resource中提供路径来限制它们。

要了解每个命令的工作方式,请查阅Actions, Resources, and Condition Keys for Amazon S3 - AWS Identity and Access Management并参考资源类型列。

如果可能,请尝试避免使用Deny ,因为否定逻辑有时不太明显(就像这句话一样)。最好仅授予所需的权限,而不是授予所有内容,然后拒绝某些权限。例如,问题中显示的策略实际上授予删除指定文件夹之外的对象的权限(例如,在根级别),甚至删除存储桶本身(如果为空)。

如果您只是想授予用户对其拥有文件夹的访问权限,则可以使用IAM Policy Elements: Variables and Tags

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/${aws:username}/*"]
    }
  ]
}

这会根据用户名自动调整策略,以便他们可以根据用户名访问文件夹。