Comandos Frecuentes Linux
Comandos frecuentes de Linux
Es una compilación de comandos AWS CLI que fui haciendo mientras aprendía y que aún uso de referencia, espero que también les sirva a ustedes tanto como me ha servido a mí. Lo primero que se debe hacer es instalar y configurar AWS CLI
Recuerda buscar con CTRL+F con acentos y sin acentos, a veces lo escribía con teclado en inglés y no era fácil poner los acentos. Por ejemplo si quieres ver como se crea una nueva política busca “politica” así sin acento y vas saltando entre las respuestas hasta que encuentres lo que buscas.
– configurar las llaves
aws configure
– Conocer el ID de la cuenta actual
aws sts get-caller-identity --query 'Account' --output text
– Ver el alias de la cuenta o el nombre amistoso que se le da a la cuenta
aws iam list-account-aliases --query 'AccountAliases[0]' --output text
– identificar con que cuenta estamos trabajando tipo whoami en linux
aws sts get-caller-identity
El resultado será un json con más o menos la siguiente información:
{
"UserId": "AIDA52SZJW52SZM5KLUIS",
"Account": "888888999999",
"Arn": "arn:aws:iam::888888999999:user/hackvolution"
}
– Describir los trails de la cuenta
aws cloudTrail describe-trails
– Obtener el estado de un trail
aws cloudTrail get-trail-status --name arn:aws:cloudtrail:us-east-1:888888999999:trail/kolibers-cloudtrail-org-prod-security
– Listar las cuentas que forman parte de la organización
aws organizations list-accounts
– Listar todos los usuarios de una cuenta y filtrar por el usuario que en su nombre contenga “luis”, por favor nota que las comillas del nombre son backticks como se les conoce en inglés o comilla invertida, no es la comilla simple.
aws iam list-users --query 'Users[?contains(UserName, `luis`)].UserName' --output text
– hacer grep a una salida de AWS CLI
aws iam list-users |grep luis
– Listar todas las access keys de una cuenta
for user in $(AWS IAM list-users --output-text | awk '{print $NF}'); do
aws iam list-access-keys --user $user --output text;
done
for user in $(AWS IAM list-users --output-text --profile miperfil2aws | awk '{print $NF}'); do
aws iam list-access-keys --user $user --output text --profile miperfil2aws;
done
aws s3 ls
– Listar los archivos de un bucket
aws s3 ls s3://el-nombre-de-tu-bucket/
– calcular el tamaño del bucket, solo ten cuidado porque si tienes mucho buckets se va a tardar demasiado, tal vez prefieras ir haciéndolo por partes
aws s3 ls s3://el-nombre-de-tu-bucket --recursive --human-readable --summarize
Te dará una salida como la siguiente:
2022-02-22 11:04:13 121Kib Bytes archivos_importantes/0054321.csv
2022-02-22 11:04:21 57.9 MiB Bytes archivos_importantes/hackvolution_ai-x000.csv
2022-02-22 11:04:40 0 Bytes archivos_importantes_kolibers/_EXITO
2022-02-22 11:04:40 0 Bytes media_kolibers/registros_27000.csv
2022-02-22 11:04:40 147 Bytes archivos_importantes_/hvt_20230404.csv
Total Objects: 2486
Total Size: 3.4 GiB
aws firehose list-delivery-streams
– Describir delivery streams específicos
aws firehose describe-delivery-stream --delivery-stream-name nombre-del-delivery-stream
– Listar todos los WAF de una cuenta
aws wafv2 list-web-acls --scope REGIONAL
– Listar todos los grupos de CloudWatch
aws logs describe-log-groups
– Listar los log streams dentro de un grupo:
aws logs describe-log-streams --log-group-name tu-log-group-del-waf
– Para ver los logs de un stream específico usa el siguiente comando:
aws logs get-log-events --log-group-name mis-logs-waf --log-stream-name "us-east-1_prod-APIWAFy_9"
– Obtener los nombres de dominio asociados a un API Gateway
aws apigatewayv2 get-domain-names
– Para solo filtrar el elemento DomainName del json del comando anterior se puede emplear la herramienta jq de la siguiente forma:
aws apigatewayv2 get-domain-names| jq '.Items[].DomainName'
– ver el contenido de la política
aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/AllowCreateEnableMFA --version-id v2 --query 'PolicyVersion.Document' --output json
– ver la versión de la política contenido de una política
aws iam get-policy --policy-arn arn:aws:iam::123456789012:policy/AllowCreateEnableMFA --query 'Policy.DefaultVersionId' --output text
– que políticas están vinculadas al usuario
aws iam list-user-policies --user-name mi-usuario-aws
– que políticas in line están vinculadas al usuario
aws iam list-attached-user-policies --user-name mi-usuario-aws
– crear una nueva versión de la política, actualizar la política y ponerla como default
aws iam create-policy-version --policy-arn arn:aws:iam::123456789012:policy/AllowCreateEnableMFA --policy-document file://habilitar-mfa.json --set-as-default
– Traer la versión específica de la política
aws iam get-policy-version --policy-arn arn:aws:iam::123456789012:policy/AllowCreateEnableMFA --version-id v1 --query 'PolicyVersion.Document' --output json
aws iam list-roles --query 'Roles[].RoleName'
– Como listar los roles de una cuenta y listarlos por su nombre, filtrar con grep las coincidencias por ejemplo con toys
aws iam list-roles --query 'Roles[].RoleName'|grep -i toys
– Listar que que SCP existen
aws organizations list-policies --filter SERVICE_CONTROL_POLICY --max-items 25
Es posible cambiar el número de elementos en el ejemplo se usaron 25
– Encontrar que políticas SCP aplican para una cuenta en particular. El primer paso es listar todas las cuentas en la organización
aws organizations list-accounts
– Busca la cuenta de la cuál quieras saber sus datos y anota su id, con el id ahora buscaremos a que OU o unidad organizational pertenece, por ejemplo el id en este caso es: 123456789012
aws organizations list-parents --child-id 123456789012
– Nuevamente anotar el id que aparece de la OU por ejemplo en este caso ou-klbr-srebil0k y ejecutar el siguiente comando
aws organizations list-policies-for-target --target-id ou-klbr-srebil0k --filter SERVICE_CONTROL_POLICY
Si existen políticas aplicadas para esta OU se mostraran a continuación.
También es posible que la política esté aplicada directamente para una cuenta en particular, para este caso ejecutar el comando:
aws organizations list-policies-for-target --target-id 123456789012 --filter SERVICE_CONTROL_POLICY
– Listar todos los nombres de las cuentas que existen en la organización y solo mostrar el ID y el nombre en la misma línea
aws organizations list-accounts |jq -r '.Accounts[] | "\(.Id) - \(.Name)"'
– Crear un dispositivo MFA
aws iam create-virtual-mfa-device --virtual-mfa-device-name mi-dispositivo-MFA --bootstrap-method QRCodePNG --outfile CodigoQR.png
{
"VirtualMFADevice": {
"SerialNumber": "arn:aws:iam::123456789012:mfa/mi-dispositivo-MFA"
}
}
aws iam enable-mfa-device --user-name mi-dispositivo-MFA --serial-number arn:aws:iam::123456789012:mfa/mi-dispositivo-MFA --authentication-code-1 866541 --authentication-code-2 987645
– Vincular el dispositivo con el usuario
aws iam attach-user-policy --user-name mi-usuario-AWS --policy-arn arn:aws:iam::123456789012:policy/AllowCreateEnableMFA
– Crear el archivo de política con tu editor favorito
vi habilitar-mfa.json
{
"Policy": {
"PolicyName": "AllowCreateEnableMFA",
"PolicyId": "ABCDEFGHI5LUISN74EMXX",
"Arn": "arn:aws:iam::123456789012:policy/AllowCreateEnableMFA",
"Path": "/",
"DefaultVersionId": "v1",
"AttachmentCount": 0,
"PermissionsBoundaryUsageCount": 0,
"IsAttachable": true,
"CreateDate": "2023-04-21T23:40:35+00:00",
"UpdateDate": "2023-04-21T23:40:35+00:00"
}
}
aws iam create-policy --policy-name AllowCreateEnableMFA --policy-document file://habilitar-mfa.json
– Listar todas las cuentas AWS en la organización
aws organizations list-accounts
La salida es algo similar a esto:
{
"Accounts": [
{
"Id": "111111111111",
"Arn": "arn:aws:organizations::999999999999:account/o-4x69pob97t/111111111111",
"Email": "aws-toys@kolibers.com",
"Name": "toys",
"Status": "ACTIVE",
"JoinedMethod": "CREATED",
"JoinedTimestamp": "2020-05-27T13:36:19.045000-06:00"
},
{
"Id": "222222222222",
"Arn": "arn:aws:organizations::999999999999:account/o-4x69pob97t/222222222222",
"Email": "aws-kolibers-nonprod@kolibers.com",
"Name": "kolibers-nonprod",
"Status": "ACTIVE",
"JoinedMethod": "CREATED",
"JoinedTimestamp": "2023-01-28T15:40:25.079000-06:00"
},
{
"Id": "333333333333",
"Arn": "arn:aws:organizations::999999999999:account/o-4x69pob97t/333333333333",
"Email": "aws-apps-prod@kolibers.com",
"Name": "apps-prod",
"Status": "ACTIVE",
"JoinedMethod": "CREATED",
"JoinedTimestamp": "2022-01-25T10:38:07.487000-06:00"
},
{
"Id": "444444444444",
"Arn": "arn:aws:organizations::999999999999:account/o-3x69pob97t/444444444444",
"Email": "aws-security@kolibers.com",
"Name": "security",
"Status": "ACTIVE",
"JoinedMethod": "CREATED",
"JoinedTimestamp": "2022-04-27T13:40:07.647000-06:00"
}
]
}
aws organizations list-accounts |jq -r '.Accounts[] | .Id'
– Listar todas las cuentas en la organización y si nombre amigable a un lado, para este ejemplo usamos jq una utilería para trabajar con archivos json, el parámetro –profile cuenta-master es opcional será de acuerdo a tu archivo de configuración.
aws organizations list-accounts --profile cuenta-master |jq -r '.Accounts[] | "\(.Id) - \(.Name)"'
Ahora la salida es algo similar a esto:
111111111111 - toys
222222222222 - kolibers-nonprod
333333333333 - apps-prod
444444444444 - security
aws organizations list-accounts --profile cuenta-master |jq -r '.Accounts[] | "\(.Id) - \(.Name)"' > cuentas.txt
aws account get-alternate-contact --alternate-contact-type=SECURITY --account-id 123456789012
Se obtendrá una salida como la siguiente:
{
"AlternateContact": {
"AlternateContactType": "SECURITY",
"EmailAddress": "lmoreno@kolibers.com",
"Name": "Luis Moreno",
"PhoneNumber": "+525558765432",
"Title": "Cloud Security Architect"
}
}
aws account put-alternate-contact \
--account-id $word \
--alternate-contact-type=SECURITY \
--email-address=lmoreno@kolibers.com \
--name="Luis Moreno" \
--phone-number="+525566778899" \
--title="Cloud Security Architect"
for cuentas in `cat accounts-numbers.txt`; do aws account put-alternate-contact \
--account-id $cuentas \
--alternate-contact-type=SECURITY \
--email-address=lmoreno@kolibers.com \
--name="Luis Moreno" \
--phone-number="+525566778899" \
--title="Cloud Security Architect" \
; done;
aws iam list-access-keys --user-name luismoreno --profile mi-perfil
– eliminar un access key (la opción –profile miperfil es opcional)
aws iam delete-access-key --user-name luismoreno --access-key-id AKIA36UO4MZQN5ZZZZZZ --profile mi-perfil
– listar las políticas del usuario (la opción –profile miperfil es opcional)
aws iam list-attached-user-policies --user-name luismoreno --profile miperfil
– Eliminar la política (la opción –profile miperfil es opcional)
aws iam detach-user-policy --user-name luismoreno --policy-arn arn:aws:iam::aws:policy/ReadOnlyAccess --profile mi-perfil
– Listar a que grupos pertenece el usuario (la opción –profile miperfil es opcional)
aws iam list-groups-for-user --user-name luismoreno --profile miperfil
– Listar las políticas in-line (la opción –profile miperfil es opcional)
aws iam list-user-policies --user-name luismoreno --profile miperfil
– Quitar la política in-line (la opción –profile miperfil es opcional)
aws iam delete-user-policy --user-name luismoreno --policy-name mi-política --profile miperfil
– Eliminar usuario, antes de poder eliminar el usuario se deben eliminar las llaves, políticas, políticas in-line, como se detalla en los comandos anteriores
aws iam delete-user --user-name lmorenodiagrams --profile kolibers-prod