本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用与静态 IP 地址关联的终端节点整合 Amazon S3 预签名 URL 生成和对象下载
Amazon Web Services 的 Song Jin、Eunhye Jo 和 Jun Soung Lee
摘要
此模式通过创建安全的自定义对象下载 URLs 预签名,简化了对亚马逊简单存储服务 (Amazon S3) Simple Service 的访问。该解决方案为单个端点提供了一个具有唯一域和静态 IP 地址的端点。它专为需要将 API 和 Amazon S3 终端节点整合到具有静态 IP 地址的统一域下的客户量身定制。该用例涉及用户遵守 IP 和域名许可名单防火墙策略,将 API 访问权限限制在特定的域和 IP 地址。
该架构采用密钥 AWS 服务,包括 AWS Global Accelerator Amazon API Gateway AWS Lambda、Application Load Balancer 和 Amazon S3。 AWS PrivateLink此设计将用于生成预签名的 API URLs 和 Amazon S3 终端节点集中到一个域下,该域链接到具有两个静态 IP 地址的加速器。因此,用户可以通过具有静态 IP 地址的统一域终端节点毫不费力地请求 URLs 和下载 Amazon S3 对象。
这种架构特别适合具有严格政策或合规要求的客户,例如公共、医疗和金融领域的客户。
先决条件和限制
先决条件
活跃的 AWS 账户
您的自定义域名的公共托管区域
在您选择的 AWS Certificate Manager (ACM) 中导入 AWS 区域 的域名
限制
Amazon S3 存储桶名称必须与终端节点的域名相匹配。此要求是为了确保可以通过单个 API 终端节点为 Amazon S3 终端节点提供服务。
API Gateway 中使用的自定义域名应与单个 API 端点的域名一致。
有些 AWS 服务 并非全部可用 AWS 区域。有关区域可用性,请参阅按地区划分的AWS 服务
。有关特定终端节点,请参阅服务终端节点和配额,然后选择服务的链接。
架构
下图显示了此模式的目标架构和工作流程。

