Amazon Web Services(aws)S3 - 根据主机名限制对存储桶的访问

问题描述 投票:0回答:1

我正在尝试根据主机名授予/限制对存储桶的访问权限。因此,来自* .something.edu的每个请求都将被授予访问权限。基本上我想要复制Apaches Allow from (partial) domain-name https://httpd.apache.org/docs/2.4/mod/mod_access_compat.html。任何帮助,将不胜感激。

amazon-web-services amazon-s3
1个回答
1
投票

此Apache功能使用DNS查找来检查客户端的IP地址是否具有与相关域名匹配的反向DNS条目,并且主机名的转发条目也指向该IP。

无论HostnameLookups指令的设置如何,此配置都将导致Apache httpd对客户端IP地址执行双DNS查找。它将对IP地址执行反向DNS查找以查找关联的主机名,然后对主机名执行正向查找以确保它与原始IP地址匹配。仅当前向和反向DNS一致并且主机名匹配时才允许访问。

S3不直接支持这样的配置。

如果可以获取实际的IP地址范围,则可以使用存储桶策略允许基于源IP的访问(或基于“非源IP”拒绝访问)。这不支持基于DNS的反向匹配,但支持CIDR范围。

请参阅Amazon S3开发人员指南中的Restricting Access to Specific IP Addresses

不匹配此类策略的请求将看到无法自定义的通用“拒绝访问”消息。

允许以类似于Apache的方式实现此逻辑的另一种替代方法是将CloudFront分发附加到存储桶,然后使用Lambda@Edge查看器请求触发器 - 在Lambda中运行的一小段Node.JS JavaScript边缘处的功能 - 进行DNS查找并允许或拒绝访问。

event structure提供event.Records[0].cf.request.clientIp。您需要使用Node.js的dns解析器执行两次DNS查找,并返回一个响应信号CloudFront,告知是应该允许还是拒绝该请求。如果被拒绝,您可以返回最大40KB的自定义响应,可能会解释拒绝。

Lambda @ Edge触发器代码在托管容器化环境中运行,该环境倾向于在调用之间保持其全局变量,因此DNS查找可以缓存在内存中,从而避免在同一查看器的重复调用上查找。这种“容器重用”的性质超出了本答案的范围。它不能保证,但经常发生。

© www.soinside.com 2019 - 2024. All rights reserved.