限制访问AWS托管公共S3 JSON文件

问题描述 投票:0回答:1

所以我一直在努力做的就是在主机可以通过简单的.json要求取回我的s3桶一些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。如果我需要使用其他Amazon的服务,哪些服务应该怎么考虑?

我斗政策(我基本上是从AWS教程复制粘贴):

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

我也有AWS的〜10h和〜1个月的服务器开发经验。

amazon-web-services amazon-s3 web-hosting
1个回答
3
投票

您可以使用AWS API Gateway与lambda函数一起实现自己的目标

用于将包含在请求你的头REST调用API网关,API网关已经在他们的Usage Plans with API Keys这样的实现,这将允许您创建一个将在请求中通过确保只要求自己的API密钥你报头是允许的。

然后你就可以勾lambda function你的API网关的端点。拉姆达功能可以给一个标识的URL到您的S3资源或从桶返回JSON数据,但是这取决于你的喜好。

你有两个解决方案及其流程是:

标识的URL的解决方案:

(与头请求)< - >(API网关)< - >(拉姆达) - [生成签名URL]另一个请求,要求获取在铲斗该文件。 (客户端)+(签署URL)< - > s3Bucket

如果没有签订网址:lambda函数将读取/获取文件给你。 (与头请求)< - >(API网关)< - >(拉姆达)< - > S3

请注意设置权限只在您的S3存储验证的读。

如果你只存储你的水桶JSON文件中的数据,我建议你使用dynamodb其已经用于存储JSON数据进行了优化。

© www.soinside.com 2019 - 2024. All rights reserved.