我的S3存儲桶中有幾個文件。是否可以與選定的用戶共享它們?這些人可能沒有Amazon S3帳戶。我知道如果我公開每個人都可以使用URL下載文件。是否有可能使用Amazon S3共享選擇性用戶的文件
我想要一個類似於加密的URL或URL的URL,它在被命中時立即要求輸入一些用戶名和密碼。
而且我也不想安裝任何新的/第三方軟件,由大家安裝。
謝謝
我的S3存儲桶中有幾個文件。是否可以與選定的用戶共享它們?這些人可能沒有Amazon S3帳戶。我知道如果我公開每個人都可以使用URL下載文件。是否有可能使用Amazon S3共享選擇性用戶的文件
我想要一個類似於加密的URL或URL的URL,它在被命中時立即要求輸入一些用戶名和密碼。
而且我也不想安裝任何新的/第三方軟件,由大家安裝。
謝謝
絕對。
您可以製作文件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。
下面是一個樣本紅寶石代碼,用於爲您的存儲桶中的特定位置生成已簽名的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: