[英]Amazon S3 returns Access Denied when using generatePresignedPutUrl
我正在嘗試使用 NodeJS 將文件上傳到私有存儲桶中的 Amazon S3,但是當我發送 put 請求時,AWS 返回訪問被拒絕,我不明白為什么,因為 url 是通過 generatePresignedPutUrl 生成的。
接下來我將 AWS 配置代碼留在 nodeJS 中:
import AWS from 'aws-sdk';
const bucketName = 'atlasfitness-progress';
const region =process.env.AWS_REGION;
const accessKeyId = process.env.AWS_ACCESS_KEY
const secretAccessKey = process.env.AWS_SECRET_KEY
const s3 = new AWS.S3({
region,
accessKeyId,
secretAccessKey,
signatureVersion: 'v4'
})
export const generatePreSignedPutUrl = async (fileName, fileType) => {
const params = ({
Bucket: bucketName,
Key: fileName,
Expires: 1000
})
try {
const url = await s3.getSignedUrlPromise('putObject', params);
return url;
} catch (err) {
console.log(err);
return
}
}
然后我使用帶有圖像的 curl 到 generatePreSignedUrl 生成的 url
curl -X PUT -T name_image "url_generated_by_NodeJS_Code"
但我得到的回應如下:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>CY87GFMPFE94HR3J</RequestId><HostId>PgvNz4AiH2C5Rtfb9ZvfY24ybqX3qGM/V9R81GgjEUDVikkNnqOkM/uWn+Q9+zRWKEaj0bMK0Qs=</HostId></Error>
如果有人知道可能會發生什么或如何解決它,請告訴我,非常感謝。
TL;DR - 驗證您用於生成預簽名 URL 的角色/用戶是否具有對存儲桶的 putObject 權限。
預簽名 URL 具有生成 URL 的編碼憑據。 當對象到達 S3 時,服務會解碼憑證並檢查分配給這些憑證的策略。 因此,如果這些憑據對存儲桶沒有正確的權限,則訪問將被拒絕。
另一種選擇是當您的請求到達 S3 時您的會話已過期(與您使用 IAM 角色的情況相關)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.