我的S3存储桶中的文件很少。是否可以与选定的用户共享它们。那些人可能没有Amazon S3帐户。我知道如果我公开,每个人都可以使用URL下载文件。
我想要一些加密的URL或一个URL,当它被点击时会立即询问一些用户名和密码。
而且我也不想安装任何人安装的新/第三方软件。
由于
答案 0 :(得分:7)
绝对
您可以制作文件private,然后为文件生成time expiring signed urls。
签名的网址是使用您的公钥和密钥生成的,并且设置为在将来的指定时间到期。
根据您使用的技术,使用AWS SDKS之一生成网址可能最简单。
签名网址如下:
http://[bucket].s3.amazonaws.com/[key]?AWSAccessKeyId=[AWS_Public_Key]&Expires=1294766482&Signature=[generated_hash]
我在this answer中详细解释了这些网址。
答案 1 :(得分:1)
以下是一个示例ruby代码,用于为存储桶中的特定位置生成签名网址。
安装aws-sdk
:
gem install aws-sdk
创建一个新文件,根据需要为其命名,我选择shareS3files.rb
在gist.github.com上查看:
#!/usr/bin/env ruby
require 'aws-sdk'
require 'json'
#loading credentials
creds = JSON.load(File.read('secrets.json'))
creds = Aws::Credentials.new(creds['AccessKeyId'], creds['SecretAccessKey'])
#loading config
conf = JSON.load(File.read('config.json'))
# Create a new S3 object
s3 = Aws::S3::Client.new(credentials: creds, region: conf['Region'])
# Create a resource object, simpler to use
resource = Aws::S3::Resource.new(client: s3)
bucket = resource.bucket(conf['Bucket'])
# enumerate every object in a bucket, and create a pre signed url with a 5 days expiration limit
bucket.objects(prefix: 'conf['Location']').each do |obj|
puts "#{obj.key} => #{obj.object.presigned_url(:get, expires_in: 5 * 24 * 60 * 60)}"
end
现在,创建凭证和配置文件:
secrets.json
:
{
"AccessKeyId": "TOCHANGE",
"SecretAccessKey": "TOCHANGE"
}
config.json
:
{
"Region": "TOCHANGE",
"Bucket": "tochange",
"Location": "to/change/"
}
进一步的aws和ruby doc:
答案 2 :(得分:1)