Quero executar o agente do AWS CodeDeploy com um perfil de usuário que não seja o perfil raiz.
Resolução
O Amazon Linux 2 e o Amazon Linux 2023 substituíram a imagem de máquina da Amazon (AMI) do Amazon Linux 1. Não é mais possível executar AMIs do Amazon Linux 1 como uma instância do Amazon Elastic Compute Cloud (Amazon EC2). A resolução a seguir é compatível com todas as distribuições Linux baseadas em RPM e Debian suportadas do agente do CodeDeploy.
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.
-
Selecione 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.
-
Selecione 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 ####