Quero executar o agente do AWS CodeDeploy com um perfil de usuário que não seja o perfil raiz.
Resolução
A resolução a seguir é compatível com todas as distribuições Linux baseadas em RPM e Debian suportadas do agente do CodeDeploy. Para executar uma instância do Amazon Elastic Compute Cloud (Amazon EC2) com uma imagem de máquina da Amazon (AMI) do Amazon Linux, você deve usar o Amazon Linux 2023 (AL2023) ou o Amazon Linux 2 (AL2).
Pré-requisito: Instale o agente do CodeDeploy em sua instância do EC2 ou verifique se o agente do CodeDeploy está em execução na instância.
Altere o usuário em seu arquivo de configuração do agente do CodeDeploy e conceda ao usuário as permissões necessárias
Conclua as etapas a seguir:
-
Use o SSH para se conectar à sua instância do EC2.
-
Para parar o agente host do CodeDeploy que está instalado na instância, execute o seguinte comando:
sudo service codedeploy-agent stop
-
Para alterar o usuário no arquivo de configuração do agente do CodeDeploy, execute o seguinte comando de editor de fluxos sed:
sudo sed -i 's/""/"ec2-user"/g' /etc/init.d/codedeploy-agent
Observação: substitua ec2-user pelo nome de usuário no qual você deseja que o agente host do CodeDeploy seja executado. Para obter mais informações sobre o comando sed, consulte Introdução no site do GNU.
-
Para recarregar a configuração do systemd, execute os seguintes comandos:
sudo sed -i 's/#User=codedeploy/User=ec2-user/g' /usr/lib/systemd/system/codedeploy-agent.service
sudo systemctl daemon-reload
-
Para conceder ao novo usuário permissões para os diretórios necessários, execute os comandos a seguir:
sudo chown ec2-user:ec2-user -R /opt/codedeploy-agent/
sudo chown ec2-user:ec2-user -R /var/log/aws/
Observação: substitua ec2-user pelo nome de usuário no qual você deseja que o agente host do CodeDeploy seja executado.
-
Para reiniciar o agente do CodeDeploy, execute o seguinte comando:
sudo service codedeploy-agent start
-
Para confirmar que seu arquivo de configuração está atualizado, execute o seguinte comando:
sudo service codedeploy-agent status
Exemplo de saída:
The AWS CodeDeploy agent is running as PID ####
-
Para verificar quais processos estão em execução e o usuário que está executando os processos, execute o seguinte comando:
ps aux | grep codedeploy-agent
Criar um modelo de configuração de execução e um grupo do AWS Auto Scaling para automatizar o processo de mudança de usuário
Conclua as etapas a seguir:
-
Abra o console do Amazon EC2.
-
No painel de navegação, escolha Configurações de execução.
-
Escolha Criar configuração de execução.
-
Selecione a AMI do Amazon Linux.
-
Escolha Avançar: Configure os detalhes.
-
Para o perfil do IAM, escolha um perfil pré-configurado do AWS Identity and Access Management (AWS IAM). O perfil deve conceder permissão à sua instância para acessar os recursos do Amazon Simple Storage Service (Amazon S3).
-
Escolha Detalhes avançados.
-
Na seção Dados do usuário do arquivo de configuração do agente, digite os comandos para instalar o agente do CodeDeploy. Em seguida, atualize o arquivo para usar um usuário específico.
Para IMDSv1, use o seguinte script:
#!/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
Para IMDSv2, use o seguinte script:
#!/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
Observação: substitua ec2-user pelo nome de usuário no qual você deseja que o agente host do CodeDeploy seja executado. O código de exemplo anterior é executado automaticamente quando você executa uma nova instância que usa a configuração de execução definida.
-
Conclua as etapas restantes no assistente de inicialização. Em seguida, escolha Criar configuração de execução.
-
Escolha Criar um grupo do AWS Auto Scaling usando essa configuração de execução.
-
Em Nome do grupo, insira um nome para seu grupo do Auto Scaling.
-
Em Sub-rede, insira uma sub-rede que permita que sua instância acesse a internet.
-
Escolha Avançar: Configure políticas de escalabilidade e, em seguida, escolha uma política.
-
Conclua o restante das etapas no assistente de inicialização e escolha Criar grupo do AWS Auto Scaling.
Verificar se o agente do CodeDeploy está instalado e em execução com o usuário correto em uma nova instância
Primeiro, confirme se sua instância está em execução. Em seguida, conclua as seguintes etapas:
- Use SSH para conectar-se à sua instância.
- Para verificar se o agente do CodeDeploy está em execução na instância, execute o seguinte comando:
sudo service codedeploy-agent status
Se o comando retornar um erro, significa que você não instalou o agente do CodeDeploy. Instale o agente do CodeDeploy.
- Para verificar se o agente do CodeDeploy está sendo executado com o nome de usuário correto, execute o seguinte comando:
ps aux | grep codedeploy-agent
Exemplo de saída:
The AWS CodeDeploy agent is running as PID ####