簡體   English   中英

使用 generatePresignedPutUrl 時,Amazon S3 返回拒絕訪問

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM