Можно ли обмениваться файлами для избранных пользователей с помощью Amazon S3 - PullRequest
4 голосов
/ 07 октября 2011

У меня мало файлов в моей корзине S3.Можно ли поделиться ими с выбранными пользователями.Эти люди могут не иметь учетной записи Amazon S3.Я знаю, если я сделаю это общедоступным, каждый сможет загрузить файлы, используя URL.

Я хочу что-то вроде зашифрованного URL-адреса или URL-адреса, который запрашивает имя пользователя и пароль сразу после его нажатия.

А также я не хочу устанавливать какие-либо новые / сторонние программы, устанавливаемые всеми.

Спасибо

Ответы [ 2 ]

7 голосов
/ 07 октября 2011

Абсолютно.

Вы можете сделать ваши файлы личными , а затем сгенерировать истекающие по времени подписанные URL-адреса для ваших файлов.

Подписанные URL-адресасгенерированный с использованием вашего открытого ключа и секретного ключа, и срок его действия истекает в указанное время в будущем.

В зависимости от используемой вами технологии, вероятно, проще всего сгенерировать URL-адреса с помощью одного из AWS.SDKS .

Подписанные URL выглядят примерно так:

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

Я объясню немного больше об этих URL в этом ответе .

1 голос
/ 19 марта 2015

Вот пример кода ruby ​​для генерации подписанных 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/"
}

Дополнительная документация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...