在这篇博文中,我们将学习如何使用 Amazon CloudFront 和 Amazon S3 搭建一个安全的静态内容分发网络,并通过自定义域名 img.example.com 访问存储在 S3 中的图像资源。

准备工作:

  • 一个 AWS 账户
  • 一个已注册的域名 example.com
  • 一个已创建ssl证书*.example.com

步骤 1: 创建 S3 存储桶

  1. 登录 AWS 管理控制台,进入 S3 服务页面。
  2. 创建一个新的存储桶,命名为 img-bucket
  3. 将您的图像资源上传到 img-bucket 存储桶中。
  4. 在存储桶的"权限"选项卡中,点击"存储桶策略"按钮,并添加以下策略:
{
    "Version": "2008-10-17",
    "Id": "PolicyForCloudFrontPrivateContent",
    "Statement": [
        {
            "Sid": "AllowCloudFrontServicePrincipal",
            "Effect": "Allow",
            "Principal": {
                "Service": "cloudfront.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::img-bucket/*",
            "Condition": {
                "StringLike": {
                    "AWS:SourceArn": "arn:aws:cloudfront::<your-account-id>:distribution/*"
                }
            }
        }
    ]
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

请将 <your-account-id> 替换为您自己的 AWS 账户 ID。这个策略将只允许 CloudFront 服务访问 img-bucket 存储桶中的对象。

步骤 2: 创建 CloudFront Web 分发

  1. 在 AWS 管理控制台中,进入 CloudFront 服务页面。
  2. 点击"创建分发"按钮,选择"Web"分发类型。
  3. 在"源设置"步骤中,选择"S3 存储桶"作为源,并选择 img-bucket
  4. 在"默认缓存行为设置"步骤中,根据您的需求进行配置。
  5. 在"分发设置"步骤中,选择"Web"作为分发方式,并输入自定义域名 img.example.com
  6. 在"限制访问"步骤中,选择"使用签名 URL 或签名 Cookie"选项。
  7. 在"源访问控制"步骤中,选择"创建新的 OAC"选项,命名为 img-oac
  8. 在"查看器协议策略"步骤中,选择"Redirect HTTP to HTTPS"选项。
  9. 在"备用域名(CNAME)"步骤中,输入 img.example.com
  10. 在"自定义 SSL 证书"步骤中,选择"自定义 SSL 证书"选项,并上传您的 *.example.com 证书。
  11. 完成其他配置,然后点击"创建分发"按钮。

步骤 3: 配置 Route 53

  1. 在 AWS 管理控制台中,进入 Route 53 服务页面。
  2. 选择托管区域 example.com
  3. 点击"创建记录集"按钮,添加一个新的记录集。
  4. 设置记录名称为 img
  5. 选择记录类型为 A - IPv4 地址
  6. 在"值"字段中,输入 CloudFront 分发的域名,例如 d365i1v0qrxr6m.cloudfront.net
  7. 点击"创建记录集"按钮。

步骤 4: 测试访问

  1. 等待 DNS 记录生效,这可能需要一些时间。
  2. 在浏览器中访问 https://img.example.com。如果一切配置正确,您应该能够看到存储在 img-bucket 中的图像资源。

通过这种架构,您的图像资源将通过 CloudFront 的全球边缘网络进行分发,从而提供更快的响应速度和更好的用户体验。同时,源访问控制策略确保了只有 CloudFront 可以访问您的 S3 存储桶,有效地保护了您的内容不被未经授权的访问。

值得注意的是,我们还配置了 HTTPS 协议和自定义 SSL 证书,以确保图像资源的传输过程中受到加密保护,提高了安全性。

总结一下,通过自定义域名访问 Amazon S3 中的图像资源包括以下主要步骤:

  1. 创建 S3 存储桶并上传图像资源。
  2. 配置存储桶策略,只允许 CloudFront 访问。
  3. 创建 CloudFront Web 分发,并配置源访问控制、自定义域名和 SSL 证书。
  4. 在 Route 53 中配置 DNS 记录,将自定义域名指向 CloudFront 分发。
  5. 通过自定义域名访问图像资源。

通过这种方式,您可以充分利用 AWS 的云服务,为您的静态内容提供安全、高性能和可扩展的分发服务。