【问题标题】:Do I need to enable Public Access when only 1 IAM user can access S3 Bucket?当只有 1 个 IAM 用户可以访问 S3 存储桶时,我是否需要启用公共访问?
【发布时间】:2019-09-07 20:30:19
【问题描述】:

这是我想要的设置:

  • 我想使用 Amazon S3 存储桶来存储用户上传的所有照片 在我的应用中。

  • 这些照片都不应被公众访问。这些都是 受保护的照片,只有授权用户可以查看它们,没有用户 将能够直接从 S3 存储桶访问它们。

  • 每次用户想要查看照片时,他们的 GET 请求都会到达 我的服务器的 api 路由,它将进行授权检查,如果 他们有权限,我的服务器将联系 S3 存储桶,获取 图像,然后我的服务器将此图像返回给用户。

基本上,我的应用用户永远不会直接访问 S3 存储桶,只有我的服务器有权访问 S3 存储桶进行 GET、PUT 和 DELETE,其他人应该无法看到我的 S3 存储桶中的任何内容。

这是我目前所做的:

  1. 使用 "AmazonS3FullAccess" 策略创建 IAM 用户。

  2. 在我的 S3 存储桶中禁用所有公共访问。

  3. 创建了以下存储桶策略:

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

会发生什么?

  1. 当我粘贴上面的内容时,我收到Access Denied 错误。

  2. 当我对此进行搜索时,答案建议我应该取消选中 "Block public access to buckets and objects granted through new public bucket policies"

  3. 当我取消选中上述选项时,Amazon 控制台不断显示警告,指出提供对我的存储桶的公共访问是不安全的。

  4. 虽然我能够在启用公共访问后保存上述存储桶策略,但控制台中显示的有关具有公共访问权限的警告令人担忧。

所以,我真的不想在我的存储桶中允许公共访问。我只希望我的服务器中的 Laravel 应用程序使用 IAM 凭证来访问和获取图像,并且其他人不应有权访问此 S3 存储桶。

我已经阅读了很多关于此的链接,但我仍然对此感到困惑。

我的问题是:

  1. 在我的使用案例中,如果我只想允许 1 个 IAM 用户以编程方式访问存储桶列表,是否需要启用对我的存储桶的公开访问?

  2. 我还需要设置存储桶策略吗?由于我在创建 IAM 用户时已经设置了策略,这还不够吗?

  3. 如果我还需要添加存储桶策略,我应该将 Principal 保留为 * 还是需要在此处添加 User ARB

  4. 我能否在不启用公共访问权限的情况下添加存储桶策略?

  5. 我是否可以安全地执行上述步骤,还是我遗漏了什么?

【问题讨论】:

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


    【解决方案1】:

    我能够解决这个问题,这就是我发现的:

    在我的使用案例中,如果我只想允许 1 个 IAM 用户以编程方式访问存储桶列表,我是否需要启用对我的存储桶的公开访问?

    无需启用公共访问。我通过检查禁用了我的存储桶中的所有公共访问:"Do not grant public read access.."

    我什至需要设置存储桶策略吗?由于我在创建 IAM 用户时已经设置了策略,这还不够吗?

    无需添加存储桶策略。而是将策略直接添加到 IAM 用户就可以了。

    如果我还需要添加存储桶策略,我应该将 Principal 保留为 * 还是需要在此处添加 User ARB?

    不需要存储桶策略。而是将策略链接到 IAM 用户。

    我能否在不启用公共访问的情况下添加存储桶策略?

    不需要,因为可以禁用公共访问,而 IAM 用户仍然可以通过编程方式直接访问它。

    我是否可以安全地执行上述步骤,还是我遗漏了什么?

    这就是我所做的:

    1. 在存储桶中禁用公共访问。

    2. 删除存储桶策略并将其留空。

    3. 在 IAM 用户仪表板中创建新策略。步骤如下:

    制定政策:

    添加服务、操作和资源:

    添加策略名称、描述、审查和创建。

    1. 编辑了 IAM 用户,我没有将这个用户分配给拥有太多权限的“AmazonS3FullAccess”,而是分配了上面创建的自定义策略。

    这样做很有效,我的应用程序能够访问存储桶。我使用 Tinker 对其进行了测试:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-12
      • 2016-11-16
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 2022-01-10
      • 2021-06-22
      相关资源
      最近更新 更多