我得到:

在调用ListObjects操作时发生错误(AccessDenied): AccessDenied

当我试图从S3存储桶中获取文件夹时。

使用该命令:

aws s3 cp s3://bucket-name/data/all-data/ . --recursive

桶的IAM权限如下所示:

{
"Version": "version_id",
"Statement": [
    {
        "Sid": "some_id",
        "Effect": "Allow",
        "Action": [
            "s3:*"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname/*"
        ]
    }
] }

我需要改变什么才能成功复制和ls ?


当前回答

我的问题是凝固

env: 
  AWS_ACCESS_KEY_ID: {{ secrets.AWS_ACCESS_KEY_ID }} 
  AWS_SECRET_ACCESS_KEY: {{ secrets.AWS_SECRET_ACCESS_KEY }}

同样,在aws-sync GitHub Action下作为环境变量。它们来自我的GitHub设置。虽然在我的情况下,我假设了一个角色在前一步,这将设置我一些新的关键字到这些相同的名称环境变量。所以我用坏的GitHub基本键覆盖了好的假设键。

如果你在扮演角色,请注意这一点。

其他回答

我在尝试在本地同步整个s3桶时遇到了类似的问题。对我来说,在我的帐户上强制执行MFA(多因素身份验证),这是在通过AWS CLI执行命令时所必需的。

因此,我的解决方案是-使用概要文件(mfa文档)提供mfa凭据,同时使用任何AWS CLI命令。

我得到了相同的错误时使用策略如下,虽然我有“s3:ListBucket”s3:ListObjects操作。

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
  ]
 }

然后我通过添加一行来修复它 “攻击:aws: s3::: bucketname”

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl"
        ],
        "Resource": [
             "arn:aws:s3:::<bucketname>",
            "arn:aws:s3:::<bucketname>/*",
            "arn:aws:s3:::*-bucket/*"
        ],
        "Effect": "Allow"
    }
 ]
}

我添加了一个与公认答案方向相同的答案,但有小的(重要的)差异,并添加了更多的细节。

考虑下面的配置:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::<Bucket-Name>"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::<Bucket-Name>/*"]
    }
  ]
}

该策略授予编程式写-删除访问权,并分为两部分: ListBucket操作提供了桶级别的权限,而其他PutObject/DeleteObject操作需要桶内对象的权限。

第一个Resource元素为ListBucket操作指定arn:aws:s3:::< bucket - name >,以便应用程序可以列出桶中的所有对象。

第二个Resource元素为PutObject指定arn:aws:s3:::< bucket - name >/*和DeletObject操作,以便应用程序可以写入或删除桶中的任何对象。

从安全角度考虑,为了指定桶级和对象级细粒度权限,将它们分离为两个不同的“arn”非常重要。

注意,如果我只在第二个块中指定GetObject,那么在编程访问的情况下,我将收到类似这样的错误:

Upload failed: <file-name> to <bucket-name>:<path-in-bucket>调用PutObject操作时发生错误(AccessDenied): AccessDenied。

我遇到了同样的错误“在调用ListObjectsV2操作时发生了错误(AccessDenied):访问被拒绝”

注意: 桶策略不是一个好的解决方案。 在IAM服务中创建新的自定义策略,附加到各自的用户将更安全。

按以下程序求解:

IAM Service > Policies > Create Policy > select JSON > .使用实例

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:ListBucketVersions"
        ],
        "Resource": [
            "arn:aws:s3:::<bucket name>"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListBucket",
            "s3:GetObject",
            "s3:GetObjectAcl",
            "s3:PutObject",
            "s3:DeleteObject",
            "s3:ListBucketMultipartUploads",
            "s3:ListMultipartUploadParts",
            "s3:AbortMultipartUpload",
            "s3:DeleteObjectVersion",
            "s3:GetObjectVersion",
            "s3:PutObjectACL",
            "s3:ListBucketVersions"
        ],
        "Resource": [
            "arn:aws:s3:::<bucketname>/*"
        ]
    }
]

}

选择Next Tag > Review Policy输入并创建策略。

选择新创建的策略 在新创建的策略窗口的编辑窗口中选择“Policy Usage”选项卡。 选择“附加”,从列表中选择用户并保存。

现在尝试在控制台用桶名列出对象,没有桶名会抛出相同的错误。

$aws s3 ls

我有这个问题 我的要求,我想让用户写入特定的路径

{
            "Sid": "raspiiotallowspecificBucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>/scripts",
                "arn:aws:s3:::<bucketname>/scripts/*"
            ]
        },

这个改变解决了问题

{
            "Sid": "raspiiotallowspecificBucket",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>",
                "arn:aws:s3:::<bucketname>/*"
            ]
        },