我得到:

在调用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 ?


当前回答

遇到了类似的问题,对我来说,问题是我在bash_profile中设置了不同的AWS密钥。

我在这里回答了一个类似的问题:https://stackoverflow.com/a/57317494/11871462

如果bash_profile中有冲突的AWS密钥,AWS CLI会默认使用这些密钥。

其他回答

您已经授予了对S3桶内的对象执行命令的权限,但没有授予对桶本身执行任何操作的权限。

稍微修改一下你的策略会是这样的:

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

然而,这可能会给予超出所需的许可。遵循AWS IAM授予最小特权的最佳实践将看起来像这样:

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

对于启用了MFA的亚马逊用户,请使用以下命令: Aws s3 ls s3://桶名——profile mfa。

并首先通过运行准备配置文件mfa Aws STS get-session-token——serial-number arn: Aws:iam::123456789012:mfa/user-name——token-code 928371——duration 129600。(替换123456789012,user-name和928371)。

我也面临着同样的问题。我刚刚添加了凭据配置:

aws_access_key_id = your_aws_access_key_id
aws_secret_access_key = your_aws_secret_access_key

进入“~ /。Aws /凭据”+重启终端默认配置文件。

在多配置文件的情况下——profile arg需要添加:

aws s3 sync ./localDir s3://bucketName --profile=${PROFILE_NAME}

PROFILE_NAME:

.bash_profile ( or .bashrc) -> export PROFILE_NAME="yourProfileName"

关于如何配置凭证和多配置文件的更多信息可以在这里找到

如果在minio的新版本上突然出现这个错误,那么原因是桶访问策略默认值从2021版本更改为2022版本。现在在2022版本中,默认情况下所有的桶(新创建的和现有的)都将访问策略设置为私有-仅提供服务器凭据来访问它们是不够的-你仍然会得到如下错误(这里:返回到python minio客户端):

S3Error: S3 operation failed; code: AccessDenied, message: Access Denied., resource: /dicts, request_id: 16FCBE6EC0E70439, host_id: 61486e5a-20be-42fc-bd5b-7f2093494367, bucket_name: dicts

要在2022版本中回滚到以前的安全设置,最快的方法是在MinIO控制台中(或通过mc客户端)将桶访问访问策略更改为Public。

我无法访问S3,因为

首先,我在实例上配置了密钥访问(在启动后不可能附加角色) 先把这事忘了几个月 将角色附加到实例 尝试访问。 配置的密钥优先级高于role,由于没有授予用户必要的S3权限,因此拒绝访问。

解决方案:rm -rf .aws/credentials,那么aws使用role。