Aws ecs fargate ResourceInitializationError: невозможно получить секреты или аутентификацию реестра

Я пытаюсь запустить частный репозиторий на платформе aws-ecs-fargate-1.4.0.

Для аутентификации частного репозитория я следовал документам и это работало хорошо.

Как-то после обновления существующей службы много раз она не запускает задачу и жалуется на ошибку, например

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to get registry auth from asm: service call has been retried 1 time(s): asm fetching secret from the service for <secretname>: RequestError: ...

Я не менял ecsTaskExecutionRole, и он содержит все необходимые политики для получения секретного значения.

  1. AmazonECSTaskExecutionRolePolicy
  2. CloudWatchFullAccess
  3. AmazonECSTaskExecutionRolePolicy
  4. GetSecretValue
  5. GetSSMParamters

person NIrav Modi    schedule 17.04.2020    source источник
comment
Это должно было быть связано с группой безопасности вашего ECS. Убедитесь, что ваши входящие правила верны (Protocole, порт, ...) и что исходящие правила разрешают весь трафик (я получил ошибку выше, потому что мое исходящее правило было установлено на определенный порт)   -  person Shams Larbi    schedule 07.06.2021


Ответы (10)


Сотрудник AWS здесь.

То, что вы видите, связано с изменением работы сети между платформой Fargate версии 1.3.0 и платформой Fargate версии 1.4.0. В рамках перехода от использования Docker к использованию containerd мы также внесли некоторые изменения в работу сети. В версии 1.3.0 и ниже каждая задача Fargate получила два сетевых интерфейса:

  • Один сетевой интерфейс использовался для трафика приложения из контейнера (ов) вашего приложения, а также для журналов и извлечения уровня изображения контейнера.
  • Вторичный сетевой интерфейс использовался самой платформой Fargate для получения учетных данных ECR-аутентификации и получения секретов.

Однако у этого вторичного сетевого интерфейса были некоторые недостатки. Этот вторичный трафик не отображался в журналах потоков VPC. Кроме того, хотя большая часть трафика оставалась в клиентском VPC, вторичный сетевой интерфейс отправлял трафик за пределы вашего VPC. Ряд клиентов жаловались, что у них не было возможности указать элементы управления на уровне сети на этом дополнительном сетевом интерфейсе и на то, к чему он мог подключаться.

Чтобы сделать сетевую модель менее запутанной и предоставить клиентам больший контроль, мы изменили в платформе Fargate версии 1.4.0 использование единого сетевого интерфейса и сохранение всего трафика внутри вашего VPC, даже трафика платформы Fargate. Трафик платформы Fargate для получения ECR-аутентификации и секретов задач теперь использует тот же сетевой интерфейс задачи, что и остальной трафик вашей задачи, и вы можете наблюдать за этим трафиком в журналах потоков VPC и контролировать этот трафик с помощью таблицы маршрутизации в вашем собственном AWS VPC. .

Однако с этой расширенной возможностью наблюдения и управления сетью платформы Fargate вы также берете на себя ответственность за то, чтобы в вашем VPC действительно был настроен сетевой путь, который позволяет задаче взаимодействовать с ECR и AWS Secrets Manager.

Есть несколько способов решить эту проблему:

  • Запускать задачи в общедоступной подсети с общедоступным IP-адресом, чтобы они могли связываться с ECR и другими вспомогательными службами через интернет-шлюз.
  • Запускать задачи в частной подсети с таблицей маршрутизации VPC, настроенной для маршрутизации исходящего трафика через шлюз NAT в общедоступной подсети. Таким образом, шлюз NAT может открыть соединение с ECR от имени задачи.
  • Запускайте задачи в частной подсети и убедитесь, что в вашем VPC настроены конечные точки AWS PrivateLink для необходимых вам сервисов (ECR для аутентификации по запросу, S3 для слоев изображений и AWS Secrets Manager для секретов).

Вы можете узнать больше об этом изменении в этом официальном блоге, в разделе эластичный сетевой интерфейс задач (ENI) теперь запускает дополнительные потоки трафика.

