【问题标题】:AWS ECS Service Definition: Role propertyAWS ECS 服务定义:角色属性
【发布时间】:2018-09-06 22:23:50
【问题描述】:

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

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

角色

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

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

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

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

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

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

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation amazon-ecs elastic-load-balancer aws-alb


    【解决方案1】:

    如果要将Application Load balancerECS service 一起使用,则需要Role 属性。根据描述,该角色允许您的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"
        }
      ]
    }
    

    【讨论】:

    • 如果不为实例分配角色,它将注册到 ECS 集群。实例级别角色被导入,而服务可以与负载均衡器链接,如果您检查 AWS 的更新视图,他们不要求服务角色,因为有任务定义角色
    • @Adiii 实例级别角色与服务级别角色不同。任务定义角色和服务角色是不同的。任务定义角色特定于您的任务。它与负载均衡器无关
    【解决方案2】:

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

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

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

    所以如果你选中这个角色,这个包含属性

    "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
    

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

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

    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

    【讨论】:

    • 您突出显示的语句和您的代码的语句相互矛盾。在文本中您要求使用服务相关角色,但在代码中您试图在实例级别建议角色
    猜你喜欢
    • 2023-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多