2011-10-07 37 views
3

我的S3存儲桶中有幾個文件。是否可以與選定的用戶共享它們?這些人可能沒有Amazon S3帳戶。我知道如果我公開每個人都可以使用URL下載文件。是否有可能使用Amazon S3共享選擇性用戶的文件

我想要一個類似於加密的URL或URL的URL,它在被命中時立即要求輸入一些用戶名和密碼。

而且我也不想安裝任何新的/第三方軟件,由大家安裝。

謝謝

回答

6

絕對。

您可以製作文件private,然後生成time expiring signed urls文件。

簽名的網址是使用您的公鑰和密鑰生成的,並且將來會在指定的時間到期。

根據您使用的是哪種技術,可能最容易使用AWS SDKS之一生成網址。

簽署的網址看起來像:

http://[bucket].s3.amazonaws.com/[key]?AWSAccessKeyId=[AWS_Public_Key]&Expires=1294766482&Signature=[generated_hash] 

我解釋一點關於this answer這些URL。

0

下面是一個樣本紅寶石代碼,用於爲您的存儲桶中的特定位置生成已簽名的URL。

安裝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和紅寶石DOC:

相關問題