【问题标题】:ECS task accessing S3 bucket website with Block Public Access enabled: "Access Denied"ECS 任务访问启用了 Block Public Access 的 S3 存储桶网站:“访问被拒绝”
【发布时间】:2020-09-28 00:20:09
【问题描述】:

我有一个 ECS 任务配置为运行我想用作 S3 存储桶网站的反向代理的 nginx 容器。

出于安全考虑,阻止公共访问已为存储桶打开,因此我正在寻找一种方法,仅授予对 ECS 任务的读取访问权限。

我希望我的 ECS 任务运行一个 nginx 反向代理以拥有S3:GetObjects 访问我的网站存储桶的权限。存储桶不能公开,因此我想将其限制为使用 ecs 任务 IAM 角色作为委托人的 ecs 任务。

IAM 角色: arn:aws:iam:::role/ 配置了一个附加策略,允许存储桶及其对象中​​的所有 S3 操作:

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

在受信任的实体中,我添加了担任 ECS 任务角色的权限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

问题在于 EC2 目标组运行状况检查始终向存储桶及其对象返回拒绝访问。 [08/Jun/2020:20:33:19 +0000] “GET / HTTP/1.1” 403 303 “-“ “ELB-HealthChecker/2.0”

我还尝试通过在下面添加存储桶策略来授予它权限,但我认为不需要它,因为 IAM 角色已经可以访问它......

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "allowNginxProxy",
            "Effect": "Allow",
            "Principal": {
                "Service": "ecs-tasks.amazonaws.com"
            },
            "Action": "*",
            "Resource": [
                "arn:aws:s3:::<BUCKET>/*",
                "arn:aws:s3:::<BUCKET>"
            ]
        }
    ]
}

我也尝试过使用”AWS": "arn:aws:iam::&lt;ACCOUNT_NUMBER&gt;:role/&lt;ECS_TASK_ROLE&gt;" 作为校长。

有什么建议吗?

【问题讨论】:

  • 旁注: 分配s3:* 权限通常不是一个好主意。这包括对存储桶执行任何操作的能力,包括删除存储桶和存储桶中的所有内容。尝试将权限限制为仅应用程序需要的权限(例如GetObject)。
  • “EC2 目标组健康检查”来自负载均衡器,对吗?它指向 nginx 上的路径?如果您手动转到该路径,它会返回 200 响应吗?您的 Reserve Proxy 是否有效(除了健康检查)?如果没有,您可以在日志中看到什么?
  • 整个解决方案涉及 Route53 托管区域,该区域指向应用程序负载均衡器侦听 443 来自 ecs 目标组,该目标组具有运行 nginx 容器的健康实例。现在回到 S3,如果我们为现有 ACL 禁用 Block Public Access 选项,将返回 HTTP 200 响应,我可以访问网站 index.html。
  • 为什么要在 S3 上运行健康检查?我可以理解在指向 ECS 的负载均衡器上运行它,但在 S3 上确实不需要它。
  • 你最后解决了吗?我也有类似的问题。

标签: permissions amazon-iam amazon-ecs policy bucket


【解决方案1】:

这里的另一种可能性:

  1. 检查您的 S3 对象是否已加密?如果是,您的 ECS 任务角色也应该具有执行解密的权限。否则,您还将获得权限被拒绝异常。一个例子可以在here找到。

【讨论】:

    猜你喜欢
    • 2019-02-03
    • 2018-01-10
    • 1970-01-01
    • 2023-03-12
    • 2020-05-05
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多