Проблема с запуском Linux-агента AWS CodeDeploy в некорневом контексте

Я использую AWS CodeDeploy для развертывания кода в наших инстансах AWS Amazon Linux. Я следил за этой статьей базы знаний https://aws.amazon.com/premiumsupport/knowledge-center/codedeploy-agent-non-root-profile/, чтобы агент выполнялся в контексте пользователя ec2 вместо root.

Перед внесением изменений сценарий в файле yml выполнялся, как ожидалось (но нам нужно, чтобы сценарий выполнялся в некорневом контексте), и установка runas: часть файла appspec.yml, похоже, не выполняла сценарий в ec2- пользовательский контекст, как ожидалось

appspec.yml:

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ec2-user/veddor/api
    owner: ec2-user
hooks:
    AfterInstall:
      - location: deploy/script/deploy-veddor-api.sh
        timeout: 300
        runas: ec2-user

После внесения изменения эта ошибка теперь появляется, а не при выполнении сценария, указанного в файле appspec.

LifecycleEvent - AfterInstall
Script - deploy/script/deploy-veddor-api.sh
[stderr]Password: su: Authentication failure

содержимое deploy-veddor-api.sh

cp /home/ec2-user/veddor/api/deploy/config/Config-roddev.php /home/ec2-user/veddor/api/app/config/Config.php
cd /home/ec2-user/veddor/api
chmod +x ./composer.phar
php ./composer.phar install

Мне нужна помощь, чтобы выяснить, что мне нужно сделать, чтобы сценарий deploy-veddor-api.sh действительно запускался в контексте пользователя ec2.


person Ryan Abrahamson    schedule 08.01.2018    source источник


Ответы (3)


Вы можете запустить агент AWS CodeDeploy от имени пользователя без полномочий root. Только root будет иметь возможность иметь runas пользователя в вашей AfterInstall ловушке, так как никакая другая учетная запись пользователя не может запускать замещающую команду пользователя «su» без аутентификации по паролю.

Подробную информацию о runas можно найти в руководстве пользователя по приложениям AWS:

https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-structure-hooks.html

runas Необязательно. Пользователь, олицетворяемый при запуске скрипта. По умолчанию это агент AWS CodeDeploy, работающий на экземпляре. AWS CodeDeploy не хранит пароли, поэтому нельзя выдавать себя за пользователя, если пользователю runas нужен пароль. Этот элемент применим только к экземплярам Amazon Linux и Ubuntu Server.

Если вы уже запускаете агент CodeDeploy как ec2-user, вам не нужно указывать элемент runas в вашем AfterInstall хуке.

person KDjukic    schedule 09.01.2018
comment
Вот и все! Не думал убирать руны после смены агента. Как только я удалил оператор runas из спецификации приложений, он заработал должным образом. Большое спасибо, - person Ryan Abrahamson; 09.01.2018

Если вы используете SDK для запуска CodeDeploy, вот параметр: ignoreApplicationStopFailures: true

см. https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CodeDeploy.html#createDeployment-property

person keos    schedule 10.12.2019

если у вас есть codedeploy, уже настроенный как не root, то удалите команды runas из appspec.yml. Сохраните и повторите попытку!

person Swarnabha Das    schedule 13.07.2021