Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services AmazonS3是否支持带有基本身份验证的HTTP请求_Amazon Web Services_Amazon S3 - Fatal编程技术网

Amazon web services AmazonS3是否支持带有基本身份验证的HTTP请求

Amazon web services AmazonS3是否支持带有基本身份验证的HTTP请求,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我想建立一个AmazonS3帐户,创建一个bucket,上传一些数据,这些数据将使用HTTP GET和基本身份验证来获取 我知道有几种方法可以对S3数据进行身份验证(查询字符串等),但我希望能够提供一个简单的用户名/密码方案进行身份验证 这可能吗?不,这是不可能的。 你必须遵守法律 查看列出的一些包装器 我来自AdroitLogic。关于链接的文章,它展示了如何将UltraESB放置在客户机和AmazonS3之间,以验证您的请求。如果需要,它可以创建一个“代理”服务,该服务将接受来自客户端的基本

我想建立一个AmazonS3帐户,创建一个bucket,上传一些数据,这些数据将使用HTTP GET和基本身份验证来获取

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

这可能吗?

不,这是不可能的。 你必须遵守法律


查看列出的一些包装器

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

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

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

这个架构图解释了项目是如何实现的。PNG图片是从AmazonS3 bucket
maven.s3auth.com
加载的,不能匿名读取。此图像的完整URL为

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

请参阅本文:

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

  • 创建一个s3静态站点
  • 创建一个CloudFront发行版来服务s3静态站点(使用静态站点url,而不是bucket名称)
  • 使用AWS WAF创建一个规则,该规则只允许具有正确http授权头的请求。这将是授权标头内容的匹配规则
  • 使用Route53将自定义域路由到CloudFront分发
  • 您现在应该有一个静态站点,只有使用正确的用户名和密码才能访问该站点

    注意:使用此设置时,不会提示您输入凭据,因为请求被403禁止而不是401未授权阻止


    注意:您可以直接在s3存储桶前面创建CloudFront发行版,但不能默认为子文件夹中的根索引文件。

    现在可以使用CloudFront和Lambda@Edge(自2017年7月起在美国东部1区普遍提供)

  • 创建一个S3存储桶
  • 在bucket前面设置CloudFront分发,限制对bucket的访问,以便只有CloudFront可以直接访问它
  • 创建一个Lambda函数,它将模拟与浏览器的基本HTTP身份验证握手。将其分配给CloudFront
    查看器请求
    行为
  • 以下是Lambda函数:

    这里有一篇文章提供了更多细节:
    简短的回答是否定的,不使用基本身份验证。但是这里有一种与basicauth有效相同的方法,并且比列出的其他解决方案更容易实现。我相信它是安全的,但我不确定

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

    下面是一个s3 bucket策略示例,它允许放置对象,并通过匹配useragent和referer来获取对象(注意更改:
    BUCKETNAME
    USERNAME
    PASSWORD
    AWS_REGION
    文件名
    ,以了解您的详细信息):

    要将资源放入bucket中,可以使用如下curl请求(注意更改:
    BUCKETNAME
    USERNAME
    PASSWORD
    AWS\u REGION
    FILENAME
    ):

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

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

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

    我自己也在试图找到解决这个问题的办法。这里的帖子已经列出了它们。引述台词:

    几个月来,我一直在寻找一种解决方案,将基本HTTP身份验证添加到Amazon上的S3存储桶中。有一些选项涉及预签名URL(仅限单个对象)、使用第三方免费或商业服务(隐私问题)、使用中间件(复杂而非无服务器)、使用(不安全)旋转EC2/Heroku/等来代理请求

    桶策略解决方案: 我亲自尝试过这个,它对我来说似乎非常安全(除非你有办法绕过aws bucket策略)。它只需要s3铲斗即可操作。易于实现。基本思想:

  • 限制对整个网站的访问,但允许公众访问入口文件和机密文件除外
  • 输入文件secure.html,它接受用户输入的密码并重定向到Secret文件
  • 秘密文件这是一个秘密文件,它重定向到主文件(index.html),主文件承载站点的真实内容
  • 主文件Main.html,仅允许访问来自同一站点的请求
  • 所有其他内容(如css、js文件)都将受到bucket策略的限制,该策略允许在源于bucket URL的请求发出时为它们提供服务
  • 使用awsLambda@Edge:此解决方案需要s3、aws lambda
    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