AWS S3:调用 GetObject 操作时发生错误 (AccessDenied):拒绝访问

vip*_*169 12 amazon-s3 amazon-web-services aws-cli

我有一个具有读/写权限的 AWS 帐户,如下所示: 在此处输入图片说明

我想这样做,以便 IAM 用户可以从 S3 存储桶下载文件,但在执行时访问被拒绝aws s3 sync s3://<bucket_name> .我尝试了各种方法,但都无济于事。我做的一些步骤:

  1. 创建了一个名为 s3-full-access 的用户
  2. aws configure在我的 CLI 中执行并为上述用户输入生成的访问密钥 ID 和秘密访问密钥
  3. 创建了一个存储桶策略(如下所示),我希望它为我在第一步中创建的用户授予访问权限。

在此处输入图片说明

我的存储桶有一个文件夹名称 AffectivaLogs,其中文件是由各种用户匿名添加的,看起来虽然存储桶是公开的,但其中的文件夹不是,我什至无法将其公开,这导致以下错误。

在此处输入图片说明

以下是公共访问设置:

在此处输入图片说明

更新:我按如下方式更新了存储桶策略,但它不起作用。

在此处输入图片说明

小智 9

如果您使用在存储桶上启用的 KMS 加密,您还应该添加允许您使用 KMS 密钥解密数据的策略。


Joh*_*ein 6

为了测试这种情况,我做了以下事情:

  • 创建了一个没有附加策略的IAM 用户
  • 创建了一个Amazon S3 存储桶
  • 关闭 S3 阻止公共访问设置:
    • 阻止新的公共存储桶策略
    • 如果存储桶具有公共策略,则阻止公共和跨账户访问
  • 添加了一个存储桶策略,授予IAM 用户s3:*访问存储桶内容的权限

然后我跑了aws s3 sync,得到了Access Denied

然后我修改了策略以允许访问存储桶本身

{
    "Id": "Policy",
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "statement",
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::my-bucket/*",
                "arn:aws:s3:::my-bucket"
            ],
            "Principal": {
                "AWS": [
                    "arn:aws:iam::123456789012:user/stack-user"
                ]
            }
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

这奏效了。

底线:除了存储桶内容之外,还要添加访问存储桶的权限。(我怀疑这是因为aws s3 sync除了访问对象本身之外,还需要列出存储桶内容。)