在不将 ip 列入白名单的情况下限制对 S3 托管网站的访问

Posted

技术标签:

【中文标题】在不将 ip 列入白名单的情况下限制对 S3 托管网站的访问【英文标题】:Restrict access to S3 hosted website without whitelisting ips 【发布时间】:2017-07-06 14:45:27 【问题描述】:

我们有一个托管在 AWS S3 上的网站,我们打算仅由有限的一组人访问。现在,我们将允许的 IP 列入白名单,如 Restrict access to website hosted on S3 中所述。

但是,某些必须有权访问该网站的人没有静态 ip,这迫使我们不断更新 AWS 政策中列入白名单的 ip。

我很确定客户端证书之类的东西应该可以工作,但我不知道如何根据 AIM 策略来实现它。任何其他(更简单)不依赖于静态 IP 的替代方案?我猜在这种情况下,向 AWS 添加 ssh 密钥不会有任何好处,对吧?

【问题讨论】:

您是否计划进行基于用户的访问控制? 【参考方案1】:

另一种方法是设置基于用户的访问控制。您可以使用以下 AWS 服务来做到这一点。

AWS Cognito 用户池 AWS API 网关 AWS S3

步骤如下

    创建AWS Cognito UserPool 在那里创建具有经过身份验证的 IAM 角色的用户,以允许 API Gateway Execute。 在 S3 中使用Cognito Login SDK 创建一个公共登录页面 设置 API 网关并传递到 S3 AWS 服务,并添加 Cognito UserPool 授权方,创建所需的 IAM 角色(检查 this 示例)

设置完成后,用户应该可以通过 API Gateway 登录和访问 S3。

【讨论】:

我不确定我是否理解这将如何阻止某人访问托管在 S3 中的页面。如果我没有登录,除非我更改我的代码以强制重定向,否则这些页面是否仍然可以访问?我从未使用过 Cognito 服务,但我的理解是,如果我在自己的网站上实施身份验证,它的行为就会像这样。我错过了什么吗? 是的,它类似于实现身份验证机制。您自己的自定义实现与使用 Userpools 和 IAM 授权的明显区别在于配置而不是编码。 所以如果我理解正确的话,Cognito 会阻止对特定 S3 存储桶的任何访问,除非用户首先通过身份验证,对吧?谢谢,如果我找不到其他解决方案,我可能会试一试。不过,我仍然希望避免任何形式的用户/密码身份验证...... Cognito Userpools 用作用户数据库,而您可以通过角色附加 S3 访问策略。然后,对登录用户使用 API 网关,它将授予 S3 访问权限。

以上是关于在不将 ip 列入白名单的情况下限制对 S3 托管网站的访问的主要内容,如果未能解决你的问题,请参考以下文章

WCF:使用 JSONP 将来源列入白名单

如何将 AWS Beanstalk IP 列入白名单

通过将 IP 列入白名单和更改别名来保护 phpMyAdmin

Firebase CORS,将 IP 范围列入白名单

根据国家/地区重定向,但如果 IP 被列入白名单则允许

将 IPv6 列入白名单