如何指定AWS S3存储桶策略

时间:2019-08-15 13:02:25

标签: amazon-s3

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

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

的访问权限

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

测试场景如下:

  • 我的〜/ .aws / credentials文件中有[默认]配置文件,带有我自己的凭据
  • 我运行代码来获取存储桶信息。效果很好。
  • 我将技术用户的凭据添加到不同配置文件[svc_account]下的〜/ .aws / credentials中。
  • 我激活了技术用户[svc_account]的个人资料
  • 当我重新运行使用我的凭据的相同命令时,出现错误“访问被拒绝”

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

{
"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"
            ]
        }
    }
  ]
}

我的方法有什么问题?

1 个答案:

答案 0 :(得分:0)

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

此策略仅适用于存储桶本身,不适用于其持有的对象。因此,根据您调用的命令,您可能会获得“访问被拒绝”。将/ *添加到存储桶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/*"]
    }
  ]
}