繁体   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