该图说明了以下概念和工作流程:
用户使用提供的自定义终端节点、自定义域名和关联的 IP 地址 AWS Global Accelerator,发起生成预签名 URL 的请求。
Lambda 函数生成指向自定义终端节点的预签名 URL。它以 301 重定向进行响应,其中包含生成的预签名 URL。通过重定向的预签名 URL,用户使用通过 Global Accelerator 提供的自定义端点自动下载对象。
预签名 URL 生成和对象下载工作流程的整体架构组成部分如下:
由全球加速器配置静态 IP 地址。
使用自定义域名将加速器的别名作为 A 记录注册到 Amazon Route 53 公共托管区域。
使用与注册的自定义域名匹配的存储桶名称创建 Amazon S3 存储桶。
为 API Gateway 和 Amazon S3 服务创建 VPC 终端节点。
配置面向内部的 Application Load Balancer 以连接到全球加速器。
为附有 ACM 证书的 API Gateway 分配自定义域名。
部署与 Lambda 函数集成的私有 API Gateway。
Lambda 函数配备了一个附加的 AWS Identity and Access Management (IAM) 角色(具有GetObject权限)。
工具
AWS 服务
Amazon API Gateway 可帮助您创建、发布、维护、监控和保护任何规模的 RES WebSocket APIs T、HTTP。
应用程序负载均衡器将传入的应用程序流量分配到多个可用区域中的多个目标,例如亚马逊弹性计算云 (Amazon EC2) 实例。
AWS Certificate Manager (ACM) 可帮助您创建、存储和续订 X.509 公有和私有 SSL/TLS X.509 证书和密钥,以保护您的 AWS 网站和应用程序。
AWS Cloud Development Kit (AWS CDK)是一个软件开发框架,可帮助您在代码中定义和配置 AWS Cloud 基础架构。
AWS Global Accelerator是一项支持多个端点的全球服务 AWS 区域。您可以创建加速器,通过 AWS 全球网络将流量引导到最佳端点。这可提高全球受众使用的 Internet 应用程序的可用性和性能。
AWS Identity and Access Management (IAM) 通过控制谁经过身份验证并有权使用 AWS 资源,从而帮助您安全地管理对资源的访问权限。
AWS Lambda 是一项计算服务,可帮助您运行代码,无需预置或管理服务器。它仅在需要时运行您的代码,并且能自动扩缩,因此您只需为使用的计算时间付费。
AWS PrivateLink帮助您创建从您的虚拟私有云 (VPCs) 到 VPC 外部服务的单向私有连接。
Amazon Route 53 是一种可用性高、可扩展性强的 DNS Web 服务。
Amazon Simple Storage Service (Amazon S3) 是一项基于云的对象存储服务,可帮助您存储、保护和检索任意数量的数据。
其他工具
Terraform
是一款基础设施即代码 (IaC) 工具 HashiCorp ,可帮助您创建和管理云和本地资源。
代码存储库
您可以根据自己的喜好使用 AWS CDK 或 Terraform 来部署此模式。Epics 部分包含两种部署方法的说明。此模式的代码可在以下 GitHub 存储库中找到:
Terraform — s3
-terraform presignedurl-staticips-endpoint-with
最佳实践
为了增强生产环境的安全性,实施授权机制(例如 Amazon Cognito)来限制对
PresignedUrl
生成 API 的访问至关重要。
操作说明
Task | 描述 | 所需技能 |
---|---|---|
设置 Terraform 开发环境。 | 要设置开发环境,请执行以下操作:
| AWS 管理员、云管理员 |
修改 |
请注意以下几点:
| AWS 管理员、云管理员 |
配置网络资源。 | 要配置网络资源,请运行以下命令:
在 | AWS 管理员、云管理员 |
配置 API Gateway、Amazon S3 和 Lambda。 | 要配置网络资源,请使用以下命令:
| AWS 管理员、云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
设置 AWS CDK 开发环境。 | 要设置开发环境,请执行以下操作:
| AWS 管理员、云管理员 |
在 | 要编辑常量变量的选项,请使用以下命令:
在命令中,用您自己的信息替换每个占位符:
| AWS 管理员、云管理员 |
部署堆栈。 | 要部署两个堆栈,一个用于虚拟私有云 (VPC),另一个用于应用程序,请使用以下命令:
| AWS 管理员、云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
验证端点的 IP 地址。 | 要验证此模式的域是否具有静态 IP 地址,请使用以下命令:
| 网络管理员 |
上传测试文件,您可以稍后下载该文件。 | 将测试文件上传到 Amazon S3 存储桶中的 | AWS 管理员、云管理员 |
调用 API 生成预签名网址。 | 要生成预签名网址,请使用以下格式从浏览器或 API 客户端(例如 Postman
将 | 应用程序所有者 |
检查结果。 | 预期的结果是,您应该会收到 301(永久移动)重定向状态码。此响应将包含预签名 URL,该网址应自动启动您的测试文件的下载。 | 测试工程师 |
Task | 描述 | 所需技能 |
---|---|---|
销毁 API Gateway、亚马逊 S3 和 Lambda 资源。 | 要删除资源,请使用以下命令:
| AWS 管理员、云管理员 |
销毁网络资源。 | 要删除网络资源,请使用以下命令:
| AWS 管理员、云管理员 |
Task | 描述 | 所需技能 |
---|---|---|
摧毁堆栈。 | 要销毁 VPC 和应用程序堆栈,请使用以下命令:
| AWS 管理员、云管理员 |
清空并删除 Amazon S3 存储桶。 | 清空并删除默认情况下未删除的对象 Amazon S3 存储桶和日志 Amazon S3 存储桶。 Amazon S3 存储桶名称为 如果您更喜欢使用 AWS Command Line Interface (AWS CLI) 来删除存储桶,请使用以下命令:
| AWS 管理员、云管理员 |
相关资源
AWS 博客