【问题标题】:Restrict access to website hosted on S3限制访问托管在 S3 上的网站
【发布时间】:2012-12-26 01:36:08
【问题描述】:

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

这可能吗?

谢谢

【问题讨论】:

    标签: amazon-s3


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      解决方法:www.s3auth.com - S3 存储桶的基本身份验证可能对您有用,但涉及第三方。另一个解决方案可能是Query String Request Authentication,使用 EC2 实例或Elastic Beanstalk Java SE Static Files Option。我们目前正在探索使用Amazon API Gateway as Amazon S3 Proxy 保护我们的存储桶。


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

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

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

      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/*"
                  ]
              }
          ]
      }
      

      更详细的博文:"How to Restrict Amazon S3 Bucket Access to a Specific IAM Role"

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 这个答案肯定有帮助,但我检查了文档以确认我的直觉反应:客户端提供引荐来源,因此,与 CORS 一样,这只为客户端提供安全性。 docs.aws.amazon.com/IAM/latest/UserGuide/…
        【解决方案4】:

        是的,这确实是可能的。阅读S3 access control 对您来说更好。

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

        您也可以edit bucket permission 以授予对特定 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" 
                        } 
                    } 
                } 
            ]
        }
        

        更多信息,请阅读herehere

        【讨论】:

        • 您在示例中使用的 IP 地址位于私有 IPv4 网络中。这是否意味着任何人都可以通过在我自己的网络中使用该私有 IP 地址来访问此存储桶?
        • @justjulian - 您的 IP 将被 NAT 到您面向公共互联网的 IP。
        • 此响应在限制对指定 公共 IP 地址的访问(与示例策略中显示的不可路由 IP 不同)的范围内很有用。据我了解,S3 托管的静态网站是从一个端点提供服务的,例如s3-website-eu-west-1.amazonaws.com,它是公共的。因此,这需要通过某个公共网关向所述网站发出请求,因此 AWS 服务器将其视为具有网关提供的公共 IP,而不是个人的私有 IP。捕获 22...
        猜你喜欢
        • 1970-01-01
        • 2021-01-16
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 2019-06-18
        • 1970-01-01
        • 1970-01-01
        • 2019-11-17
        相关资源
        最近更新 更多