Skip to content

Instantly share code, notes, and snippets.

@gusdelact
Last active November 4, 2025 18:05
Show Gist options
  • Select an option

  • Save gusdelact/a71831d9916ae606fadfbb18595b63ff to your computer and use it in GitHub Desktop.

Select an option

Save gusdelact/a71831d9916ae606fadfbb18595b63ff to your computer and use it in GitHub Desktop.

🧭 Objetivo

Crear una organización AWS con unas 28 cuentas bajo gobernanza centralizada, sin Control Tower, pero aplicando:

  • AWS Organizations
  • Service Control Policies (SCPs)
  • Buenas prácticas de logging, auditoría y aislamiento

🧩 Estructura recomendada

🌲 Organización propuesta (ejemplo educativo)

Root Organization
│
├── Core OU
│    ├── Management Account (cuenta raíz)
│    ├── Log Archive Account
│    └── Audit Account
│
├── Sandbox OU
│    ├── Alumno01 Account
│    ├── Alumno02 Account
│    └── ...
│    └── Alumno28 Account
│
└── SharedServices OU
     ├── Networking Account
     └── Tools Account

⚙️ Pasos para crear la estructura sin Control Tower

1️⃣ Crear la Organización

En la consola de AWS (cuenta raíz):

  1. Ve a AWS Organizationshttps://console.aws.amazon.com/organizations

  2. Si no tienes una organización, elige “Create organization”

    • Tipo: Con AWS Organizations All features (recomendado)

Esto crea una Management Account (root).


2️⃣ Crear las Organizational Units (OUs)

Crea las siguientes:

  • Core
  • SharedServices
  • Sandbox

Desde la consola:

AWS Organizations → Organizational units → Create new OU

3️⃣ Crear o invitar las cuentas

Tienes dos opciones:

  • A) Crear nuevas cuentas directamente desde Organizations (te pedirá un correo único por cuenta)
  • B) Invitar cuentas existentes (si ya existen cuentas separadas para alumnos)

Recomendación:

  • Crea al menos 3 cuentas base:

    • LogArchive
    • Audit
    • Tools
  • Luego, una por alumno bajo Sandbox OU.


4️⃣ Configurar Service Control Policies (SCPs)

Las SCPs definen qué se puede o no puede hacer en las cuentas, incluso si el usuario es administrador. Aquí algunos ejemplos prácticos 👇

🔸 SCP: Bloquear eliminación de CloudTrail y Config

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyCloudTrailDelete",
      "Effect": "Deny",
      "Action": [
        "cloudtrail:DeleteTrail",
        "cloudtrail:StopLogging",
        "config:DeleteConfigurationRecorder",
        "config:StopConfigurationRecorder"
      ],
      "Resource": "*"
    }
  ]
}

🔸 SCP: Limitar regiones (solo Oregon)

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyRegionsExceptOregon",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringNotEquals": {
          "aws:RequestedRegion": "us-west-2"
        }
      }
    }
  ]
}

🔸 SCP: Bloquear IAM root user actions

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyRootActions",
      "Effect": "Deny",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringLike": {
          "aws:PrincipalArn": "arn:aws:iam::*:root"
        }
      }
    }
  ]
}

Asocia estas SCPs:

  • A la OU Core y Sandbox
  • No las pongas en la raíz directamente (para no bloquear la Management Account)

5️⃣ Centralizar logs (sin Control Tower)

Crea en tu cuenta LogArchive:

  • Un bucket S3 llamado org-central-logs

  • Configura en cada cuenta (puedes automatizar con CloudFormation StackSets):

    • Un CloudTrail multi-región que envíe logs al bucket.
    • AWS Config con destino al mismo bucket.

6️⃣ Crear roles de auditoría

En cada cuenta (mediante CloudFormation StackSets o manualmente):

  • Crea un rol IAM como este:
Resources:
  AuditRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: OrganizationAuditRole
      AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
          - Effect: Allow
            Principal:
              AWS: "arn:aws:iam::<AUDIT_ACCOUNT_ID>:root"
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/SecurityAudit

Esto permite que desde la cuenta Audit puedas entrar con AssumeRole a las demás cuentas para revisar configuración.


7️⃣ (Opcional) Automatizar creación de cuentas con CLI o boto3

Ejemplo CLI:

aws organizations create-account \
  --email "alumno01@ulsa.edu.mx" \
  --account-name "Alumno01" \
  --role-name "OrganizationAccountAccessRole"

Esto puede automatizarse en un bucle para 28 alumnos.


✅ Resultado

Tendrás una estructura gobernada, liviana y rápida, sin Control Tower, con:

  • Separación clara de cuentas.
  • SCPs que aplican políticas globales.
  • Auditoría y logging centralizados.
  • Menor tiempo de despliegue (<2 horas para 28 cuentas con scripts o CLI).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment