继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

如何用API Gateway上传文件到S3?

慕斯709654
关注TA
已关注
手记 317
粉丝 37
获赞 183
以下是如何使用API Gateway安全地将文件上传到AWS S3的步骤及最佳实践。

Amazon S3(简单存储服务)是 AWS 中最受欢迎的服务之一,用于安全地存储和检索任意数量的数据。API Gateway 是一个完全托管的服务,允许开发人员创建、发布和保护可扩展的 API,使其能够使用这些 API。通过将这两项服务结合起来,您可以创建一个通过 API 将文件上传到 S3 的强大且安全的机制。

在这篇文章中,我们将逐步学习如何设置API网关以便将文件上传到S3桶,必要时还将提供相关命令和配置文件。

理解架构——入门指南

当使用API Gateway上传文件到S3时,架构如下所示:

  1. 客户端:用户通过HTTP POST请求将文件上传到API网关。
  2. API网关:它作为中间人,将请求转发到S3或Lambda。
  3. S3桶:文件被安全地存储在S3桶中。
  4. IAM角色:它们确保对S3桶的安全和细粒度访问。

这种方法消除了公众直接访问您的S3桶的可能性,提供了一个额外的安全保护层。您还可以选择添加Lambda来进行预验证或后续处理。

前提

在开始之前,请确认以下几点:

  • AWS 账户:如果没有 AWS 账户的话,请注册一个。
  • AWS CLI:使用您的凭证来安装并配置 AWS CLI。
  • 所需的 IAM 权限:确保您的用户有足够的权限来创建和管理 API Gateway、S3 和 IAM 角色。
一个一步一步指南:使用API Gateway上传文件到S3
第一步:创建 S3 存储桶

使用 AWS 控制台

  • 进入 S3 服务
  • 点击 新建桶,并为其命名,选择一个区域。
  • 使用默认设置或根据需要进行自定义。

通过 AWS CLI(命令行界面):

    aws s3api create-bucket --bucket <bucket名称> --region <区域>

<bucket名称>:这是您要创建的S3存储桶的名称。<br>
<区域>:这是存储桶所在的AWS区域名称。<br>

注:此命令用于创建一个新的S3存储桶。<bucket名称><区域>需要根据实际情况填写。

设置桶策略:更新您的桶权限策略以允许API Gateway访问。

示例存储桶策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "允许访问",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<bucket-name>/*"
    }
  ]
}

步骤 2:配置 API 网关

  1. 进入 API 网关控制台
  2. 点击 创建 API,然后选择 HTTP APIREST API
  3. 添加一个文件上传的 资源(例如,/upload)。
  4. 在该资源下配置一个 POST 方法 用于上传文件。

步骤 3:配置与 S3 的整合

将集成类型设为AWS服务类型,以设置与S3的集成。

输入以下集成的详情:

  • AWS 区域(Region):您的 S3 存储桶所在的区域。
  • 服务类型:S3。
  • HTTP 方法(用于发送数据):POST。
  • 路径重写:设置为 /<bucket-name> 样式,以便直接上传文件。

在您的用例中,如果需要的话,可以添加查询字符串参数或请求头(例如,文件元数据)。

步骤 4:添加 IAM 权限设置

API Gateway 需要权限写入您的 S3 存储桶。然后创建一个新的 IAM 角色,并使用以下策略文档,如下:并将该角色附加到 API Gateway。

{
  "Version": "2012-10-17",
  "声明": [
    {
      "Effect": "允许的",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<bucket-name>/*"
    }
  ]
}

注:此JSON结构定义了一条允许将对象上传到指定S3桶的操作(s3:PutObject)的权限声明。

将角色绑定到您的 API Gateway 资源的执行角色设置中。

第五步:测试 API 网关的集成
  • 在API网关控制台中,部署您的API。
  • 记下部署阶段的API终结点URL
  • 使用如Postmancurl这样的工具来测试API。
    curl -X POST "<api-endpoint>" -F "file=@<文件路径>" # 此命令通过POST方法向指定的API端点发送一个文件,文件路径用<文件路径>表示。
  • 确认上传的文件是否出现在您的 S3 存储桶中。
示例配置示例和命令:
示例 API 网关请求:

这里有一个用于你API Gateway POST请求的JSON配置示例。

{
  "integration": "AWS",  
  "uri": "arn:aws:apigateway:<region>:s3:path/<bucket-name>",  
  "httpMethod": "POST",  
  "type": "AWS_PROXY"  
}
IAM:API Gateway角色的IAM策略:

确保政策只允许必要的步骤

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "允许",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::<bucket-name>/*"
    }
  ]
}
故障排除与:小技巧:
  • 403 Forbidden 错误信息:检查您的存储桶策略,并确保 API Gateway 拥有所需的权限。
  • 调试 API 网关:使用 CloudWatch 日志 来解决集成错误。
  • 最佳安全实践:避免在存储桶策略中使用开放权限。使用特定的 IAM 角色并根据最小权限原则限制访问,确保安全。
最后的结论

通过API Gateway将文件上传到S3是一个适用于现代应用程序的安全且可扩展的解决方案。这种方法确保您的S3桶保持私有性,同时允许用户高效上传文件。您还可以利用API Gateway通过Lambda或其他AWS服务添加额外的安全层、验证步骤或预处理操作。

根据本指南中的说明将您的 API Gateway 与 S3 集成,您很快就能拥有一个可靠的文件上传系统。

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP