【问题标题】:How to specify AWS S3 bucket policy如何指定 AWS S3 存储桶策略
【发布时间】:2019-08-15 22:54:59
【问题描述】:

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

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

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

测试场景如下:

  • 我在文件 ~/.aws/credentials 中有 [default] 配置文件和我自己的凭据
  • 我运行代码来获取存储桶信息。工作正常。
  • 我将技术用户的凭据添加到不同配置文件 [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"
            ]
        }
    }
  ]
}

我的方法有什么问题?

【问题讨论】:

    标签: amazon-s3


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的提示。我正在运行命令Get-S3Bucket -BucketName my-bucket-name,同时认为它仅适用于存储桶。我尝试使用另一个与 100% 存储桶相关的命令 Get-S3BucketLocation,这适用于 svc 帐户凭据。命令Get-S3Bucket 返回存储桶信息和内容信息,我没有授予访问权限,您正确地注意到了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2012-11-23
    • 2017-02-14
    • 2018-08-09
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多