GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo utilizar aws-vault para acceder de forma segura a varias cuentas de AWS

Tan pronto como comience a trabajar con más de un proyecto u organización en la nube de AWS, la primera pregunta que puede tener es cómo administrar las credenciales de awscli y cómo usarlas de manera fácil y segura para obtener acceso a todas sus cuentas y entornos de AWS. Este artículo cubrirá aws-vault, una herramienta para almacenar y acceder a las credenciales de AWS en un entorno de desarrollo de forma segura.

El problema

No siempre fui un gran admirador de ~/.aws/credentials porque cada vez que llegaba a un nuevo cliente, necesitaba abrir este archivo para editarlo y agregar nuevas credenciales. Como resultado, constantemente tenía la sensación de que mostraba todas mis credenciales existentes a todas las cámaras de seguridad de la oficina. ¡Dios, bendiga al inventor de las pantallas de privacidad!

El segundo problema con las credenciales es que deben renovarse de vez en cuando. Cuantas más cuentas tenga, más esfuerzo dedicará a la rotación de credenciales.

Y el tercer problema:asumir roles en sesiones de terminal y trabajar en varios entornos diferentes al mismo tiempo.

Solución

Como solución a los dos primeros problemas, no hace mucho, comencé a usar:

  • aws-vault:administrador de credenciales de AWS.

Como solución para los dos últimos problemas, descubrí que la siguiente pila de herramientas se adapta a la mayoría de mis necesidades:

  • zsh y oh-my-zsh - terminal.
  • zsh-aws-vault :resaltado del entorno de AWS para la sesión de terminal.

Administración de credenciales de AWS

Aquí hay una guía rápida para comenzar.

Instalación

Asumo aquí que ya tienes zshoh-my-zsh instalado. 😎

Instalemos aws-vault . Esta es la lista completa de pasos de instalación para la mayoría de las plataformas disponibles.

Haremos todo lo posible para OS X (macOS):

brew cask install aws-vault

Elección del backend de aws-vault

aws-bóveda admite varios backends para almacenar sus credenciales. Mi preferencia es usar un archivo encriptado. Por lo tanto, debe agregar la siguiente variable a su ~/.zshrc :

export AWS_VAULT_BACKEND="file"

Mover credenciales a aws-vault

Ahora abra su ~/.aws/credentials expediente. Para cada perfil existente, agregue credenciales a aws-vault .

cat ~/.aws/credentials

aws-vault add profile_1

aws-vault add profile_2

Ahora, aws-vault tiene AWS_VAULT_FILE_PASSPHRASE variable, que se puede utilizar para detener aws-vault de pedirle la contraseña de su bóveda una y otra vez. Hay dos formas de usarlo:

Forma no segura

Agrega la siguiente variable a tu ~/.zshrc~/.bashrc archivo, para evitar aws-vault de pedir su contraseña cada vez:

export AWS_VAULT_FILE_PASSPHRASE="my_strong_password"

Forma segura

En lugar de almacenar AWS_VAULT_FILE_PASSPHRASE variable en .*rc archivos, puede crear Almacén de parámetros de AWS Systems Manager SecureString parámetro, que contiene su aws-vault contraseña:

aws ssm put-parameter \
  --name '/laptop/aws-vault/password' \
  --description 'aws-vault password on my laptop' \
  --value 'my_super_secret_password' \
  --type SecureString

Vamos a crear una secuencia de comandos contenedora, que llamará a aws-vault llamar a aws-vault y configurar AWS_VAULT_FILE_PASSPHRASE con un valor necesario de AWS Systems Manager Parameter Store:

mkdir -p $HOME/bin
cat > $HOME/bin/call-aws-vault.sh <<- EOF
#!/usr/bin/env bash

export PROFILE=$1
export AWS_VAULT_FILE_PASSPHRASE=$(aws ssm get-parameters --profile default --names '/laptop/aws-vault/password' --with-decryption --query 'Parameters[0].Value' --output text)

aws-vault exec -j $PROFILE
EOF

chmod +x $HOME/bin/call-aws-vault.sh

Ahora puede usar este contenedor en ~/.aws/config así:

[profile my_new_profile]
credential_process = ~/bin/call-aws-vault.sh my_new_profile

Puede cambiar el nombre ~/.aws/credentials y luego eliminarlo por completo tan pronto como pruebes todo.

Cambio de perfiles de AWS

Para enumerar todos sus perfiles de AWS, simplemente escriba:

aws-vault list

Genial, ahora puedes cambiar fácilmente tu entorno y ver dónde estás trabajando:

aws-vault exec --duration 8h default

Así es como luce finalmente:

Enfoque basado en roles

