在 AWS 中使用 S3 listObjectVersions 需要什么权限?

Gar*_*day 8 amazon-s3 amazon-web-services amazon-iam aws-sdk

我目前有一个 lambda,它使用节点 sdk 调用listObjectVersions来列出特定文件的所有版本。但是,我无法弄清楚我的策略中的哪些权限会​​授予 lambda 权限来进行此调用。我搜索了 AWS 文档,但找不到任何信息。

以下是我的策略中的当前权限:

- PolicyName: S3Policy
  PolicyDocument:
    Version: 2012-10-17
    Statement:
      - Effect: Allow
        Action:
          - s3:PutObject
          - s3:PutObjectAcl
          - s3:GetObject
          - s3:GetObjectVersion
          - s3:ListObjectVersions
          - s3:DeleteObject
          - s3:ListBucket
Run Code Online (Sandbox Code Playgroud)

当我执行 lambda 时,我会Access Denied在拨打电话时得到一个。我已经更改了我的政策以允许该操作s3:*并且 lambda 可以工作。但是,我不想授予对 s3 的完全访问权限。

我需要添加什么操作才能允许?

Joh*_*ein 10

来自Amazon S3 的操作、资源和条件键 - AWS Identity and Access Management

ListBucketVersions:使用版本子资源列出有关存储桶中所有对象版本的元数据。

我对此进行了如下测试:

  • 创建了一个 IAM 用户
  • 分配了以下策略
  • 运行命令: aws s3api list-object-versions --bucket my-bucket

它工作成功。

该政策是:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:ListBucketVersions",
            "Resource": "*"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

因此,虽然命名看起来有点奇怪(列出对象版本与列出存储桶版本),但它是正确的使用权限。


abd*_*wer 9

您需要更新您的Resource政策。

s3:ListBucketVersions是您正在寻找的操作。

应该是这样的:

{
   "Version":"2012-10-17",
   "Statement":[
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListAllMyBuckets"
         ],
         "Resource":"arn:aws:s3:::*"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:ListBucket",
            "s3:GetBucketLocation",
            "s3:ListBucketVersions",
            "s3:GetBucketVersioning"
         ],
         "Resource":"arn:aws:s3:::examplebucket"
      },
      {
         "Effect":"Allow",
         "Action":[
            "s3:PutObject",
            "s3:PutObjectAcl",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:DeleteObject",
            "s3:GetObjectVersionTagging",
            "s3:GetObjectVersionTorrent",
            "s3:GetObjectVersionAcl",
            "s3:GetObjectVersionForReplication",
            "s3:GetObjectVersion"
         ],
         "Resource":"arn:aws:s3:::examplebucket/*"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

尝试相应地改变你的政策。