Как использовать роль задачи AWS ECS в Node-коде AWS SDK - PullRequest
0 голосов
/ 18 сентября 2018

Код, который использует AWS Node SDK, похоже, не может получить разрешения роли для задачи ECS.

Если я запускаю код в экземпляре ECS EC2, кажется, что этот код наследует роль в экземпляре, а не в задаче.

Если я запускаю код в Fargate, код не получает никакого разрешения.

В отличие от этого, все скрипты bash, которые запускаются внутри экземпляра, похоже, имеют надлежащие разрешения.

Действительно, документация не упоминает это как опцию для узла sdk, просто:

  1. Загружается из ролей IAM для Amazon EC2 (если работает на EC2),
  2. Загружен из файла общих учетных данных (~ / .aws / credentials),
  3. Загружен из переменных среды,
  4. Загружен из файла JSON на диске,
  5. Жестко закодировано в вашем приложении

Есть ли способ, чтобы ваш код узла получил разрешения для задачи ECS?

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

Единственный обходной путь, о котором я могу подумать, - это создать одного пользователя IAM для каждой службы ECS и передать ключ API / секретный ключ в качестве переменных среды в определении задачи.Однако это не кажется безопасным, поскольку оно будет видно в виде простого текста любому, кто имеет доступ к определению задачи.

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Я понял это.Это было странно.

Коллега подумал, что будет "безопаснее", если мы позвоним Object.freeze на proccess.env.Это каким-то образом мешало SDK получить доступ к учетным данным.

Убрано это «улучшение», и все снова в порядке.Я думаю, что урок "не связывайтесь с process.env".

0 голосов
/ 03 октября 2018

В вашем вопросе отсутствует много деталей о том, как вы настраиваете свой кластер ECS, плюс я не уверен, что вопрос касается ECS или конкретно Fargate.

Убедитесь, что вы используете последнюю версиюSDK.Javascript поддерживает учетные данные задач ECS и Fargate.

Часто возникает путаница с учетными данными в ECS.Существует роль IAM, назначаемая экземплярам Cluster EC2, и роль IAM, назначаемая задачам ECS.

Самая распространенная проблема - это «Доверительные отношения», не настроенная для роли задачи ECS.Выберите свою роль IAM, а затем вкладку «Доверительные отношения» и убедитесь, что она выглядит следующим образом:

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

В дополнение к стандартным разрешениям Amazon ECS, необходимым для запуска задач и служб, пользователям IAM также требуется iam:PassRole разрешения на использование ролей IAM для задач.

Затем убедитесь, что вы используете роль IAM в определении задачи.Укажите правильную роль IAM ARN в поле «Роль задачи».Обратите внимание, что это отличается от роли выполнения задач (которая позволяет контейнерам извлекать изображения и публиковать журналы).

Далее убедитесь, что ваши экземпляры ECS используют последнюю версию агента ECS.Версия агента указана на вкладке «Экземпляры ECS» под правым столбцом «Версия агента».Текущая версия 1.20.3.

Используете ли вы оптимизированный ECS AMI?Если нет, добавьте --net=host к вашей команде docker run, которая запускает агент.Просмотрите эту ссылку для получения дополнительной информации.

...