使用IAM用户访问密钥从外部位置访问S3



我已经使用javascript AWS-SDK通过putObject调用在S3上放置了一个文件。如果我将bucket设置为public,这很好,但一旦我关闭public访问,它就不再工作,并且在响应中出现403错误。

我已经针对IAM用户创建了一个安全密钥,IAM用户是我自己,我有足够的权限通过aws控制台访问S3,所以我认为我的权限是正确的。

这是我的代码片段,如果bucket是公共的,它就可以工作;

const options = {
region: AWS_REGION,
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SERECT_KEY,
};
const filesAwaitingProcessing = getFilesAwaitingProcessing(FOLDER_ID);
filesAwaitingProcessing.forEach((fileId) => {
const dataFile = file.load({
id: fileId
});
if (dataFile) {
const s3 = new AWS.S3(options);
let error = false;
s3.putObject({
Bucket: BUCKET,
ACL: 'authenticated-read',
ContentEncoding: 'UTF-8',
ContentType: 'application/json',
Key: `${BUCKET_DIRECTORY}/${dataFile.name}`,
Body: dataFile.getContents()
}, (err, data) => {
if (err) {
error = true;
log.error(JSON.stringify(err), JSON.stringify(err));
} else {
log.debug(data);
}
});
s3.getObject({
Bucket: BUCKET,
Key: `${BUCKET_DIRECTORY}/${dataFile.name}`
}, (err, data) => {
if (err) {
error = true;
log.error(err, err.stack);
} else {
log.debug(data);
}
});

我把钥匙传对了吗?

还是我这样做完全错误地实现了安全访问?

这是我的遗愿政策;

{
"Version": "2012-10-17",
"Id": "Policy1602780209612",
"Statement": [
{
"Sid": "Stmt1602780204129",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::619425574045:user/myUserName"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::dawson-group/processing"
}
]

}

然后我有了针对我的用户的完整S3策略,以及我创建的一个仅与有问题的桶相关的策略

因此,实际的代码和bucket设置似乎没有问题,问题是我们试图访问S3的应用程序。它正在剥离身份验证标头

最新更新