Ir al contenido
Gestiona los usuarios root de las cuentas de AWS de tu organización como un profesional.
Fotografía de seabass creatives en Unsplash

Gestiona los usuarios root de las cuentas de AWS de tu organización como un profesional.

·1472 palabras·7 mins· loading · loading ·
AWS aws iam root scp organizations
Tabla de contenido

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.

Por defecto, cuando se aprovisiona una nueva cuenta, se crea con una contraseña root desconocida, lo que requiere solicitar la recuperación de la contraseña para acceder con el usuario root. Con AWS IAM Root Access Management habilitado, cualquier nueva cuenta creada dentro de la organización ahora se crea sin una contraseña root, y el proceso de recuperación queda bloqueado. Para obtener acceso a la cuenta utilizando credenciales root, debes habilitar la opción de recuperación a través de Root Access Management, tal y como se describe en la sección Habilitar la recuperación de la contraseña root, o utilizando la Consola de AWS.

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.

  1. En la Consola de IAM de AWS, habilita Root Access Management en la página de Account settings.

    Enable Root access management

  2. Selecciona las capacidades a habilitar. Para esta demostración, dejaremos las opciones predeterminadas seleccionadas.

    Enable capabilities

  3. En la página de Account settings, podemos revisar nuestra configuración.

    Review configuration

  4. 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.

    Check Root user credentials

  5. 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.

    Check Root user credentials

  6. La cuenta Sandbox ahora muestra un estado de Not present en la columna de Root user credentials.

    Check Root user credentials

  7. 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.

    Check Root user credentials

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.

  1. 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 the task-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 el task-policy-arn proporcionado (1). AWS proporciona las siguientes managed policies para limitar las acciones de la sesión root:

    • IAMAuditRootUserCredentials
    • IAMCreateRootUserPassword
    • IAMDeleteRootUserCredentials
    • S3UnlockBucketPolicy
    • SQSUnlockQueuePolicy
  2. Utiliza las credenciales temporales para autenticarte como el usuario root de la cuenta de destino.

  3. 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.

  1. 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
    
  2. Utiliza las credenciales temporales para autenticarte como el usuario root de la cuenta de destino.

  3. 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:

Ten en cuenta que esta es una SCP de ejemplo. Revisa su contenido en el contexto de tu postura de seguridad y ajústala según sea necesario.
{
  "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:

  1. Obtener credenciales temporales de root utilizando sts assume-role.
  2. Listar todas las access keys del usuario root con iam list-access-keys.
  3. Para cada access key, eliminarla utilizando iam delete-access-key.
  4. Listar todos los certificados de firma X.509 del usuario root con iam list-signing-certificates.
  5. Para cada certificado de firma X.509, eliminarlo utilizando iam delete-signing-certificate.
  6. Listar todos los dispositivos de autenticación multifactor (MFA) del usuario root con iam list-mfa-devices.
  7. 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!


Referencias
#

Relacionados

Cómo resolver los problemas de rutas en los SPAs en AWS con CloudFront Functions
·1455 palabras·7 mins· loading · loading
AWS aws spa cloudfront
Cómo trabajar con IPv6 en AWS y no morir en el intento
·1852 palabras·9 mins· loading · loading
AWS aws networking ipv6
Entendiendo la rotación de claves de AWS KMS
·2462 palabras·12 mins· loading · loading
AWS aws kms