很简单的东西(我想)。我正在尝试创建一个预签名的 url,然后我可以用它来下载文件。这些密钥对应的 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 权限增加到了应有的位置。有任何想法吗?