繁体   English   中英

安全的Amazon Gateway API只能从S3存储桶中的内容访问

[英]Secure Amazon Gateway API to only be accessable from content in S3 bucket

我有一个暴露于公共互联网的API,我通过亚马逊的Gateway API服务创建了这个API。 API调用触发查询后端数据库的Lambda函数。 我创建的API由S3静态网页用于获取数据。

我想保护我的API,以便只有我的S3存储桶(index.html)的内容才有权访问我的API。 我想阻止人们直接查询我的API并使用curl请求等来抓取数据。我已经阅读了一些关于IAM角色,Cognito和Lambda权限模型的内容,但我不确定使用所有这些不同的工具保护我的API。

保护我的API的最佳方法是什么,以便只有我的S3存储桶中的内容才有权访问我的API?

好吧,你无法真正授权S3访问API,因为S3不访问你的API - S3将html(js / css和其他静态资产)传递给访问你网站的用户的客户端(网络浏览器)。 然后,从客户端调用API。

此外,亚马逊强制要求API网关公开(有意义但你不能在VPC背后有API)

我建议您深入阅读常见问题解答安全性和授权

你可以做什么:

  • 向API网关签名请求,但是需要有其他东西为客户端生成html代码(据我所知S3不能自己做, 但我喜欢错了
  • Amazon API Gateway可以生成客户端SSL证书,以验证后端的请求
  • 设置一些限制(见下文)

如果您害怕滥用,也可以阅读常见问题解答

问:如何解决或阻止API威胁或滥用?

Amazon API Gateway支持API中每个方法的限制设置。 您可以为REST API中的每种方法设置标准速率限制和每秒突发速率限制。 此外,Amazon API Gateway可自动保护您的后端系统免受分布式拒绝服务(DDoS)攻击,无论是使用伪造请求(第7层)还是SYN Flood(第3层)攻击。

根据您的设置,您可以尝试在API网关的资源策略中使用一个或多个AWS的条件密钥 例如,您只能允许referer是您的S3静态网站的请求:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "execute-api:Invoke",
            "Resource": [
                "execute-api:/{{stageNameOrWildcard*}}/{{httpVerbOrWildcard*}}/{{resourcePathOrWildcard*}}"
            ],
            "Condition": {
                "StringLike": {
                    "aws:Referer": [
                        "<bucket-name>.s3-website-<AWS-region>.amazonaws.com/*"
                    ]
                }
            }
        }
    ]
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM