Cuando creas una cuenta de AWS, se crea un usuario root utilizando la dirección de correo electrónico y la contraseña proporcionadas durante el proceso de creación de la cuenta. Este usuario tiene acceso ilimitado a todos los recursos y servicios de la cuenta. Por lo tanto, es esencial proteger a este usuario y se desaconseja su uso en las operaciones diarias. En realidad, el usuario root solo es necesario en situaciones muy específicas.
Cómo funciona la cuenta root en una organización de AWS #
Cuando creamos una cuenta de AWS dentro de una organización de AWS, el proceso es ligeramente diferente. Proporcionamos una dirección de correo electrónico que sirve como identificador para el usuario root de la cuenta de AWS, pero no configuramos una contraseña. En segundo plano, AWS genera una contraseña aleatoria. Si luego necesitamos acceder a la cuenta de la organización como usuario root, simplemente podemos solicitar una recuperación de contraseña a través de la consola de inicio de sesión.
IAM Root Access Management #
IAM Root Access Management es una nueva capacidad de AWS IAM que permite la gestión centralizada de las credenciales root (habilitándolas o deshabilitándolas), bloqueando el proceso de recuperación de contraseñas y realizando acciones privilegiadas de root en cuentas miembro.
Acciones privilegiadas de root en cuentas miembro de la organización #
Con esta función, es posible realizar ciertas acciones de root en cuentas miembro, como eliminar resource policies mal configuradas en Amazon SQS o Amazon S3.
Al momento de escribir este artículo, las acciones privilegiadas permitidas son:
- Eliminar una resource policy de un bucket de S3
- Eliminar una resource policy de una cola de SQS
Gestión de credenciales de root #
Esta función te permite eliminar y auditar las credenciales root de las cuentas miembro. Además, habilita la recuperación de contraseñas para cuentas miembro específicas.
La Consola de AWS solo permite realizar estas acciones de manera individual por cuenta, lo que significa que no es posible eliminar las credenciales root en varias cuentas simultáneamente. Para lograr la eliminación de credenciales root en varias cuentas a la vez, esto debe hacerse de manera programática.
Configuración y uso básico desde la Consola de AWS #
Antes de utilizar Root Access Management, primero debe ser habilitado. Vamos a repasar los pasos para habilitar Root Access Management y utilizarlo desde la Consola de AWS.
-
En la Consola de IAM de AWS, habilita Root Access Management en la página de Account settings.
-
Selecciona las capacidades a habilitar. Para esta demostración, dejaremos las opciones predeterminadas seleccionadas.
-
En la página de Account settings, podemos revisar nuestra configuración.
-
En la página de Root Access Management, podemos ver que el usuario root en la cuenta Sandbox tiene la contraseña de la consola habilitada.
-
Selecciona la cuenta Sandbox y haz clic en el botón Take privileged action. En la sección de Privileged action, selecciona Delete user credentials, revisa la información y haz clic en el botón Delete root user credentials.
-
La cuenta Sandbox ahora muestra un estado de Not present en la columna de Root user credentials.
-
Para recuperar el acceso al usuario root, selecciona nuevamente la cuenta Sandbox y haz clic en el botón Take privileged action. En la sección de Privileged action, selecciona Allow password recovery, revisa la información y haz clic en el botón Allow password recovery.
Gestionar credenciales root o realizar acciones privilegiadas de forma programática #
Root Access Management es una herramienta útil para gestionar las credenciales root en las cuentas de nuestra organización, pero no nos permite gestionar credenciales para varias cuentas a la vez. Esta función sería útil para organizaciones grandes con cientos de cuentas. Para resolver esto, podríamos crear nuestra propia automatización para interactuar con la API de AWS. Aquí hay algunos ejemplos de cómo usar AWS CLI para:
- Eliminar credenciales de root
- Habilitar la recuperación de la contraseña de root
Eliminar credenciales de root #
El siguiente ejemplo ilustra cómo eliminar las credenciales root de una cuenta miembro de AWS.
-
Desde la cuenta de gestión, asume el usuario root en la cuenta de destino utilizando credenciales temporales.
aws sts assume-root --target-principal <Account ID> --task-policy-arn arn=arn:aws:iam::aws:policy/root-task/IAMDeleteRootUserCredentials
sts assume-root
command scopes the session to the privileged tasks that can be performed based on thetask-policy-arn
provided(1). AWS provides the following managed policies to scope root session actions:El comando
sts assume-root
limita la sesión a las tareas privilegiadas que se pueden realizar según eltask-policy-arn
proporcionado (1). AWS proporciona las siguientes managed policies para limitar las acciones de la sesión root:- IAMAuditRootUserCredentials
- IAMCreateRootUserPassword
- IAMDeleteRootUserCredentials
- S3UnlockBucketPolicy
- SQSUnlockQueuePolicy
-
Utiliza las credenciales temporales para autenticarte como el usuario root de la cuenta de destino.
-
Eliminar las credenciales root.
aws iam delete-login-profile
Habilitar la recuperación de la contraseña de root #
El siguiente ejemplo muestra cómo habilitar la contraseña root en una cuenta miembro, permitiendo la recuperación de la contraseña.
-
Desde la cuenta de gestión, asume el usuario root de la cuenta de destino utilizando credenciales temporales.
aws sts assume-root --target-principal <Account ID> --task-policy-arn arn=arn:aws:iam::aws:policy/root-task/IAMCreateRootUserPassword
-
Utiliza las credenciales temporales para autenticarte como el usuario root de la cuenta de destino.
-
Habilita la contraseña root para la cuenta.
aws iam create-login-profile
La contraseña no se puede establecer en este paso, ya que AWS genera una contraseña aleatoria desconocida. A partir de este momento, es posible recuperar la contraseña root para la cuenta siguiendo el procedimiento estándar. (2).
Limitaciones y advertencias #
IAM Root Access Management y Control Tower #
IAM Root Access Management no funciona en cuentas gestionadas por Control Tower cuando el control AWS-GR_RESTRICT_ROOT_USER
está habilitado. Esto se debe a que el control aplica una Service Control Policy (SCP) que impide que el usuario root realice cualquier operación. Dado que IAM Root Access Management en la cuenta de gestión asume el usuario root en la cuenta miembro, se ve impedido de ejecutar cualquier acción necesaria para gestionar las credenciales root o realizar cualquier acción privilegiada.
Esta es la SCP que aplica el control AWS-GR_RESTRICT_ROOT_USER
:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "GRRESTRICTROOTUSER",
"Effect": "Deny",
"Action": "*",
"Resource": [
"*"
],
"Condition": {
"StringLike": {
"aws:PrincipalArn": [
"arn:aws:iam::*:root"
]
}
}
}
]
}
Si, por razones de cumplimiento, necesitas mantener el usuario root bloqueado pero aún deseas gestionar sus credenciales o realizar las acciones privilegiadas permitidas desde la cuenta de gestión de la organización, simplemente deshabilita el control de Control Tower AWS-GR_RESTRICT_ROOT_USER
y aplica una SCP personalizada como la siguiente:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Deny",
"NotAction": [
"iam:GetAccountSummary",
"iam:DeleteAccessKey",
"iam:DeleteSigningCertificate",
"iam:DeleteLoginProfile",
"iam:DeactivateMFADevice",
"iam:ListAccessKeys",
"iam:ListSigningCertificates",
"iam:GetLoginProfile",
"iam:ListMFADevices",
"iam:GetUser",
"iam:GetAccessKeyLastUsed",
"iam:CreateLoginProfile",
"iam:GetLoginProfile",
"s3:DeleteBucketPolicy",
"s3:PutBucketPolicy",
"s3:GetBucketPolicy",
"s3:ListAllMyBuckets",
"sqs:SetQueueAttributes",
"sqs:GetQueueAttributes",
"sqs:ListQueues",
"sqs:GetQueueUrl"
],
"Resource": [
"*"
],
"Condition": {
"ArnLike": {
"aws:PrincipalArn": [
"arn:aws:iam::*:root"
]
}
}
}
]
}
Gestionar credenciales del usuario root de forma programática #
Eliminar la contraseña root de una cuenta miembro usando la Consola de AWS también elimina todas sus access keys, certificados de firma X.509, y desactiva todos los dispositivos de autenticación multifactor (MFA).
De manera programática, esto debe hacerse explícitamente realizando las llamadas adecuadas a la API de AWS. Por ejemplo, un algoritmo tipo podría ser:
- Obtener credenciales temporales de root utilizando
sts assume-role
. - Listar todas las access keys del usuario root con
iam list-access-keys
. - Para cada access key, eliminarla utilizando
iam delete-access-key
. - Listar todos los certificados de firma X.509 del usuario root con
iam list-signing-certificates
. - Para cada certificado de firma X.509, eliminarlo utilizando
iam delete-signing-certificate
. - Listar todos los dispositivos de autenticación multifactor (MFA) del usuario root con
iam list-mfa-devices
. - Para cada dispositivo MFA, desactivarlo utilizando
iam deactivate-mfa-device
.
Conclusión #
En este artículo, exploramos qué es IAM Root Access Management, cómo habilitarlo y cómo usarlo tanto desde la Consola de AWS como de forma programática.
También discutimos la importancia de mantener una postura de seguridad sólida respecto al uso del usuario root, particularmente en las cuentas miembros de AWS Organizations.
Finalmente, revisamos las limitaciones de la herramienta y proporcionamos estrategias para superarlas.
¡Espero que hayas encontrado útil este artículo!