因此,我一直试图在.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]/*"
}
]
}
我还有大约10个小时的AWS和大约1个月的服务器开发经验。
答案 0 :(得分:3)
您可以将AWS API GATEWAY与lambda函数一起使用以实现您的目标
使用API网关进行其余调用,这些调用将在请求中包含您的标头,API网关在其Usage Plans with API Keys中已经实现了此实现,这将允许您创建自己的 api密钥将在请求中传递,以确保只允许使用标头的请求。
然后,您可以将lambda function挂接到API Gateway端点。 lambda函数可以为您的S3资源提供签名的url,也可以从存储桶中返回json数据,但这取决于您的偏好。
您有两个解决方案,它们的流程是:
签名网址解决方案:
(带标头的请求)<->(API GateWay)<->(lambda)-[生成签名的URL] 另一个获取文件桶中文件的请求。 (客户端)+(签名网址)<-> s3Bucket
没有签名的URL: Lambda函数将为您读取/获取文件。 (使用您的标头进行请求)<->(API GateWay)<->(lambda)<-> S3
请注意,将权限设置为S3存储桶上的经过身份验证的只读权限。
如果您仅在存储桶中存储JSON文件数据,建议您使用dynamodb,因为它已经为存储JSON数据进行了优化。