嗨,我尝试列出 S3 存储桶"文件夹"中的所有文件。所以我尝试:
const params = {
Bucket: s3bucketname,
Prefix: foldername + "/"
};
const data = await s3.listObjectsV2(params).promise()
console.log(data)
这给了我一个访问被拒绝的错误。
文件本身是这样存储的
const params = {
Bucket: s3bucketname,
Key: foldername + "/" + filename,
ContentType: 'image/jpeg',
ACL: 'public-read',
Body: data
};
await s3.upload(params, tags).promise();
和公共可用。 这工作正常。还使用
const params = {
Bucket: s3bucketname,
Key: folderfilename
};
await s3.headObject(params).promise()
工作正常。
YML 文件看起来像这样
S3BucketampstoryscreenshotsPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket:
Ref: S3Bucketampstoryscreenshots
PolicyDocument:
Statement:
-
Action:
- "s3:Get*"
Effect: "Allow"
我测试了多个小变体,但在这里找不到问题?
需要 ListBucket 语句。在这里重要的是有一次带有/* 的 Ref 和一次没有/* 没有那样设置会导致 Ref
操作不适用于语句中的任何资源(服务:Amazon S3;状态代码:400;错误代码:格式错误的策略;
这适用于我的情况:
PolicyDocument:
Statement:
-
Action:
- "s3:GetObject"
Effect: "Allow"
Resource:
Fn::Join:
- ""
-
- "arn:aws:s3:::"
-
Ref: "S3Bucketampstoryscreenshots"
- "/*"
Principal: "*"
-
Action:
- "s3:ListBucket"
Effect: "Allow"
Resource:
Fn::Join:
- ""
-
- "arn:aws:s3:::"
-
Ref: "S3Bucketampstoryscreenshots"
Principal: "*"
感谢贾莫德的提示