ECS 任务访问启用了阻止公共访问的 S3 存储桶网站:“访问被拒绝”

问题描述 投票:0回答:2

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

出于安全目的,为存储桶启用了阻止公共访问,因此我正在寻找一种仅向 ECS 任务授予读取访问权限的方法。

我希望运行 nginx 反向代理的 ECS 任务能够

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::<ACCOUNT_NUMBER>:role/<ECS_TASK_ROLE>"
作为校长。

有什么建议吗?

permissions amazon-iam amazon-ecs policy bucket
2个回答
0
投票

这里还有另一种可能性:

  1. 检查您的 S3 对象是否已加密?如果是,您的ECS任务角色也应该有执行解密的权限。否则,您也会遇到权限被拒绝的异常。可以在此处找到一个示例。

0
投票

EC2 实例可能没有配置实例配置文件。

  1. 创建具有以下信任关系的 EC2 角色“ecsInstanceRole”。
{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
  1. 使用此托管策略

    AmazonEC2ContainerServiceforEC2Role

  2. 创建实例配置文件

参考文档

© www.soinside.com 2019 - 2024. All rights reserved.