Amazon S3是否支持基本身份验证的HTTP请求

amazon-web-services amazon-s3

44424 观看

8回复

234 作者的声誉

我想设置一个Amazon S3帐户,创建一个存储桶,上传一些数据,并且使用HTTP GET 和基本身份验证可以获得这些数据。

我知道有几种方法可以对S3数据进行身份验证(查询字符串等),但我希望能够为身份验证提供简单的用户名/密码方案。

这可能吗?

作者: Blastt 的来源 发布者: 2010 年 6 月 22 日

回应 (8)


9

1847 作者的声誉

不,这是不可能的。您必须符合Amazons Authentication API

看看这里列出的一些包装。

作者: willbt 发布者: 24.06.2010 06:23

0

172 作者的声誉

我来自AdroitLogic。关于链接文章,它显示了如何在您的客户端和Amazon S3之间放置UltraESB来验证您的请求。如果需要,它可以创建一个“代理”服务,该服务将接受来自客户端的基本身份验证,并以Amazon S3期望的方式发送凭据。这可以通过一种微不足道的方式完成,并且会为您的客户隐藏任何复杂性。

作者: Asankha Perera 发布者: 18.02.2011 05:05

21

59132 作者的声誉

您可以将其自己开发为Web应用程序或现有应用程序的一部分。它将使用HTTP请求,检索其URI组件,将其转换为S3对象名称,并使用getObject()获取其内容(使用可用的S3 SDK之一,例如AWS Java SDK)。

否则,您可以尝试托管解决方案 - s3auth.com(我是开发人员)。它是一个开源项目,你可以看到这个机制是如何在其核心类之一内部实现的。HTTP请求由服务处理,然后重新转换为Amazon S3内部身份验证方案:

该体系结构图解释了项目的实现方式。PNG图片是从Amazon S3存储桶加载的maven.s3auth.com,不能匿名读取。此图片的完整网址是

http://s3auth:s3auth@maven.s3auth.com/texry/packages.png

另请参阅本文:S3 Buckets的基本HTTP身份验证

作者: yegor256 发布者: 26.08.2012 12:16

13

3604 作者的声誉

通过分层多个AWS服务,您可以实现接近基本HTTP授权的功能。

  1. 创建一个s3静态站点。
  2. 创建CloudFront分配以服务s3静态站点(使用静态站点URL而不是桶名称)
  3. 使用AWS WAF创建一个规则,该规则仅允许具有正确http授权标头的请求。这将是Authorization标头内容的sting匹配规则。
  4. 使用Route53将自定义域路由到CloudFront分配

您现在应该拥有一个只能使用正确的用户名和密码访问的静态站点。

注意:使用此设置,系统不会提示您输入凭据,因为请求被403 Forbidden而不是401 Unauthorized阻止。

注意:您可以直接在s3存储桶前创建CloudFront分配,但是您将无法在子文件夹中默认为根索引文件。

作者: TomDotTom 发布者: 31.05.2016 06:33

35

680 作者的声誉

现在可以使用CloudFront和Lambda @ Edge(自2017年7月起在us-east-1地区推出)。

  1. 创建一个S3存储桶
  2. 在存储桶前面设置CloudFront分配,限制对存储桶的访问,以便只有CloudFront可以直接访问它
  3. 创建一个Lambda函数,它将模拟与浏览器的Basic HTTP Auth握手。将其分配给CloudFront Viewer Request行为。

这是Lambda函数:https//gist.github.com/lmakarov/e5984ec16a76548ff2b278c06027f1a4

这是一篇更详细的文章:https//medium.com/@lmakarov/serverless-password-protecting-a-static-website-in-an-aws-s3-bucket-bfaaa01b8666

作者: Leonid Makarov 发布者: 30.08.2017 11:38

12

1500 作者的声誉

简短的回答是否定,不使用基本身份验证。但是这里有一种方法与基本身份验证有效,这比列出的其他解决方案容易。我相信这是安全的,但我不确定。

