s3.listObjectsV2 AccessDenied



嗨,我尝试列出 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: "*"

感谢贾莫德的提示

相关内容

  • 没有找到相关文章

最新更新