非常简单的东西(我想)。我尝试创建一个预先签名的网址,然后我可以使用它来下载文件。这些密钥对应的IAM用户拥有fullS3Acess,直到我能弄清楚为什么这个签名不起作用。
def presigned_url
document = Document.find(params[:id])
signer = get_presigner
signer.presigned_url(:get_object, bucket: ENV['S3_BUCKET_NAME'], key: document.s3_path)
end
def get_presigner
credentials = Aws::Credentials.new(
ENV['FULL_AWS_ACCESS_KEY_ID'],
ENV['FULL_AWS_SECRET_ACCESS_KEY']
)
client = Aws::S3::Client.new(
region: 'us-west-2',
credentials: credentials
)
Aws::S3::Presigner.new(client: client)
end
当我尝试在浏览器中打开时,从presigned_url方法返回的url会导致SignatureDoesNotMatch错误。关于为什么这是真的任何想法?我认为我已经排除了权限作为答案,因为我已将用户的IAM权限提高到超出应有的范围。有什么想法吗?