https://aws.amazon.com/blogs/containers/aws-fargate-launches-platform-version-1-4/

person nathanpeck    schedule 25.03.2021
comment
Спасибо за подробное объяснение @nathanpeck, однако сегодня мы сталкиваемся с той же проблемой в регионе us-west-1. Мы проверили, что задача выполняется в общедоступной подсети с общедоступным IP-адресом. - person aashitvyas; 09.04.2021
comment
У меня есть NAT в моей частной подсети ... без костей :( - person Myles McDonnell; 13.04.2021
comment
Я столкнулся с аналогичной ошибкой в ​​частной подсети + NAT. Помимо проверки правильности настройки NAT, вам также необходимо убедиться, что роль для задачи может извлекать секреты. Эти ошибки действительно должны отображать полные сообщения, иначе трудно найти основную причину (github .com / aws / container-roadmap / issues / 1133). - person tonyc; 06.05.2021
comment
В моем случае отсутствовал NAT GW - с использованием частной подсети. Только с Internet GW это не сработало. Спасибо за подсказку. - person Paul Lysak; 12.05.2021
comment
@nathanpeck какой вариант будет дешевле? - person ian; 09.07.2021

Я не совсем уверен в вашей настройке, но после того, как я отключил NAT-шлюзы, чтобы сэкономить немного долларов, у меня появилось очень похожее сообщение об ошибке на платформе aws-ecs-fargate-1.4.0:

Stopped reason: ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve ecr registry auth: service call has been retried 1 time(s): RequestError: send request failed caused by: Post https://api.ecr....

Оказалось, что мне пришлось создать конечные точки VPC для этих имен служб:

  • com.amazonaws.REGION.s3
  • com.amazonaws.REGION.ecr.dkr
  • com.amazonaws.REGION.ecr.api
  • com.amazonaws.REGION.logs
  • com.amazonaws.REGION.ssm

И мне пришлось перейти на платформу aws-ecs-fargate-1.3.0. После перехода на более раннюю версию образы Docker можно было извлечь из ECR, и развертывания снова прошли успешно.

Если вы используете диспетчер секретов без NAT-шлюза, возможно, вам придется создать конечную точку VPC для com.amazonaws.REGION.secretsmanager.

person Robert Reiz    schedule 30.04.2020
comment
для меня было достаточно добавить конечную точку для ecr.api - person Dimitris Moraitidis; 24.09.2020
comment
Я бы не стал считать переход на предыдущую платформу разумным советом, чтобы заставить это работать. Я чувствую, что этот ответ также не различает четко доступ к секретному API и другие проблемы. В моем случае предоставление привилегии IAM secretsmanager:GetSecretValue вместе с открытием доступа к сети, особенно когда ECR, который я пытаюсь достичь, находится в другой учетной записи, были ключами к решению проблемы. - person JinnKo; 03.11.2020
comment
Что ж, иногда последняя версия платформы немного глючит. Использование второй последней версии чего-либо во многих случаях имеет смысл, потому что вторая последняя более зрелая. Тем временем я обновился до версии 1.4.0, и она отлично работает. - person Robert Reiz; 06.11.2020
comment
Я не могу согласиться с вашей позицией @RobertReiz. Конечно, иногда версии содержат ошибки; но они тщательно протестированы, и дата выпуска также дает представление о зрелости, а не только о положении в истории версий. Кроме того, если сейчас это работает для вас с 1.4.0, это исключает, что версия платформы была проблемой для вас в начале; потому что, если бы это было из-за ошибки, вы бы теперь использовали 1.4.1 или выше, поскольку я уверен, что они используют семантическое управление версиями. Я думаю, вам следует убрать этот аспект из своего ответа, поскольку он не имеет отношения к делу. - person Richard Kiefer; 17.03.2021

Эта ошибка возникает, когда агенту Fargate не удается создать или загрузить ресурсы, необходимые для запуска контейнера, или если задача принадлежит. Эта ошибка возникает только при использовании платформы версии 1.4 или более поздней, скорее всего, , потому что версия 1.4 использует Task ENI (который находится в вашем VPC) вместо Fargate ENI (который находится в VPC AWS). Я думаю, это может быть вызвано некоторой потребностью в дополнительных разрешениях IAM, необходимых для извлечения изображения из ECR. Вы используете какую-нибудь приватную ссылку? Если да, вы можете ознакомиться с политиками для конечной точки ECR.

Я попытаюсь воспроизвести это, но я предлагаю открыть заявку в службу поддержки с AWS, если вы можете, чтобы они могли внимательнее изучить ваши ресурсы и лучше предложить.

person Ali    schedule 18.04.2020

Обеспечьте подключение к Интернету через IGW или NAT и убедитесь, что общедоступный IP-адрес включен, если его IGW находится в конфигурации сети Fargate Task / Service.

{
  "awsvpcConfiguration": {
    "subnets": ["string", ...],
    "securityGroups": ["string", ...],
    "assignPublicIp": "ENABLED"|"DISABLED"
  }
}
person Mangal    schedule 18.04.2020
comment
Несмотря на то, что он не жалуется, что securityGroups пустые, мне пришлось добавить один, чтобы устранить эту ошибку. - person r590; 17.03.2021
comment
Это был ответ. Использование непубличных сервисов не позволит получить доступ к изображению. - person mmoreram; 11.04.2021

Поскольку агент ECS в FARGATE версии 1.4.0 использует задачу ENI для получения информации, запрос к диспетчеру секретов будет проходить через этот eni.

Вы должны убедиться, что трафик к api секретного менеджера (secretsmanager. {Region} .amazonaws.com) открыт:

  • если ваша задача является частной, у вас должна быть либо конечная точка vpc (com.amazonaws. {region} .secretsmanager), либо шлюз NAT, а группа безопасности ENI задачи должна разрешать для нее исходящий трафик https.

  • если ваша задача является общедоступной, группа безопасности должна разрешить исходящий трафик https на внешний (или общедоступные cidrs AWS).

person kihom    schedule 21.07.2020

Эта ошибка может произойти, если вы используете общедоступную подсеть и выбираете Не назначать общедоступный адрес.

То же самое применимо, если у вас есть частная подсеть и нет интернет-шлюза или шлюза NAT в вашем VPC. Ему нужен путь к Интернету.

Это одинаковое поведение во всей экосистеме AWS. Было бы здорово, если бы в таких случаях AWS отображал большой баннер с предупреждением.

person Sairam    schedule 09.03.2021

У меня была точно такая же проблема с использованием Fargate в качестве типа запуска с версией платформы 1.4.0. В конце, поскольку я использовал общедоступные подсети, все, что мне нужно было сделать, это разрешить назначение общедоступного IP-адреса задачам, чтобы разрешить задаче доступ к исходящей сети для получения изображения.

Я получил подсказку, как решить эту проблему, когда я попытался создать службу с использованием версии платформы 1.3.0, и создание задачи не удалось с аналогичным, но к счастью задокументированная ошибка.

person danielsepulvedab    schedule 14.07.2020

Я решил аналогичную проблему, обновив правила в группе безопасности ECS Service. Ниже конфигурация правил.

Inbound Rules:
* HTTP          TCP   80    0.0.0.0/0
Outbound Rules:
* All traffic   All   All   0.0.0.0/0

person torm    schedule 06.05.2020
comment
спасибо, у меня тоже сработало +1 - person Shankar Yadav; 30.06.2021

Если ваш Fargate работает в частной подсети без доступа к Интернету, технически внутри вашего vpc должна быть уже установлена ​​конечная точка dkr vpc, чтобы ваш Fargate (версии 1.3 и ниже) мог достичь этой конечной точки и развернуть контейнер. Для версии 1.4 Fargate просто нужна дополнительная конечная точка api ecr.

https://aws.amazon.com/blogs/containers/aws-fargate-launches-platform-version-1-4/

person John    schedule 10.03.2021

У меня только что возникла эта проблема, и причина, по которой я ее получил, заключалась в том, что я забыл добавить правила для входящего и исходящего трафика в группу безопасности, связанную с моей службой. (добавлены входящие из моего ALB и исходящие *)

person MillerC    schedule 08.05.2021