限制对S3上托管的网站的访问

dud*_*ein 36 amazon-s3

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

这可能吗?

谢谢

Ama*_*mar 48

是的确有可能.更好的起点将是您阅读S3访问控制.

但默认情况下,在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" 
                } 
            } 
        } 
    ]
}
Run Code Online (Sandbox Code Playgroud)

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


not*_*mey 12

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

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


旁注:还有一些需要注意的事项,通常不会直接指出.

这是目前无法桶的政策,以授权或限制组的访问权限,只有特定用户.由于您通常也不希望为用户结构中的每个更改更新每个存储桶策略,因此存储桶策略可能(无意中)干扰您的用户策略,可能不希望使用存储桶策略.

基于用户/组的策略仅适用于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/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

更详细的博客文章:"如何限制Amazon S3存储桶访问特定的IAM角色"