0

我正在使用 cloudformation 和 yaml 语法设置 AWS ECS 服务。

在某些时候,在相关文档中有一个名为的属性Role,其定义如下:

角色

允许您的 Amazon ECS 容器代理调用负载均衡器的 AWS Identity and Access Management (IAM) 角色的名称或 ARN。

注意在某些情况下,您可能需要添加对服务角色策略的依赖项。有关更多信息,请参阅 DependsOn 属性中的 IAM 角色策略。必需:否 类型:字符串 更新要求:替换

由于我打算将特定服务放在Application Load Balancer后面,是否需要此属性?

如果是这样,我是否需要创建新策略或是否有任何预定义的策略可以达到此目的?

如果我只是在 EC2 容器实例级别添加角色/策略就足够了吗(例如,将其附加到创建亚马逊提供的 ECS 集群的相关模板中?)

如果有任何示例或用例,我将不胜感激,因为该主题的文档含糊不清且不完整。

4

2 回答 2

0

要将您的服务注册到应用程序负载均衡器,您需要服务本身的角色,但 ECS 容器需要一些权限才能注册到集群。

Amazon Elastic Container Service 使用 AWS Identity and Access Management (IAM) 服务相关角色。服务相关角色是一种独特类型的 IAM 角色,直接链接到 Amazon ECS。服务相关角色由 Amazon ECS 预定义,包括该服务代表您调用其他 AWS 服务所需的所有权限。

服务相关角色使设置 Amazon ECS 变得更加容易,因为您不必手动添加必要的权限。Amazon ECS 定义其服务相关角色的权限,除非另有定义,否则只有 Amazon ECS 可以代入其角色。定义的权限包括信任策略和权限策略,并且该权限策略不能附加到任何其他 IAM 实体。

因此,如果您选中此角色,则此包含属性

"elasticloadbalancing:RegisterInstancesWithLoadBalancer",

调试删除角色到服务,它不会注册。

如果您默认使用控制台创建服务,它会附加角色。

在创建和停止任务时,Amazon ECS 需要使用负载均衡器注册和取消注册容器实例的权限。

在大多数情况下,Amazon ECS 服务角色会在 Amazon ECS 控制台首次运行体验中自动为您创建。您可以使用以下过程检查您的账户是否已有 Amazon ECS 服务角色。

AWS 的这个托管策略具有 ARN

arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole
Policy ARN

arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole 描述 Amazon ECS 服务角色的默认策略。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:AuthorizeSecurityGroupIngress",
                "ec2:Describe*",
                "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
                "elasticloadbalancing:DeregisterTargets",
                "elasticloadbalancing:Describe*",
                "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
                "elasticloadbalancing:RegisterTargets"
            ],
            "Resource": "*"
        }
    ]
}

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/check-service-role.html

这就是它的样子

在此处输入图像描述

如果您没有为 ECS 容器实例分配角色,它将永远不会显示在您的 ECS 集群中,并且会引发错误

2018-09-06T15:26:22Z [ERROR] Could not register: NoCredentialProviders: no valid providers in chain. Deprecated.
    For verbose messaging see aws.Config.CredentialsChainVerboseErrors

在下面/var/logs/ecs

tail -f ecs-agent.log.2018-09-06

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/using-service-linked-roles.html

于 2018-09-06T13:42:34.537 回答
0

如果您想Application Load balancer与您的ECS service. 根据描述,该角色允许您的ECS服务代理连接到负载均衡器。如果您不使用负载均衡器,则该字段是可选的。

EC2也不需要在实例级别设置角色。由于存在一些与 ECS 服务相关的策略,因此在实例级别角色添加它是无效的。

请在下面找到AWS 托管策略以创建角色:

{
"AttachedPolicies": [
    {
        "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceAutoscaleRole",
        "PolicyName": "AmazonEC2ContainerServiceAutoscaleRole"
    },
    {
        "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceforEC2Role",
        "PolicyName": "AmazonEC2ContainerServiceforEC2Role"
    },
    {
        "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole",
        "PolicyName": "AmazonEC2ContainerServiceRole"
    }
 ]
}

信任关系

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Service": "ecs-tasks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
于 2018-09-06T09:19:26.823 回答