AWS CLI es la herramienta oficial de Amazon para gestionar los servicios de AWS desde la terminal: S3, EC2, IAM y prácticamente cualquier otro. Instalada en un servidor, permite automatizar tareas como subir copias de seguridad a S3 o consultar el estado de tus recursos desde scripts. En este tutorial instalarás AWS CLI v2 en Ubuntu 24.04 con el instalador oficial, crearás un usuario IAM con permisos mínimos, configurarás credenciales y perfiles, y sincronizarás un directorio con un bucket de S3.
Requisitos previos
Para seguir esta guía necesitas:
- Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con arquitectura x86_64 o arm64.
- Un usuario no root con privilegios
sudo. - Una cuenta de AWS con acceso a la consola para crear un usuario IAM.
NotaUbuntu 24.04 ya no incluye el paquete
awsclien sus repositorios, y el que traían versiones anteriores era la v1, sin mantenimiento activo. Usa el instalador oficial de AWS que se describe a continuación.
Paso 1: Instalar AWS CLI v2
El instalador oficial es un archivo ZIP que contiene la CLI con su propio intérprete de Python, así que no depende del Python del sistema. Instala unzip para poder extraerlo:
sudo apt update
sudo apt install -y unzip curl
Descarga el instalador en un directorio temporal. Si tu servidor es ARM, sustituye x86_64 por aarch64 en la URL (puedes comprobar la arquitectura con uname -m):
cd /tmp
curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip
unzip -q awscliv2.zip
Ejecuta el instalador. Por defecto copia los archivos en /usr/local/aws-cli y crea el enlace /usr/local/bin/aws:
sudo ./aws/install
Comprueba que el comando está disponible:
aws --version
aws-cli/2.x.x Python/3.x.x Linux/6.8.0-xx-generic exe/x86_64.ubuntu.24
Elimina los archivos temporales:
rm -rf /tmp/aws /tmp/awscliv2.zip
ConsejoAWS publica una firma PGP del instalador para verificar su autenticidad. Si tu política de seguridad lo exige, sigue el procedimiento de verificación de la documentación oficial de AWS CLI antes de ejecutar
./aws/install.
Paso 2: Crear un usuario IAM con permisos mínimos
No uses las credenciales del usuario raíz de la cuenta de AWS en un servidor. Crea un usuario IAM específico con solo los permisos que va a necesitar el servidor:
- En la consola de AWS, abre IAM > Usuarios > Crear usuario y dale un nombre descriptivo, por ejemplo
backup-servidor-web. No le des acceso a la consola. - En los permisos, adjunta directamente una política. Para este tutorial basta con una política que permita trabajar con un único bucket de S3 (la verás en el paso 6). Evita
AdministratorAccess. - Abre el usuario creado, ve a Credenciales de seguridad > Crear clave de acceso, elige el caso de uso Command Line Interface (CLI) y guarda el Access Key ID y la Secret Access Key. La clave secreta solo se muestra una vez.
Paso 3: Configurar las credenciales
El comando aws configure guarda las credenciales y la configuración por defecto en el directorio ~/.aws del usuario que lo ejecuta. Ejecútalo con el usuario que va a usar la CLI, sin sudo:
aws configure
Introduce los valores cuando te los pida. Sustituye las claves por las tuyas y elige la región donde están tus recursos:
AWS Access Key ID [None]: AKIAXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: tu_clave_secreta
Default region name [None]: eu-west-1
Default output format [None]: json
Se crean dos archivos: ~/.aws/credentials con las claves y ~/.aws/config con la región y el formato de salida. Comprueba sus permisos, ya que las claves dan acceso a tu cuenta:
ls -l ~/.aws/
-rw------- 1 tu_usuario tu_usuario ... config
-rw------- 1 tu_usuario tu_usuario ... credentials
Si no aparecen como -rw-------, corrígelos con chmod 600 ~/.aws/credentials ~/.aws/config.
Ahora verifica que las credenciales funcionan. sts get-caller-identity no necesita ningún permiso especial y devuelve la identidad con la que te has autenticado:
aws sts get-caller-identity
{
"UserId": "AIDAXXXXXXXXXXXXXXXXX",
"Account": "123456789012",
"Arn": "arn:aws:iam::123456789012:user/backup-servidor-web"
}
Si el ARN corresponde al usuario que acabas de crear, la configuración es correcta.
Paso 4: Trabajar con varios perfiles
Los perfiles permiten usar varias cuentas o usuarios desde el mismo servidor, por ejemplo uno para producción y otro para pruebas. Crea un perfil adicional:
aws configure --profile pruebas
Los perfiles quedan guardados como secciones en los mismos archivos. ~/.aws/credentials tendrá este aspecto:
[default]
aws_access_key_id = AKIAXXXXXXXXXXXXXXXX
aws_secret_access_key = tu_clave_secreta
[pruebas]
aws_access_key_id = AKIAYYYYYYYYYYYYYYYY
aws_secret_access_key = otra_clave_secreta
En ~/.aws/config, los perfiles que no son el de por defecto llevan el prefijo profile:
[default]
region = eu-west-1
output = json
[profile pruebas]
region = us-east-1
output = table
Lista los perfiles configurados:
aws configure list-profiles
default
pruebas
Usa un perfil concreto con la opción --profile, o con la variable de entorno AWS_PROFILE para toda la sesión:
aws sts get-caller-identity --profile pruebas
export AWS_PROFILE=pruebas
Para ver qué credenciales y región está usando la CLI en este momento, y de dónde salen, ejecuta:
aws configure list
Name Value Type Location
---- ----- ---- --------
profile pruebas env ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE']
access_key ****************YYYY shared-credentials-file
secret_key ****************YYYY shared-credentials-file
region us-east-1 config-file ~/.aws/config
Para volver al perfil por defecto, ejecuta unset AWS_PROFILE.
NotaEl orden de prioridad es: opciones en la línea de comandos, variables de entorno (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGION,AWS_PROFILE) y, por último, los archivos de~/.aws. Una variable de entorno olvidada es la causa más habitual de que la CLI use credenciales inesperadas.
Paso 5: Controlar el formato de salida
AWS CLI admite los formatos json, text, table y yaml. La opción --query filtra la respuesta con sintaxis JMESPath antes de mostrarla, lo que evita tener que procesar el JSON con otras herramientas.
Por ejemplo, para listar las regiones disponibles en una tabla:
aws ec2 describe-regions --query 'Regions[].RegionName' --output table
Si el usuario tiene permiso de lectura sobre EC2, esta consulta muestra el ID, el tipo, el estado y la IP pública de cada instancia en ejecución:
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query 'Reservations[].Instances[].[InstanceId,InstanceType,State.Name,PublicIpAddress]' \
--output table
En scripts, --output text es el formato más cómodo, porque devuelve valores separados por tabuladores que se pueden asignar directamente a variables:
CUENTA=$(aws sts get-caller-identity --query Account --output text)
echo "$CUENTA"
Si el usuario no tiene permisos para una operación, recibirás un error AccessDenied o UnauthorizedOperation, que confirma que la política IAM de permisos mínimos funciona.
Paso 6: Sincronizar un directorio con S3
Un uso habitual de AWS CLI en un servidor es enviar copias de seguridad a S3. Crea un bucket. Los nombres de bucket son globales en todo AWS, así que elige uno único, en minúsculas:
aws s3 mb s3://tu-bucket-backups --region eu-west-1
make_bucket: tu-bucket-backups
NotaPara crear el bucket, el usuario IAM necesita el permiso
s3:CreateBucket. Si prefieres no dárselo, crea el bucket desde la consola y deja al usuario solo con los permisos de lectura y escritura sobre él.
Una política IAM de permisos mínimos para que el usuario trabaje con este bucket, y solo con él, es la siguiente. Adjúntala al usuario desde IAM > Usuarios > Permisos > Añadir permisos > Crear política insertada en el editor JSON:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::tu-bucket-backups"
},
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
"Resource": "arn:aws:s3:::tu-bucket-backups/*"
}
]
}
Sube un archivo y lista el contenido del bucket:
echo "prueba" > /tmp/prueba.txt
aws s3 cp /tmp/prueba.txt s3://tu-bucket-backups/prueba.txt
aws s3 ls s3://tu-bucket-backups/
upload: ../tmp/prueba.txt to s3://tu-bucket-backups/prueba.txt
2026-09-25 10:12:03 7 prueba.txt
aws s3 sync copia solo los archivos nuevos o modificados, lo que lo hace adecuado para copias periódicas. Ejecuta primero una simulación con --dryrun para ver qué haría sin transferir nada:
aws s3 sync /var/backups/ s3://tu-bucket-backups/servidor-web/ --exclude "*.tmp" --dryrun
Si la lista es la esperada, repite el comando sin --dryrun. Añade --delete solo si quieres que los archivos borrados en el servidor se eliminen también del bucket; sin esa opción, sync nunca borra nada en el destino.
Para descargar un archivo, invierte el origen y el destino:
aws s3 cp s3://tu-bucket-backups/prueba.txt ./prueba-descargada.txt
Paso 7: Actualizar AWS CLI
El instalador oficial no se actualiza con apt. Para pasar a una versión nueva, descarga de nuevo el ZIP y ejecuta el instalador con --update, indicando las mismas rutas de la instalación original:
cd /tmp
curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip
unzip -q -o awscliv2.zip
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
aws --version
Solución de problemas
Unable to locate credentials. La CLI no encuentra credenciales para el usuario actual. Ejecuta aws configure list para ver qué está leyendo. Es frecuente al ejecutar la CLI con sudo o desde cron con otro usuario, ya que cada usuario tiene su propio ~/.aws.
An error occurred (SignatureDoesNotMatch) o InvalidClientTokenId. La clave secreta es incorrecta o la clave de acceso se ha desactivado. Crea una nueva clave en IAM, ejecuta aws configure de nuevo y desactiva la antigua.
RequestTimeTooSkewed. El reloj del servidor está desincronizado y AWS rechaza las firmas. Comprueba la sincronización con timedatectl y que systemd-timesyncd está activo.
aws: command not found. Comprueba que existe /usr/local/bin/aws y que /usr/local/bin está en tu PATH con echo "$PATH". Para ver el detalle completo de cualquier error, añade --debug al comando.
Conclusión
Has instalado AWS CLI v2 en Ubuntu 24.04 con el instalador oficial, has configurado un usuario IAM con permisos mínimos, has trabajado con perfiles y consultas --query, y has sincronizado un directorio con S3. Como siguientes pasos puedes programar el aws s3 sync con un temporizador de systemd para tener copias automáticas, activar el versionado del bucket para protegerte de borrados accidentales, o usar IAM Identity Center con aws configure sso si gestionas varias cuentas de AWS.