Bueno, está bien, acabamos de mover todas nuestras credenciales de AWS a una bóveda segura y configuramos nuestro terminal para mostrar nuestra bóveda de AWS actual. sesión. Ahora es el momento de discutir cómo podemos mejorar la solución aún más.

Organización de cuentas múltiples

Una de las mejores prácticas para organizar el acceso de los usuarios de AWS a diferentes cuentas de AWS es administrar todos los usuarios de IAM en una cuenta de AWS y proporcionar acceso a otras cuentas de AWS al permitirles consumir roles (sts:AssumeRole Llamada API) de esas cuentas.

Este es el ejemplo típico de AWS Organization:

AWS brindó una excelente explicación de Cómo usar un solo usuario de IAM para acceder fácilmente a todas sus cuentas mediante el uso de la CLI de AWS en su publicación de blog, describiendo el proceso de consumo de roles y la configuración de awscli. No los copiaré y pegaré. En su lugar, nos concentraremos en aws-vault configuración para hacer algo similar, pero sin ~/.aws/credentials archivo.

Suponiendo que ya tenga todas las concesiones y permisos necesarios entre sus cuentas. Si no es así, aquí está el gran artículo sobre ese tema: Tutorial:Acceso delegado en cuentas de AWS mediante roles de IAM.

Configuración de perfil predeterminada

Ya deberías tener tu predeterminado configuración de perfil en su lugar en el archivo. Probablemente, se parece a algo así:

[profile default]
region = us-east-1

Configuremos aws-vault como fuente de credenciales para nuestro perfil predeterminado:

[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default

Ahora, si otorga permisos a su usuario o rol de predeterminado perfil para asumir el rol de AWS desde otra cuenta, podrá especificar la configuración de nuevos perfiles de esta manera:

[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin

[profile default]
region = us-east-1
credential_process = /usr/local/bin/aws-vault exec -j default
mfa_serial = arn:aws:iam:::mfa/admin

[profile account_1_role_admin]
region = us-east-1
role_arn = arn:aws:iam:::role/admin
source_profile = default

[profile account_2_role_qa]
region = us-east-1
role_arn = arn:aws:iam:::role/qa
source_profile = default

perfil_fuente la opción de configuración le dirá awscli qué cuenta usar para obtener un rol para cualquier perfil dado.

Prueba

La forma más rápida de probar que puede asumir el rol es llamar:

aws sts get-caller-identify

Debería ver algo similar para su default perfil:

{
    "UserId": "AIDDRCTFVGBHNJMGF3WI7R",
    "Account": "01234567890",
    "Arn": "arn:aws:iam::01234567890:user/admin"
}

Para probar cualquier otra llamada de perfil:

aws sts get-caller-identity --profile account_1_role_admin

Debería ver un resultado similar al siguiente:

{
    "UserId": "AROALKJHGFGDFV3IR2VSI:botocore-session-1584897134",
    "Account": "012345678901",
    "Arn": "arn:aws:sts::012345678901:assumed-role/admin/botocore-session-1584897134"
}

Asumir el rol de cuenta de AWS

Para asumir el rol desde cualquier cuenta de AWS que tenga en su aws-vault, ejecute los siguientes comandos:

aws-vault ls
aws-vault exec --duration 8h default

Aquí, asumimos un rol asociado con el perfil predeterminado durante 8 horas.

Bonificación:inicio de sesión en la consola web de AWS sin contraseña

Como un pequeño bono para aquellos de ustedes que llegaron a su fin, aquí se explica cómo iniciar sesión en la consola web de AWS para cada perfil dado:

aws-vault ls
aws-vault login --duration 8h default

Resumen

Usando zshaws-vault y AWS sts:AssumeRole juntos pueden simplificar significativamente y hacer más segura la administración de varias cuentas de AWS y sus credenciales.

Si te gusta el artículo, por favor, siéntete libre de difundirlo al mundo. Y, por supuesto, si tiene alguna pregunta, sugerencia o comentario, no dude en utilizar Disqus a continuación.

¡Estén atentos!


Linux
  1. Cómo crear varias cuentas de usuario en Linux

  2. Cómo usar túneles SSH para acceder a servidores restringidos

  3. Cómo usar AWS CLI para administrar Amazon S3

  4. Cómo usar múltiples versiones de Node.js usando NVM

  5. ¿Cómo usar la opción de ruta de Unison con múltiples rutas?

Cómo usar Cloudformation para crear colas SQS en AWS

Cómo usar varias cuentas de Skype simultáneamente en Linux

Cómo utilizar aws-vault para acceder de forma segura a varias cuentas de AWS

Cómo acceder y utilizar Patchman en Plesk

¿Cómo acceder a las cuentas de correo electrónico de Hostinger en cPanel?

¿Cómo borro las credenciales en AWS Configure?