【问题标题】:S3 Bucket Policy to work with CloudFront GetObject and PutObject directly to the bucket using Multer-S3S3 存储桶策略与 CloudFront GetObject 和 PutObject 一起使用 Multer-S3 直接到存储桶
【发布时间】:2021-02-28 02:48:03
【问题描述】:

我正在尝试制定一个 S3 存储桶策略,它只允许来自 CloudFront 的 GetObject 但能够将对象直接放入存储桶。

尝试了几种组合,但都没有奏效。 这是我尝试的最新尝试。

With, Block All Public Access: ALL OFF.

Bucket Policy:

{

    "Version": "2012-10-17",

    "Id": "Policy1604429581591",

    "Statement": [

        {

            "Sid": "Stmt1605554261786",

            "Effect": "Allow",

            "Principal": "*",

            "Action": "s3:PutObject",

            "Resource": "arn:aws:s3:::MYBUCKET/*"

        },

        {

            "Sid": "Stmt1605557746418",

            "Effect": "Deny",

            "Principal": "*",

            "Action": "s3:GetObject",

            "Resource": "arn:aws:s3:::MYBUCKET/*"

        },

        {

            "Sid": "Stmt1605557857544",

            "Effect": "Allow",

            "Principal": {

                "AWS": "arn:aws:iam::cloudfront:MYCLOUDFRONT"

            },

            "Action": "s3:GetObject",

            "Resource": "arn:aws:s3:::MYBUCKET/*"

        }

    ]

}

这允许我将对象放入存储桶,但使用 CloudFront URL 的 GetObject 被拒绝访问。如果我删除了

{

            "Sid": "Stmt1605557746418",

            "Effect": "Deny",

            "Principal": "*",

            "Action": "s3:GetObject",

            "Resource": "arn:aws:s3:::MYBUCKET/*"

        }

我可以从 CloudFront 以及直接从存储桶获取对象。

请帮忙!

【问题讨论】:

    标签: amazon-s3 amazon-cloudfront


    【解决方案1】:

    找到了解决办法。
    首先按照此处的说明设置 CloudFront:https://aws.amazon.com/premiumsupport/knowledge-center/cloudfront-access-to-amazon-s3/。重点是

    5.    For Restrict Bucket Access, select Yes.
    

    我正在使用 Multer-S3 上传我的图像文件。 ACL需要设置为

    acl: 'authenticated-read',
    

    我还在 S3 存储桶属性中使用 serverSideEncryption=>默认加密

    Default encryption: Enabled
    Server-side encryption: Amazon S3 master-key(SSE-S3)
    

    Multer-S3 配置

    serverSideEncryption: 'AES256',
    

    S3 存储桶权限取消阻止所有公共访问,ACL 仅启用存储桶所有者的权限。 我拥有的最终存储桶策略是:

    {
        "Version": "2008-10-17",
        "Id": "PolicyForCloudFrontPrivateContent",
        "Statement": [
            {
                "Sid": "1",
                "Effect": "Allow",
                "Principal": {
                    "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity E36AHAEXL422P3"
                },
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::MYBUCKET/*"
            },
            {
                "Sid": "Stmt1605745908405",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::MYBUCKET/*",
                "Condition": {
                    "StringEqualsIfExists": {
                        "s3:x-amz-server-side-encryption": "AES256"
                    }
                }
            }
        ]
    }
    

    通过上述所有配置,只要请求具有使用“AE256”的服务器端加密,任何人都可以使用 PubObject。直接对存储桶的 GetObject 请求将被阻止。所有 GetObject 请求都需要通过 CloudFront。

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 2023-03-31
      • 2011-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-26
      • 1970-01-01
      • 2021-03-31
      相关资源
      最近更新 更多