如何强制 S3 请求通过云端

How to force S3 requests to go through cloudfront

我对 S3 和云前端还很陌生。

我在 S3 存储桶中有一个 Web 应用程序。我从另一个应用程序重新路由到该应用程序。该重新路由在查询字符串中包含一些敏感信息,因此我只想接受 https 请求。 为此,我需要云端并希望避免直接访问存储桶。

桶:abc.xyz.com.s3.amazonaws.com URL: abc.xyz.com

我在云端启用了选项 https onlyRestrict Bucket Access

虽然这在云端运行良好,但原始 url abc.xyz.com 似乎无法通过云端。 http 仍然可用,https 不可用。

有没有办法强制仅通过云端访问存储桶?

存储桶策略:

{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity ORIGINACCESSID"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::abc.xyz.com/*"
        }
    ]
}

除了在 CloudFront 中将 Restrict Bucket Access 设置为 Yes 之外,您还需要编辑 S3 存储桶策略本身以类似于:

(将 XXXXXXXXXXXXXX 字符串替换为在 CloudFront 分配的来源中为您创建的来源访问 ID)

{
    "Version": "2012-10-17",
    "Id": "Policy1476619022974",
    "Statement": [
        {
            "Sid": "Stmt1415003054675",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity XXXXXXXXXXXXXX"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::YOUR-BUCKET-NAME/*"
        }
    ]
}

您可以阅读有关使用源访问身份限制对您的 Amazon S3 内容的访问的更多信息here