限制对使用API​​网关作为代理的S3静态网站的访问

sta*_*aka 6 amazon-s3 amazon-web-services aws-api-gateway

我有一个充当静态网站的S3存储桶,并且正在使用API​​网关向其分配流量。我了解CloudFront在这里是更好的选择,但请不要提出建议。由于我不愿讨论的原因,这不是一个选择。

我通过配置{proxy +}资源来完成我的解决方案。下图:

在此处输入图片说明

我只允许从API网关代理资源访问S3网站。 有没有一种方法可以为代理资源提供执行角色,就像您可以为资源提供执行角色以运行lambda函数一样?Lambda执行角色示例如下:

在此处输入图片说明

代理资源的集成请求部分似乎没有执行角色:

在此处输入图片说明

还是有一种方法可以为整个API网关分配角色,以为其提供访问S3存储桶的权限?

我尝试过的其他方法:

  1. 编辑存储桶策略以仅允许来自API网关服务的流量:

    {“版本”:“ 2012-10-17”,“ Id”:“ apiGatewayOnly”,“声明”:[{“ Sid”:“ apiGW”,“ Effect”:“允许”,“ Principal”:{“服务“:[[api-gateway-amazonaws.com”]},“ Action”:“ s3:GetObject”,“ Resource”:“ http://test-proxy-bucket-01.s3-website.us-east- 2.amazonaws.com/ *“}]}

  2. 编辑存储桶策略以仅允许来自API网关URL的流量:

    {“版本”:“ 2012-10-17”,“ Id”:“ http引用策略示例”,“声明”:[{“ Sid”:“允许获取源自www.example.com和example.com的请求。 “,”效果“:”允许“,”主体“:” “,”动作“:” s3:GetObject“,”资源“:” http://test-proxy-bucket-01.s3-website.us- east-2.amazonaws.com/ “,”条件“:{” StringLike“:{” aws:Referer“:[” https://xxxxxxx.execute-api.us-east-2.amazonaws.com/prod/ ”,“ http://xxxxxxxx.execute-api.us-east-2.amazonaws.com/prod “]}}}]}

ubi*_*ubi 5

  1. 创建私有 S3 存储桶
  2. 创建可以访问存储桶的 IAM 角色。将可以承担此角色的可信实体/委托人设置为apigateway.amazonaws.com
  3. 使用 AWS 服务集成类型并选择 s3。将执行角色设置为2中创建的角色

有关更多详细信息,请参阅文档

在此处输入图片说明

  • 谢谢,这正是我需要的。对于稍后看到这篇文章的任何人,完成我需要的文档部分是“公开 API 方法以访问存储桶中的 Amazon S3 对象”,因为我不仅需要查看存储桶,还需要查看其中的对象。 (2认同)