发布于 2026-01-06 7 阅读
0

设置 CloudFront 和 Amazon S3 以安全高效地在 Web 应用程序上交付对象

设置 CloudFront 和 Amazon S3 以安全高效地在 Web 应用程序上交付对象

什么是S3?

  • AWS S3(简单存储服务)是一种对象存储服务,提供业界领先的可扩展性、数据可用性、安全性和性能。
  • 企业可以随时随地通过网络存储和检索任意数量的数据。S3 具有极高的持久性,旨在确保对象在一年内 99.999999999% 的持久性,使其成为存储关键数据的可靠且安全的解决方案。
  • S3 广泛用于在互联网上存储和提供对象,无论是图像、视频还是任何其他非结构化数据。但是,当我们将 S3 与 CloudFront 结合使用时,它能带来诸多好处。

什么是 Cloudfront?

  • Cloudfront 是 AWS 内容分发网络,可加速将您的静态和动态 Web 内容(例如 .html、.css、.js 和图像文件)分发给用户。
  • CloudFront 通过名为边缘节点的全球数据中心网络提供您的内容。

以下是 CloudFront 的一些应用:

  • 内容分发: CloudFront 通过在全球边缘节点缓存内容,加速内容分发。这可以减少用户访问内容所需的时间,并提高 Web 应用程序的性能。

  • 视频流: CloudFront 可为全球用户提供高质量的视频流。它还可以与 AWS Elemental Media Services 集成,提供完整的视频流解决方案。

  • 网站安全: CloudFront 与 AWS Shield 集成,可提供针对 DDoS 攻击的防护。它还支持 SSL/TLS 加密,以保护您传输中的内容。

  • 全球应用: CloudFront 通过在全球边缘节点缓存您的内容,为您的应用提供全球覆盖。这使用户能够从地理位置更近的位置访问您的内容,从而降低延迟并提升用户体验。

  • API 网关: CloudFront 可用作 API 网关的自定义源。这允许您在边缘位置缓存 API 响应,从而减轻 API 后端的负载并提高 API 的性能。

图2

使用 CloudFront 提供 S3 对象服务有以下几个优点:

图1
1. 性能提升: CloudFront 是一个内容分发网络 (CDN),它将内容缓存到世界各地的边缘节点。通过使用 CloudFront 提供 S3 对象,您可以降低延迟,缩短远离 S3 存储桶的用户的加载时间,从而提升应用程序的性能。

2. 降低成本:使用 CloudFront 提供 S3 对象服务,可以通过在边缘位置缓存频繁访问的内容来降低数据传输成本。这减少了对 S3 存储桶的请求次数,从而有助于降低数据传输成本。

3.) 提高安全性: CloudFront 可以通过多种身份验证方法(例如签名 URL 或 AWS Identity and Access Management (IAM) 策略)来限制对内容的访问,从而帮助提高 S3 对象的安全性。

4.) 自定义: CloudFront 提供一系列自定义选项,例如自定义 SSL 证书、自定义错误页面和内容压缩,可以帮助您优化向用户交付 S3 对象。

5. 可扩展性: CloudFront 旨在处理高流量,并可自动扩展以适应需求增长。这有助于确保您的应用程序即使在高流量期间也能保持高可用性和响应速度。

总的来说,对于许多需要在全球范围内分发内容、提高应用程序性能和降低成本的 AWS 客户而言,使用 CloudFront 提供 S3 对象是一种最佳实践。

配置 S3 和 Cloudfront,以便通过 Web 应用程序提供对象服务。

客观的

1.) 登录 AWS 管理控制台。

2.) 创建并设置S3 存储桶(私有)以存储对象。

3.)为您的 S3 存储桶创建Cloudfront 分发。

4.) 为 Web 应用程序设置IAM 角色和权限。

5)最后,测试应用程序!!!

项目实施步骤:

1.) 登录 AWS 管理控制台。

  • 首先,使用您的用户名和密码登录 AWS 控制台,然后选择合适的区域,例如 us-east-1。

