инициировать aws ssm от jenkins в одной учетной записи до ec2 в другом экземпляре для передачи данных

Предыстория: у меня установлен jenkins в аккаунте AWS № 1 (account1234), и к нему привязан iam Role-jenkins. Там github настроен с Jenkins.
Когда я нажимаю build job в Jenkins, jenkins извлекает все файлы из github, и их можно найти в

/ var / lib / jenkins / workspace /.

В учетной записи AWS № 2 (acccount5678) в экземпляре ec2 (i-xyz123) работает приложение, а файлы проекта находятся в / home / app / all_files /; К этой роли экземпляра ec2 прикреплена роль приложения.

Чего я пытаюсь достичь: когда я нажимаю кнопку build, я хочу, чтобы jenkins отправлял файлы из учетной записи 1234 в учетную запись 5678, открывая сеанс SSM из Jenkins, в экземпляр ec2, на котором запущено приложение.

Что я пробовал: в jenkins как часть скрипта оболочки сборки я добавил:

aws ssm send-command --region us-east-1 --instance-ids i-xyz123 --document-name AWS-RunShellScript --comment IP config --parameters commands = ifconfig --output text

чтобы проверить это. (В случае успеха я хочу передать cp var/lib/jenkins/workspace/ /home/app/all_files/ в качестве команды)

Ошибка:

Произошла ошибка (AccessDeniedException) при вызове операции SendCommand: Пользователь: arn: aws: sts :: account1234: loaded-role / Role-Jenkins / i-01234abcd не авторизован для выполнения: ssm: SendCommand на ресурсе: arn: aws: ec2: us-east-1: account1234: instance / i-xyz123 Шаг сборки «Выполнить оболочку» помечен как сбой сборки. Завершено: FAILURE

Проблема 1: instance / i- xyz123 находится в account5678, но ошибка выше показывает, что ssm пытается подключиться к экземпляру в account1234 (чего не должно происходить)

Q1: Как мне обновить мою команду, чтобы она пыталась открыть сеанс ssm с instance / i-xyz123, присутствующим в account5678, чтобы выполнить то, что я пытаюсь сделать.

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

(Обратите внимание, я хочу сделать это через диспетчер сеансов, так как мне не придется иметь дело с учетными данными любого типа)


person DJ_Stuffy_K    schedule 28.02.2021    source источник


Ответы (1)


Если я правильно понял, значит, вы правы; для взаимодействия с ресурсами в account5678 должны быть доверительные отношения, чтобы учетная запись Jenkins могла взять на себя соответствующую роль в account5678 и оттуда вызывать SSM.

После того, как вы настроили ролевые отношения (ref: Роли в кросс-аккаунте в IAM)

Вы должны иметь возможность достичь того, что вам нужно, сначала взяв на себя роль в сценарии оболочки, а затем выполнив команду ssm. Таким образом, Дженкинс будет использовать временные кредиты и выполнять команду в правильной учетной записи (5678).

Этот сайт проходит через это довольно хорошо: Tom Gregory - Jenkins Assume Role < / а>

Если вы просто cmd / ctrl f на этой странице ^ и выполните поиск по запросу «shell», вы должны попасть в нужный раздел. Надеюсь, это поможет.

person blinu    schedule 28.02.2021