Aws::S3:: Ошибки::AccessDenied: доступ запрещен
Я пытаюсь загрузить файлы на S3, используя гем Aws-S3.
s3 = Aws::S3::Resource.new(
credentials: Aws::Credentials.new('XXX', 'XXX'),
region: 'us-east-1')
obj = s3.bucket('bucket-name').object('key')
obj.upload_file('/Users/saghosh/Downloads/projecttimeline_Dec 2017_MajorprojectN.pdf',acl:'public-read')
Но каждый раз он дает мне Aws::S3::Errors::AccessDenied: доступ запрещен.
Но если я пытаюсь дать
s32 = Aws::S3::Client.new(
access_key_id: 'XXX',
secret_access_key: 'XXX',
region: 'us-east-1'
)
s32.list_objects({bucket: 'bucket-name'})
он работает нормально и перечисляет все мои загруженные вручную файлы. Это похоже на проблему с разрешением, но не в состоянии понять, где проблема?
2 ответа
Это может быть проблема с политикой IAM, прикрепленной к секретным ключам доступа, которые вы использовали. Убедитесь, что соответствующие разрешения S3 предоставлены для выполнения действий через SDK.
Вы получаете эту ошибку из-за разрешения учетной записи попробуйте
:s3_permissions => 'public-read'
:s3_permissions => 'private'
config.paperclip_defaults = {
:storage => :s3,
:s3_permissions => 'public-read',
:s3_credentials => {
:bucket => "",
:access_key_id => "",
:secret_access_key => "",
:s3_region => "us-east-1"
}
}
Также проблема может быть в вашем системном времени.
Просто погуглите "Aws::S3::Errors::RequestTimeTooSkewed".
URL-адрес, сгенерированный S3, содержит время и срок действия зависит от времени системы, в которой он был создан. Возможное решение здесь: https://www.howtogeek.com/tips/how-to-sync-your-linux-server-time-with-network-time-servers-ntp/