Configurando AWS CLI com assume Role, MFA e aws-vault para proteger credenciais

Fala galera, bem demais? Espero que sempre!

Muitos profissionais de TI que são responsáveis por gerenciamento de recursos na AWS fazem uso de linha de comando para tal a fim de facilitar e agilizar o dia a dia e para isso utilizamos o AWS CLI, interface de linha de comando criado pela AWS.

Na configuração tradicional do AWS CLI, são gerados dois arquivos no diretório do usuário logado, sendo “config” e “credentials”. Estes arquivos ficam em uma pasta oculta de nome “.aws” (Estou configurando em Windows, mas em MAC e Linux é muito parecido). A questão maior é que no arquivo “credentials” ficarão salvos as chave de acesso e chave secreta, onde com tais dados, qualquer um poderá fazer autenticação usando seu usuário, sendo um risco enorme para a segurança do seu ambiente. Para minimizar os riscos temos duas ações a serem feitas, habilitar MFA para o usuário e fazer uso da ferramenta aws-vault para não deixar exposto o arquivo “credentials”.

Legal, agora que entendemos a necessidade, vamos primeiramente mostrar como fazer a configuração tradicional do AWS CLI.

Primeiramente, é necessário fazer download do AWS CLI seguindo o passo a passo equivalente ao seu sistema operacional através deste link. Neste momento, o diretório oculto “.aws” ainda não foi criado.

Agora você precisa gerar a chave de acesso através da console AWS. Para esta configuração acesse a console AWS, pesquise e selecione pelo serviço “IAM”, vá até a aba “Usuários”, selecione o usuário a qual será gerada a chave de acesso e clique na aba “Credenciais de segurança”.

Caso você esteja gerando chave de acesso para usuário logado, como atalho basta clicar no nome da sua conta AWS ao canto superior direito e selecionar opção “Credenciais de segurança”, conforme imagem abaixo:

Navegue com barra de rolagem até o nível “Chaves de acesso” e clique em “Criar chave de acesso”:

Selecione a opção “Interface de linha de comando (CLI)”, aceite os termos e clique em “Next”:

Clique em “Criar chave de acesso” e sua chave será criada, armazene tais credenciais em cofre seguro ou faça download do arquivo csv e salve em repositório seguro e confiável.

Agora que você possui a chave de acesso e já instalou o AWS CLI, abra seu terminal de comando, digite “aws configure” e pressione “enter”. Será solicitado Access key, Secret Key, região padrão e formato padrão de saída, preencha conforme sua necessidade (Utilize chave de acesso e chave secreta gerada anteriormente).
Agora sim você verá os arquivos gerados que mencionei no inicio deste post:

E inclusive, se você abrir o arquivo “credentials” estará estarão expostos suas credenciais de acesso:

Agora que o AWS CLI está configurado, já consigo executar os comandos para gestão de recursos AWS a qual o usuário possui permissão.

Para a execução acima, eu atribui a política “AmazonEC2FullAccess” diretamente para o nosso usuário em questão porém essa não é uma prática recomendada, usei apenas para validação do AWS CLI, sem essa atribuição teríamos o seguinte retorno.

Sendo assim, seguiremos com a configuração do AWS CLI para assumir uma role e a role é quem terá as devidas permissões. Não vou entrar no detalhe de como configurar uma role e como atribuir as permissões para o usuário assumir a mesma pois o foco deste post é a configuração do AWS CLI.

Edite o arquivo “config” na sua pasta “.aws” e crie um novo perfil da seguinte maneira, substituindo “000000000000” pelo id da sua conta e “role_name” pelo nome da role a qual o usuário em questão possui permissão de assumir:

[default]
output = json
region = us-east-1

[profile principal]
role_arn=arn:aws:iam::000000000000:role/role_name
source_profile=default

Agora precisará executar os comandos aws cli parametrizando o perfil criado. Na imagem abaixo verá que sem passar o perfil como parâmetro, será retornado acesso negado pois o usuário já não possui nenhuma permissão direta, apenas via role:

Para configurar o MFA no aws cli, basta editar novamente o arquivo “config” na sua pasta “.aws” e incluir o parâmetro “mfa_serial” sendo seu valor o arn do device criado conforme mostro no post habilitar MFA para o usuário, ficando então da seguinte forma:

[default]
output = json
region = us-east-1

[profile principal]
role_arn=arn:aws:iam::000000000000:role/role_name
source_profile=default
mfa_serial=arn:aws:iam::000000000000:mfa/mfa_device_name

Será solicitado o código MFA ao chamar o comando cli novamente e após inserir, será executado com sucesso:

Beleza pessoal, agora vamos partir para última parte que seria configurar o aws-vault para armazenar as nossas credenciais sem ter que deixar a mesma exposta no arquivo “credentials”.
Para começarmos, vou pedir que faça download e instalação do aws-vault seguindo o passo a passo de acordo com o seu sistema operacional conforme explicado no repositório github do aws-vault, clique aqui.
No meu caso, utilizo windows e instalei utilizando o chocolatey, para instalação do chocolatey clique aqui e siga as instruções.

Agora vamos criar um perfil de autenticação de nome “login” que substituirá o nosso “default” e para isso, primeiro devemos excluir o arquivo “credentials” da pasta “.aws”, na sequência abra um terminal/cmd e execute o comando “aws-vault add login” e insira as credenciais criadas no começo deste post:

Agora que o vault já está configurado, ajuste o seu arquivo config removendo o perfil “default” e substitua a referência do “source_profile” de “default” para “login”, o meu ficou assim:

[profile principal]
role_arn=arn:aws:iam::770409265803:role/role_admin_access
source_profile=login
mfa_serial=arn:aws:iam::770409265803:mfa/usr_admin

[profile login]

Agora com tudo configurado, para iniciar sua sessão, basta executar o comando “aws-vault exec principal –region us-east-1”, inserir o código MFA quando solicitado e então executar os comandos aws cli para gestão de seus recursos.
Note na imagem abaixo que o arquivo “credentials” já não existe e que após iniciar sessão do aws-vault, não é mais necessário passar parâmetro do profile nos comandos aws cli:

Lembrando que ainda tem mais formas para melhorar ainda mais a segurança do seu ambiente, como por exemplo a configuração de SSO para autenticação, veremos isso em breve através de outro post.

É isso galera, espero que tenham gostado.
Abraços e até breve!


Um comentário sobre “Configurando AWS CLI com assume Role, MFA e aws-vault para proteger credenciais

Deixe um comentário