Предыстория: у меня установлен 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 strong > (чего не должно происходить)
Q1: Как мне обновить мою команду, чтобы она пыталась открыть сеанс ssm с instance / i-xyz123, присутствующим в account5678, чтобы выполнить то, что я пытаюсь сделать.
Я считаю, что мне также нужно было бы добавить каждую роль как доверительную связь с другой.
(Обратите внимание, я хочу сделать это через диспетчер сеансов, так как мне не придется иметь дело с учетными данными любого типа)