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

时间:2019-03-13 18:55:07

标签: amazon-web-services amazon-s3 aws-api-gateway

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

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

enter image description here

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

enter image description here

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

enter image description here

或者有没有办法为整个API网关分配一个角色,以为其提供访问S3存储桶的权限?

我尝试过的其他事情:

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

    {     “ Version”:“ 2012-10-17”,     “ Id”:“ apiGatewayOnly”,     “声明”:[         {             “ Sid”:“ apiGW”,             “效果”:“允许”,             “校长”:{         “服务”:[“ api-gateway-amazonaws.com”]     },             “ Action”:“ s3:GetObject”,             “资源”:“ http://test-proxy-bucket-01.s3-website.us-east-2.amazonaws.com/ *”         }     ] }

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

    {     “ Version”:“ 2012-10-17”,     “ Id”:“ http推荐人策略示例”,     “声明”:[         {             “ Sid”:“允许获取来自www.example.com和example.com的请求。”,             “效果”:“允许”,             “ Principal”:“ ”,             “ Action”:“ 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 ”                     ]                 }             }         }     ] }

1 个答案:

答案 0 :(得分:1)

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

有关更多详细信息,请参见docs

enter image description here