46

我想在亚马逊 S3 上托管一个静态网站,但我需要限制对某些用户的访问。这可能是通过 IP 地址或亚马逊凭证(只有登录的用户才能访问存储桶的内容。

这可能吗?

谢谢

4

4 回答 4

52

是的,这确实是可能的。更好的起点是阅读S3 access control

但默认情况下,在 S3 上创建的存储桶不是公开的。因此,默认行为应该是只有知道您的访问权限和密钥的人/程序才能访问它。

您还可以编辑存储桶权限,以授予对特定 AWS 账户或电子邮件 ID 的访问权限。

为了限制对某些 IP 的访问,您可以创建额外的存储桶策略。

限制对特定 IP 地址的访问

此语句授予任何用户对指定存储桶中的对象执行任何 S3 操作的权限。但是,请求必须源自条件中指定的 IP 地址范围。此语句中的条件标识 192.168.143.* 允许的 IP 地址范围,但有一个例外,即 192.168.143.188。

请注意,条件中指定的 IPAddress 和 NotIpAddress 值使用 RFC 2632 中描述的 CIDR 表示法。有关详细信息,请访问http://www.rfc-editor.org/rfc/rfc4632.txt

{
    "Version": "2012-10-17",
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::bucket/*",
            "Condition" : {
                "IpAddress" : {
                    "aws:SourceIp": "192.168.143.0/24" 
                },
                "NotIpAddress" : {
                    "aws:SourceIp": "192.168.143.188/32" 
                } 
            } 
        } 
    ]
}

有关更多信息,请阅读此处此处

于 2013-01-15T18:59:24.580 回答
14

编辑:基于用户/组的限制不适用于托管在 S3 中的静态网站,因为 AWS 没有为 S3 注册您的 AWS 管理控制台(路径:amazon.com)凭证/cookie(路径:amazonaws.com),也没有检查它们.

解决方法:www.s3auth.com - S3 存储桶的基本身份验证可能对您有用,但涉及第三方。另一种解决方案可能是查询字符串请求身份验证,使用 EC2 实例或Elastic Beanstalk Java SE 静态文件选项。我们目前正在探索使用Amazon API Gateway 作为 Amazon S3 代理来保护我们的存储桶。


旁注:还有一些额外的事情需要注意,通常不会直接指出。

目前无法存储桶策略中授予或限制组访问权限,只能授予特定用户。由于您通常也不想为用户结构中的每次更改更新每个存储桶策略,并且存储桶策略可能(无意中)干扰您的用户策略,您可能不想使用存储桶策略

基于用户/组的策略仅适用于s3:GetBucketLocations3:ListAllMyBuckets附加到arn:aws:s3:::**(不幸的是,此处无法过滤,所有存储桶名称对于具有此策略的用户/组都是可见的)。

IAM 策略示例:(不是 S3 存储桶策略,不适用于静态网站托管

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": [
                "arn:aws:s3:::*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject",
            "Resource": [
                "arn:aws:s3:::YOURBUCKETNAME",
                "arn:aws:s3:::YOURBUCKETNAME/*"
            ]
        }
    ]
}

更详细的博文:“如何限制对特定 IAM 角色的 Amazon S3 存储桶访问”

于 2016-11-21T18:00:31.760 回答
2

您也可以限制某些 http 引用者访问存储桶/静态网站。因此,您可以建立一个 wordpress 会员网站,只有登录到该网站的用户才能访问托管在亚马逊上的网站。例如 mymembershipsite.com/members 。

于 2016-05-30T09:27:15.700 回答
0

您可以将 Cloudfront 放在 S3 前面,将 AWS WAF 放在 Cloudfront 前面,只将您想要的 IP 列入白名单,并且可以正常工作。

于 2021-05-31T16:33:37.190 回答