Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 将putObject直接从API网关中的HTTP API写入S3_Amazon S3_Aws Api Gateway_Aws Http Api - Fatal编程技术网

Amazon s3 将putObject直接从API网关中的HTTP API写入S3

Amazon s3 将putObject直接从API网关中的HTTP API写入S3,amazon-s3,aws-api-gateway,aws-http-api,Amazon S3,Aws Api Gateway,Aws Http Api,我的意图是在AmazonAPI网关上创建一个HTTP API,通过S3API使用PutObject操作将文件写入S3(其间不调用Lambda)。这是PutObject请求语法: 我不确定这在技术上是否可行,我在Postman中得到了403 Forbidden:ForbiddenException响应 到目前为止,我已经: 创建了S3存储桶(配置了CORS) 在API网关中创建HTTP API(配置了CORS),并执行“putObject”POST操作 在HTTP API上将集成配置为https:

我的意图是在AmazonAPI网关上创建一个HTTP API,通过S3API使用PutObject操作将文件写入S3(其间不调用Lambda)。这是PutObject请求语法:

我不确定这在技术上是否可行,我在Postman中得到了403 Forbidden:ForbiddenException响应

到目前为止,我已经:

  • 创建了S3存储桶(配置了CORS)
  • 在API网关中创建HTTP API(配置了CORS),并执行“putObject”POST操作
  • 在HTTP API上将集成配置为https://[s3 bucket name].s3.us-east-1.amazonaws.com
  • 创建对HTTP API“invoke URL”的邮递员请求,并在头上设置“Host”和“x-apigw-API-id”
  • 禁止异常显然表明了HTTP API或其背后的S3 API上存在权限问题。我确实在HTTP API上配置了一个Cloudwatch日志组,它没有显示任何条目,因此这似乎是一个HTTP API访问问题

    我还怀疑我需要向HTTP API添加参数映射,以便将所有必要的头传递给S3 putObject操作

    我的问题是:

  • 这种类型的HTTP API集成是否可以直接集成到S3
  • 服务403禁止响应的可能原因是什么
  • 我是否会在HTTP API集成配置中使用“Append”参数映射来添加标准S3 API参数(并避免将它们公开给客户端)

  • 我自己设法解决了这个问题。回答我自己的问题:

    这种类型的HTTP API集成是否可以直接与S3集成?

    对。在我的HTTP API上,我使用了一个指向S3服务端点的HTTP PUT集成(端点中的bucket名称不正确)

    服务403禁止响应的可能原因是什么?

    我没有收到邮递员的请求,但是,当我从浏览器发出请求时,它起作用了。在通过navigator.beacon()将Blob作为请求发送到HTTP API端点URL之前,我必须在Javascript中创建一个Blob

    我是否会在HTTP API集成配置中使用“Append”参数映射来添加标准S3 API参数(并避免将它们暴露给客户端)?

    我必须使用参数映射才能从API网关获得S3 PutObject请求。我的配置如下所示

    编辑:我在这里发现了这种方法的一个问题:HTTP API不允许在参数映射上添加某些与安全相关的头。我试图设置header.x-amz-acl:“bucket owner full control”,但收到以下错误消息:

    指定的映射表达式无效:验证结果:警告:[],错误:[头x-amz-acl上的操作受到限制]

    似乎在HTTP API中不可能修改任何与安全相关的S3API头。这是直接调用s3api的一个主要问题,因为这意味着为了工作,s3bucket需要是公共的