【问题标题】:AWS S3 public json filie hosting with restricted access访问受限的 AWS S3 公共 json 文件托管
【发布时间】:2019-02-05 17:04:34
【问题描述】:

所以我一直在尝试做的是在我的s3 存储桶中托管一些.json 文件,这些文件可以通过简单的GET 请求进行检索。

我关注了这个aws guideline 并设法托管了一些可以公开访问的文件。现在我可以简单地在浏览器地址栏中输入类似这样的内容并获取我的 json 文件:

https://s3.amazonaws.com/[my-bucket-name]/[my-file-name].json

或者我也可以在控制台中执行此操作:

curl -X GET https://s3.amazonaws.com/[my-bucket-name]/[my-file-name].json


我现在要做的是为我的文件桶添加一个非常基本的安全性:我希望仅当请求在标头中包含某个 API 密钥时才允许访问。现在我只想要一种单一的 API 密钥设计,所有用户只共享相同的确切 api 密钥,任何拥有该密钥的人都应该能够访问存储桶中的任何文件。

类似这样的 curl 命令:

 curl -X GET --header "X-ApiKey: wow-such-secret" https://s3.amazonaws.com/[my-bucket-name]/[my-file-name].json

我想知道这是否可能仅使用 S3。如果我需要使用其他亚马逊服务,我应该研究哪些服务?

我的存储桶策略(我基本上是从 aws 教程中复制粘贴的):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::[my-bucket-name]/*"
        }
    ]
}

我还有约 10 小时的 AWS 和约 1 个月的服务器开发经验。

【问题讨论】:

    标签: amazon-web-services amazon-s3 web-hosting


    【解决方案1】:

    您可以使用 AWS API GATEWAY 和 lambda 函数来实现您的目标

    将 API 网关用于将在请求中包含您的标头的其余调用,API 网关在其Usage Plans with API Keys 中已经有这样的实现,这将允许您创建自己的 api 密钥,这将在请求中传递,确保只允许带有您的标头的请求。

    然后您可以将lambda function 挂接到您的 API 网关端点。 lambda 函数可以为您的 S3 资源提供签名的 url 或从存储桶返回 json 数据,但这取决于您的偏好。

    您有两个解决方案,它们的流程是:

    签名网址解决方案:

    (带有您的标头的请求)(API GateWay)(lambda)-[生成签名的url] 另一个请求获取存储桶上的文件。 (client)+ (签名的 url) s3Bucket

    没有签名的 URL: Lambda 函数将为您读取/获取文件。 (使用您的标头请求) (API Gateway) (lambda) S3

    请注意在您的 S3 存储桶上将权限设置为经过身份验证的只读。

    如果您只在存储桶中存储 JSON 文件数据,我建议您使用 dynamodb,因为它已经针对存储 JSON 数据进行了优化。

    【讨论】:

    • 谢谢,看起来有很多新东西要学,但现在我至少知道去哪里找了。
    • 如果您遇到困难或有更多问题,请在此处发表评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多