【问题标题】:What is Wrong With My AWS Policy?我的 AWS 政策有什么问题?
【发布时间】:2018-09-24 23:22:44
【问题描述】:

我正在尝试授予程序化 IAM 用户访问单个存储桶的权限。

我设置了以下策略并将其附加到用户:

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

尝试以编程方式上传文件我得到了 403。

我从这里得到了这个政策:

Writing IAM Policies: How to Grant Access to an Amazon S3 Bucket

我通过添加 AWS 托管策略 AmazonS3FullAccess 验证了其他一切正常,之后我的上传成功。但我宁愿不给这个用户完全访问权限。

此用户没有附加任何其他政策。

【问题讨论】:

  • 你是如何执行上传的? CLI 命令?或者你能告诉我们产生错误的代码吗?该代码可能正在调用另一个 API。同一用户可以下载文件吗?
  • 我正在使用 Rails 控制台中的 Ruby gem dragonfly-s3_data_store 执行它。代码是`Dragonfly.app.store('local/path/to/file')。当 S3 全部访问策略生效时,相同的代码可以正常工作。
  • 尝试设置调试模式。该代码可能正在尝试使用其他方法,例如 GetBucketLocationListBucket。调试模式可能会向您显示来自 AWS 的完整禁止响应。也可以试试awscliaws s3 cp /local/path/to/file s3://my-bucket/file-name

标签: amazon-web-services amazon-s3 amazon-iam


【解决方案1】:

您可以尝试此策略以授予对特定存储桶的完全访问权限:

{
    "Version": "2012-10-17",
    "Statement": [{
            "Action": "s3:*",
            "Effect": "Allow",
            "Resource": [
                "arn:aws:s3:::<BUCKETNAME>/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListAllMyBuckets",
            "Resource": "arn:aws:s3:::*"
        }
    ]
}

由于您提供的是PutGetDelete,您不妨提供对特定存储桶的完全访问权限。

【讨论】:

  • 这已经足够接近我了。我不得不将“arn:aws:s3:::”添加到第一个 Resource 数组中(编辑器给了我一个关于原件的警告,导致我这样做)。该政策是否允许用户列出所有存储桶,即使只允许修改一个?对我来说,这不是一个大问题,但它可能会在未来发生。
  • 它只是列出存储桶,而不是其中的对象。
  • 我意识到这一点。但是,为什么我必须向只能访问一个已知存储桶的用户提供此信息(存储桶列表)?
  • AFAIK,这用于控制台目的。例如,如果你点击S3,它会显示一个bucket列表,他可以从那里去到指定的bucket。如果此权限被撤销,那么它将显示拒绝访问。但是如果用户直接在地址栏中输入bucket名称并回车,那么他应该直接在bucket中输入,并取消ListAllBuckets访问权限。
【解决方案2】:

您的政策没有任何问题。确保您在 IAM 策略中使用正确的存储桶名称并将该策略添加到用户。

您可以使用IAM Policy Simulator 对其进行测试。也许您应该考虑政策生效的时间,但它“几乎立即”。见this answer

【讨论】:

  • 模拟器对我输入的所有权限(PutObject、ListBucket、GetObject 和 DeleteObject)都说“允许”。时间不是问题,因为我昨天设置后今天再次尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 2020-12-23
  • 2014-09-21
  • 2021-04-06
  • 1970-01-01
  • 2021-01-30
相关资源
最近更新 更多