簡體   English   中英

Amazon S3 getObject() 收到 NodeJS 拒絕訪問

[英]Amazon S3 getObject() receives access denied with NodeJS

我正在嘗試使用 nodeJS 獲取存儲在 Amazon S3 中的文件,但我的訪問被 aws 拒絕。

AccessDenied:在 Request.callListeners (/home/marc/ Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/lib/sequential_executor.js:106:20) 在 Request.emit (/home/marc/Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/lib/ sequence_executor.js:78:10) 在 Request.emit (/home/marc/Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/lib/request.js:688:14) 在 Request.transition (/home/ marc/Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/lib/request.js:22:10) 在 AcceptorStateMachine.runTo (/home/marc/Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/ lib/state_machine.js:14:12) 在 /home/marc/Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/lib/state_machine.js:26:10 在請求。 (/home/marc/Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/lib/request.js:38:9) 在請求。 (/home/marc/Disco/Projects/AtlasFitness/server/node_modules/aws-sdk/lib/request.js:690:12) 在 Request.callListeners (/home/marc/Disco/Projects/AtlasFitness/server/node_modules/ aws-sdk/lib/sequential_executor.js:116:18)

以下是用戶政策: 在此處輸入圖片說明

獲取對象展開:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::atlasfitness-progress-s3/*"
        }
    ]
}

這是我的 CORS 政策:

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "GET",
            "DELETE"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]

下面是 NodeJS 中的代碼:

import AWS from 'aws-sdk';

const s3 = new AWS.S3({
    region: process.env.AWS_BUCKET_REGION,
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY
}) 

export const getFileS3 = (fileKey) => {
    const dowloadParams = {
        Key: fileKey,
        Bucket: 'atlasfitness-progress-s3'
    }

    return s3.getObject(dowloadParams).createReadStream()
}

如果有人知道如何修復它,我將非常感謝您的幫助,我是 AWS 的初學者。

您的 ACL 配置未受影響,您的政策是正確的,您沒有任何限制性存儲桶政策,您的代碼在我看來也非常好。

仔細檢查fileKey包含對象的完整密鑰,例如folder1/folder2/folder3/myFile.extension

您指定的鍵可能不存在文件 - 確保fileKey的值與對象的鍵完全匹配。

究其原因,你得到一個403 Access Denied的響應,而不是一個404 Not Found響應你不具有權限的s3:ListBucket -讀的原因AWS返回403 ,而不是404在我的答案安全原因在這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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