首页 > 解决方案 > 如何指定 AWS S3 存储桶策略

问题描述

我的目标是创建对特定 S3 存储桶只有 API 访问权限和一组允许操作的技术用户。

我使用了“策略生成器”并复制/粘贴了存储桶的 ARN。我还复制/粘贴了用户的 ARN(IAM 控制台用户配置文件)。为了使测试更简单,我授予对所有操作的访问权限 ("s3:*)

在用户创建期间,我没有授予任何权利。我只检查了“使用访问密钥”并下载了 credentials.csv 文件。

测试场景如下:

这是我应用于存储桶的策略:

{
"Id": "Policy4321",
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "Stmt12345",
        "Action": "s3:*",
        "Effect": "Allow",
        "Resource": "arn:aws:s3:::my-bucket-name",
        "Principal": {
            "AWS": [
                "arn:aws:iam::111111111111:user/svc_acc"
            ]
        }
    }
  ]
}

我的方法有什么问题?

标签: amazon-s3

解决方案


您的方法很好,但您的政策不正确。

此策略仅适用于存储桶本身,而不适用于其持有的对象。因此,根据您调用的命令,您可能会收到“拒绝访问”。将 /* 添加到您的存储桶 ARN 以将其应用于对象。

“资源”:“arn:aws:s3:::my-bucket-name/*”

但是,在这种情况下,我会使用 IAM 策略,因为它绑定到用户。您还可以通过检查用户附加的策略轻松检查用户可以访问的内容。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::my-bucket-name/*"]
    }
  ]
}

推荐阅读