您可以在s3存储桶上设置与请求标头匹配的条件。例如,您可以使用useragentreferer标题作为基本身份验证中与用户名和密码等效的内容。通常,useragent是浏览器和操作系统(类似Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0),并且引用者是以前的网页。

下面是一个例子S3存储策略,允许把对象,并且由用户代理匹配获取对象和referer(注变化:BUCKETNAMEUSERNAMEPASSWORDAWS_REGION,和FILENAME您详细说明):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allow-username-and-password-access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::BUCKETNAME/*",
            "Condition": {
                "StringEquals": {
                    "aws:UserAgent": "USERNAME",
                    "aws:Referer": "PASSWORD"
                }
            }
        }
    ]
}

为了把资源桶中,你可以使用这样的卷曲请求(注变化:BUCKETNAMEUSERNAMEPASSWORDAWS_REGION,和FILENAME):

curl --user-agent USERNAME --referer PASSWORD --upload-file "FILENAME" --request PUT "https://s3-AWS_REGION.amazonaws.com/BUCKETNAME/FILENAME"

要使用资源,您可以使用以下内容:

curl --user-agent USERNAME --referer PASSWORD "https://s3-AWS_REGION.amazonaws.com/BUCKETNAME/FILENAME" > FILENAME

再一次,我相信这是安全的,因为如果你使用https,应该加密useragent和referer,但请告诉我,如果不是。

作者: Jordan Stewart 发布者: 29.09.2017 12:21

2

172 作者的声誉

我自己试图找到解决这个问题的方法。这篇文章列出了所有这些。引用线条:

我一直在寻找能够在Amazon上为S3存储桶添加基本HTTP身份验证的解决方案。有些选项涉及预先签名的URL(仅限单个对象),使用第三方免费或商业服务(隐私问题),启动EC2 / Heroku /等。使用中间件代理请求(复杂而非无服务器),使用页面重定向和存储桶策略(不安全)。

存储桶策略解决方案: 我亲自尝试了这一点,对我来说似乎非常安全(除非您有办法绕过aws存储桶策略)。它只需要s3桶即可运行。易于实施。基本理念:

  1. 限制对整个站点的访问,但允许公共访问Entry File和Secret File。
  2. Entry File secure.html接受密码的用户输入并重定向到Secret File
  3. 秘密文件thisisasecret重定向到托管网站真实内容的主文件(index.html)
  4. Main File main.html仅允许访问源自同一站点的请求。
  5. 所有其他内容(如css,js文件)将受到存储桶策略的限制,如果请求来自您的存储区URL,则允许它们提供服务。

使用aws Lambda @ Edge:此解决方案需要s3,aws lambda和aws cloudfront才能运行。基本理念:

  1. 创建secure.html。创建文本框以在此处输入用户的基本凭据。该文件应该是公共可访问的,应该调用lambda函数。
  2. 配置cloudfront时会创建一个行为,其中显示“如果您想要访问index.html,则需要通过签名URL”执行此操作。
  3. 就像上面一样,创建一个存储桶策略,只有当origin是您的存储区URL时才允许访问js,css等文件。
作者: rahuljain1311 发布者: 03.10.2017 10:04

0

1597 作者的声誉

在这个有点相关的问题中看看我的答案

问题是需要一个桶对象LIST而不需要大量的S3登录验证。所以从你的问题来看,我的答案并没有真正解释你的询问Http-request with basic username/password authentication- 而是提供了一个可能使存储桶保密并仍然检索其数据知道a identity-pool (ID)和a Amazon Resource Name (ARN)(你可以考虑类似用户名和密码)的可能性。当然,要获得(ID)和(ARN),您必须在AWS主页中进行一些设置工作,如我在这里的17步答案所述...... - 而且,它不是GET的一部分 -请求,而是在亚马逊提供的AWSS3框架内给出。我希望,它仍然为您的问题提供更多选择;)

作者: iKK 发布者: 05.03.2018 07:53
32x32