注册错误:NoCredentialProviders: no valid providers in chain ECS 代理错误

Error registering: NoCredentialProviders: no valid providers in chain ECS agent error

我正在尝试使用 EC2 容器服务。我正在使用 terraform 来创建它。 我已经定义了一个 ecs 集群、自动缩放组、启动配置。一切似乎都有效。除了一件事。 ec2 实例正在创建,但它们没有在集群中注册,集群只是说没有可用实例。

在创建实例的 ecs 代理日志中,我发现日志充满了一个错误:

Error registering: NoCredentialProviders: no valid providers in chain

ec2 实例是使用适当的角色创建的 ecs_role。该角色有两个策略,其中一个是以下内容,如需要文档:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ecs:CreateCluster",
        "ecs:DeregisterContainerInstance",
        "ecs:DiscoverPollEndpoint",
        "ecs:Poll",
        "ecs:RegisterContainerInstance",
        "ecs:StartTelemetrySession",
        "ecs:Submit*",
        "ecs:StartTask"
      ],
      "Resource": "*"
    }
  ]
}

我正在使用 ami ami-6ff4bd05。最新地形。

角色中的信任关系存在问题,因为角色应包括 ec2。不幸的是,错误消息并没有那么有用。

信任关系示例:

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

显然,当传递无效的 aws-profile 时也会出现此错误消息。

您可能想要将 AmazonEC2RoleforSSM(或 AmazonSSMFullAccess)添加到您的 EC2 角色。

我花了 2 天时间尝试了所有的东西,但没有任何运气。我有一个标准设置,即私有子网中的 ecs 集群实例,public 子网中的 ELB,NAT 和 IGW 在各自的安全组中正确设置,IAM 角色正确定义,NACL 中的标准配置等。尽管 ec2 实例不会在 ecs 集群上注册。最后我发现我的自定义 VPC 的 DHCP 选项集是为我组织内部 DNS IP 的 'domain-name-servers: xx.xx.xx.xx, xx.xx.xx.xx' IP 地址配置的...

解决方案是为 DHCP 选项集设置以下值: 域名: us-west-2.compute.internal(假设你的vpc在us-west-2), 选项: 域名:us-west-2.compute.internal 域名服务器: AmazonProvidedDNS

确保您 select 启动配置中的 ECS 角色正确。

如果您使用 taskDefinition,请检查您是否设置了 execution & taskRole ARN,并为该角色设置了正确的策略。

我今天收到这个错误并找出问题所在:我错过了在启动模板中设置 IAM role(它在 Advanced 部分下)。您需要将其设置为 ecsInstanceRole(这是 AWS 提供的默认名称 - 因此请检查您是否更改了它并相应地使用)。

我已经从启动配置切换到启动模板,在设置启动模板时,我错过了添加角色!