安全的AWS S3文件网址

时间:2018-05-28 12:23:51

标签: file amazon-web-services security amazon-s3 cdn

我在每个用户上传的平台中都有一些与业务相关的文档,一旦上传,就会存储在AWS S3存储桶中。我的要求就是用户应该只能通过应用程序提供的URL访问此内容。现在,我有S3网址,但这可以使用任意次。

首先,这可能在AWS S3中实现吗?

如果可能,该技术是什么?我们怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

您希望查看保护您的存储桶,以便它只能从您的应用程序访问(使用可访问存储桶的实例角色)。然后提供预签名的网址。有许多AWS文档描述了如何根据语言执行此操作。您可以查看其中一些here

答案 1 :(得分:1)

可以生成带有过期时间戳的S3链接。

python中的一个例子找到了here

#!/usr/bin/env python
# Create a time-bombed URL from an S3 object
# Parameters: s3_url [timeout]
# timeout defaults to 1 minute if not specified
# requires the boto module
import sys,re
try:
  testArg=re.match('s3:\/\/',sys.argv[1])
except:
  print ("usage: " + sys.argv[0] + " s3_object ttl_in_sec")
  sys.exit(1)
if not testArg:
  print "need a valid s3 object as arg"
  sys.exit(1)
try:
  sys.argv[2]
  expTime=int(sys.argv[2])
except:
  expTime=60
(bucket,key)=re.split('/',re.sub('^s3:\/\/','',sys.argv[1]),maxsplit=1)
testKey=re.match('\w',key)
if not testKey:
  print ("something wrong with this url - I have a key of: " + key + " - bailing")
  sys.exit(1)
from boto.s3.connection import S3Connection
s3=S3Connection()
url = s3.generate_url(expTime, 'GET', bucket=bucket, key=key)
print (url)

会创建一个像这样的链接:

  

https://runascloud-tmp.s3.amazonaws.com/medium/testFile.txt?Signature=6eAuqcwJtpy4RLbIB7LsvTDt7g4%3D&Expires=1569188257&AWSAccessKeyId=AKIAIHPTZ74AMD3GGAMQ

在X时间过后过期。