2.) 创建并设置 S3 存储桶(私有)以存储对象。

  • 让我们搜索 S3 并打开 S3 控制台。
  • 创建 S3 存储桶:
    • globally unique name你的桶指定一个区域。s3 1
    • 设置object ownership并保持ACL's disableds3 2
    • Block all public access- 它为您的数据提供额外的安全保障,防止未经授权的访问,并确保您的数据始终受到保护。s3 3
    • Enable the versioning- 通过 S3 版本控制,每次更新或删除对象时,都会创建一个对象的新版本,使用户能够访问和恢复对象的先前版本。s3 4
    • Enable the encryption在服务器端加密中,Amazon S3 会在将对象保存到 AWS 数据中心的磁盘之前对其进行加密,然后在您下载对象时对其进行解密。所有 Amazon S3 存储桶默认都已配置加密,并且所有上传到 S3 存储桶的新对象都会自动进行静态加密。S3 5
    • Object lock它有助于防止意外删除或修改对象。通过对象锁定,您可以为存储桶中的对象设置保留期限,在此期间,对象将无法被删除或修改。目前,我们将保留此默认设置。S3 6
    • 最后点击Create bucket
  • 现在让我们上传一些对象到 S3 存储桶中,用于测试或项目。S3 7

3.)为您的 S3 存储桶创建Cloudfront 分发。

  • 在 AWS 控制台搜索栏中搜索 CloudFront,然后打开 CloudFront 控制面板。
  • 从下拉列表中选择存储桶的源域名,并输入 CloudFront 分发的名称。cf 1
  • 源访问权限设置为源访问控制设置cf 2
  • 我们还需要access control setting为这个 CloudFrony 发行版创建如下所示的文件:cf 3
  • Enable the Shield因为它有助于最大限度地减少源站负载,提高其可用性,并降低其运营成本。cf 4
  • 默认缓存行为设置中,按如下方式设置配置,否则保持默认设置。参考 5
  • 目前函数关联设置为可选作为默认值。
  • 最后一部分(即设置)中,请根据您的使用场景和需求进行如下选择:
    • 在此过程中,我们需要选择价格类别以及要与之关联的 AWS WAF Web ACL。
    • 如果要向 Clodfront 发行版添加自定义域名,可以在这里添加。
    • 默认根对象中,如果用户请求根 URL,则会返回您指定的对象。cf 6
  • CloudFront 分发创建完成,我们需要在相应的配置中添加指定的策略S3 Bucket policy。因此,请从此处复制存储桶策略。参见第7页
  • 然后go to S3 bucket > Permissions > Edit bucket policy参考 8

4.) 为 Web 应用程序设置 IAM 角色和权限。

图片 232

  • 现在,您可以在应用程序中使用此 CloudFront 分发。通常PutObject,应用程序需要 S3 存储桶的GetObject访问DeleteObject权限。为此,您需要通过IAM 用户或角色(推荐)为您的应用程序授予这些权限。
  • Get 操作(仅限 Web 应用程序用户读取,非匿名用户)将由 Cloudfront 处理。
  • 对于 Put 和 delete 对象,您需要创建一个 IAM 角色并附加以下 IAM 策略。
    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::cloudfront-demo1-s3/*",
            ]
        }
    ]
}
Enter fullscreen mode Exit fullscreen mode
  • 现在,将IAM 角色分配给 Web 应用程序服务器**,一切就绪。

5.) 最后,测试应用程序!

  • 现在我们可以测试 CloudFront 域,它已设置为从私有 S3 存储桶交付对象。
  • 点击后https://Distribution-domain-name/s3-object-name,将返回如下内容。参见第9页
  • 而如果我们直接访问该域名https://Distribution-domain-name,它将显示我们在默认根对象中设置的对象。参考 10

🚩🚩 注意:一些实用链接:

文章来源:https://dev.to/aws-builders/setup-cloudfront-amazon-s3-to-deliver-objects-on-the-web-apps-securely-efficiently-2gnk