Passer au contenu

Comment exécuter l'agent CodeDeploy avec un profil utilisateur qui n'est pas le profil racine ?

Lecture de 5 minute(s)
0

Je souhaite exécuter l'agent AWS CodeDeploy avec un profil utilisateur qui n'est pas le profil racine.

Résolution

La résolution suivante est compatible avec toutes les distributions RPM et Linux basées sur Debian prises en charge de l'agent CodeDeploy. Pour lancer une instance Amazon Elastic Compute Cloud (Amazon EC2) avec une Amazon Machine Image (AMI) Amazon Linux, vous devez utiliser Amazon Linux 2023 (AL2023) ou Amazon Linux 2 (AL2).

Prérequis : Installez l'agent CodeDeploy sur votre instance EC2 ou vérifiez que l'agent CodeDeploy s'exécute sur l'instance.

Modifier l'utilisateur dans le fichier de configuration de votre agent CodeDeploy et lui accorder les autorisations requises

Procédez comme suit :

  1. Utilisez le protocole SSH pour vous connecter à l’instance EC2.

  2. Pour arrêter l'agent hôte CodeDeploy installé sur l'instance, exécutez la commande suivante :

    sudo service codedeploy-agent stop
  3. Pour modifier l'utilisateur dans le fichier de configuration de l'agent CodeDeploy, exécutez la commande sed suivante de l’éditeur de flux :

    sudo sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent

    Remarque : Remplacez ec2-user par le nom d'utilisateur sur lequel vous souhaitez que l'agent hôte CodeDeploy s'exécute. Pour plus d'informations sur la commande sed, consultez la page Introduction sur le site Web de GNU.

  4. Pour recharger la configuration de systemd, exécutez les commandes suivantes :

    sudo sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
    sudo systemctl daemon-reload
  5. Pour accorder au nouvel utilisateur des autorisations d'accès aux répertoires requis, exécutez les commandes suivantes :

    sudo chown ec2-user:ec2-user -R /opt/codedeploy-agent/
    sudo chown ec2-user:ec2-user -R /var/log/aws/

    Remarque : Remplacez ec2-user par le nom d'utilisateur sur lequel vous souhaitez que l'agent hôte CodeDeploy s'exécute.

  6. Pour redémarrer l'agent CodeDeploy, exécutez la commande suivante :

    sudo service codedeploy-agent start
  7. Pour vérifier que votre fichier de configuration est mis à jour, exécutez la commande suivante :

    sudo service codedeploy-agent status

    Exemple de sortie :

    The AWS CodeDeploy agent is running as PID ####
  8. Pour vérifier quels processus sont exécutés et l’utilisateur qui les lance, exécutez la commande suivante :

    ps aux | grep codedeploy-agent

Créer un modèle de configuration de lancement et un groupe AWS Auto Scaling pour automatiser le processus de changement d'utilisateur

Procédez comme suit :

  1. Ouvrez la console Amazon EC2.

  2. Dans le volet de navigation, choisissez Lancer les configurations.

  3. Choisissez Créer une configuration de lancement.

  4. Sélectionnez l'AMI Amazon Linux.

  5. Sélectionnez Étape suivante : Configurer les détails.

  6. Dans Rôle IAM, choisissez un rôle AWS Identity and Access Management (IAM) préconfiguré. Le rôle doit accorder à votre instance l'autorisation d'accéder aux ressources Amazon Simple Storage Service (Amazon S3).

  7. Choisissez Détails avancés.

  8. Dans la section Données utilisateur du fichier de configuration de l'agent, entrez les commandes pour installer l'agent CodeDeploy. Puis, mettez à jour le fichier pour utiliser un utilisateur spécifique.
    Pour IMDSv1, utilisez le script suivant :

    #!/bin/bash
    REGION=$(curl 169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//')
    yum -y update
    yum install ruby wget -y
    cd /home/ec2-user
    wget https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install
    chmod +x ./install
    ./install auto
    service codedeploy-agent stop
    #adduser username <--- this is only required if you use a username that does not already exist
    sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent
    sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
    systemctl daemon-reload
    chown ec2-user:ec2-user -R /opt/codedeploy-agent/
    chown ec2-user:ec2-user -R /var/log/aws/
    service codedeploy-agent start

    Pour IMDSv2, utilisez le script suivant :

    #!/bin/bash
    TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
    REGION=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/placement/availability-zone/ | sed 's/[a-z]$//')
    yum -y update
    yum install ruby wget -y
    cd /home/ec2-user
    wget https://aws-codedeploy-$REGION.s3.amazonaws.com/latest/install
    chmod +x ./install
    ./install auto
    service codedeploy-agent stop
    #adduser username <--- this is only required if you use a username that does not already exist
    sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent
    sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
    systemctl daemon-reload
    chown ec2-user:ec2-user -R /opt/codedeploy-agent/
    chown ec2-user:ec2-user -R /var/log/aws/
    service codedeploy-agent start

    Remarque : Remplacez ec2-user par le nom d'utilisateur sur lequel vous souhaitez que l'agent hôte CodeDeploy s'exécute. L'exemple de code précédent s'exécute automatiquement lorsque vous lancez une nouvelle instance qui utilise la configuration de lancement définie.

  9. Effectuez les étapes restantes de l'assistant de lancement. Puis, choisissez Créer une configuration de lancement.

  10. Choisissez Créer un groupe AWS Auto Scaling à l'aide de cette configuration de lancement.

  11. Dans Nom du groupe, entrez le nom de votre groupe Auto Scaling.

  12. Dans Sous-réseau, entrez un sous-réseau qui permet à votre instance d'accéder à Internet.

  13. Sélectionnez Étape suivante : Configurer les politiques de mise à l’échelle, puis choisissez-en une.

  14. Suivez les autres étapes de l'assistant de lancement, puis choisissez Créer un groupe AWS Auto Scaling.

Vérifier que l'agent CodeDeploy est installé et s'exécute avec le bon utilisateur sur une nouvelle instance

Tout d'abord, vérifiez que votre instance est en cours d'exécution. Puis, procédez comme ceci :

  1. Utilisez le protocole SSH pour vous connecter à l’instance.
  2. Pour vérifier que l'agent CodeDeploy est exécuté sur l'instance, exécutez la commande suivante :
    sudo service codedeploy-agent status
    Si la commande renvoie une erreur, cela signifie que vous n'avez pas installé l'agent CodeDeploy. Installez l'agent CodeDeploy.
  3. Pour vérifier que l'agent CodeDeploy s'exécute avec le nom d'utilisateur approprié, exécutez la commande suivante :
    ps aux | grep codedeploy-agent
    Exemple de sortie :
    The AWS CodeDeploy agent is running as PID ####
AWS OFFICIELA mis à jour il y a 10 mois