<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Terry Quispe Paniagua</title>
    <description>The latest articles on DEV Community by Terry Quispe Paniagua (@terry_cloud).</description>
    <link>https://dev.to/terry_cloud</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3614371%2F7804f481-6b8c-44c0-ab00-9e93e561a4bf.jpg</url>
      <title>DEV Community: Terry Quispe Paniagua</title>
      <link>https://dev.to/terry_cloud</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/terry_cloud"/>
    <language>en</language>
    <item>
      <title>🛡️ AWS IAM Access Analyzer — Parte 2/4</title>
      <dc:creator>Terry Quispe Paniagua</dc:creator>
      <pubDate>Fri, 03 Jul 2026 00:46:28 +0000</pubDate>
      <link>https://dev.to/terry_cloud/-aws-iam-access-analyzer-parte-24-2lab</link>
      <guid>https://dev.to/terry_cloud/-aws-iam-access-analyzer-parte-24-2lab</guid>
      <description>&lt;h2&gt;
  
  
  External Access: el analizador sin costo adicional que deberías tener activo en todas tus cuentas
&lt;/h2&gt;




&lt;p&gt;En AWS, el acceso no depende de una sola policy. Entre identity policies, resource-based policies, trust policies, SCPs, RCPs, boundaries y configuraciones por servicio, saber si un recurso está expuesto puede volverse confuso rápido.&lt;/p&gt;

&lt;p&gt;Antes de entrar al análisis de permisos efectivos internos, conviene empezar por el analyzer más básico y más urgente: &lt;strong&gt;External Access Analyzer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Este post es sobre ese primer baseline: detectar recursos que están accesibles desde fuera de tu zona de confianza. No tiene costo adicional por recurso analizado, se habilita por región y cubre automáticamente los recursos soportados en esa región. Su objetivo es detectar algo muy concreto: recursos accesibles desde fuera de la zona de confianza que defines.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué hace exactamente el External Access Analyzer?
&lt;/h2&gt;

&lt;p&gt;El External Access Analyzer genera findings cuando detecta que un recurso dentro de tu zona de confianza puede ser accedido por un principal externo. Esa zona de confianza puede ser una cuenta individual o toda una AWS Organization.&lt;/p&gt;

&lt;p&gt;Lo que evalúa depende del tipo de recurso soportado. En términos prácticos, revisa políticas o configuraciones como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bucket policies y ACLs de S3&lt;/li&gt;
&lt;li&gt;trust policies de roles IAM&lt;/li&gt;
&lt;li&gt;key policies y grants de KMS&lt;/li&gt;
&lt;li&gt;queue policies de SQS&lt;/li&gt;
&lt;li&gt;topic policies de SNS&lt;/li&gt;
&lt;li&gt;function policies de Lambda&lt;/li&gt;
&lt;li&gt;resource policies de Secrets Manager, ECR, EFS, DynamoDB, entre otros&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si la policy de un recurso tiene un &lt;code&gt;Principal: "*"&lt;/code&gt;, una cuenta externa, un usuario federado externo o una condición que permite acceso fuera de tu zona de confianza, el analizador puede generar un finding.&lt;/p&gt;

&lt;h3&gt;
  
  
  Qué tipos de acceso externo detecta
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo de acceso&lt;/th&gt;
&lt;th&gt;Ejemplo&lt;/th&gt;
&lt;th&gt;Finding generado&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Acceso público&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;"Principal": "*"&lt;/code&gt; sin condición restrictiva&lt;/td&gt;
&lt;td&gt;✅ Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acceso cross-account a otra cuenta de la misma org&lt;/td&gt;
&lt;td&gt;ARN de cuenta en la misma organización&lt;/td&gt;
&lt;td&gt;Solo si la zona de trust es la cuenta individual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acceso cross-account fuera de la org&lt;/td&gt;
&lt;td&gt;ARN de cuenta externa&lt;/td&gt;
&lt;td&gt;✅ Sí&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acceso restringido por organización&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Condition: { "aws:PrincipalOrgID": "o-xxxx" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Normalmente no, si la zona de trust es esa organización&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Acceso mediante federación externa&lt;/td&gt;
&lt;td&gt;SAML/OIDC con IdP externo o federado&lt;/td&gt;
&lt;td&gt;✅ Sí, si queda fuera de la zona de confianza&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La diferencia entre configurar la zona de confianza como &lt;strong&gt;cuenta&lt;/strong&gt; versus &lt;strong&gt;organización&lt;/strong&gt; importa bastante.&lt;/p&gt;

&lt;p&gt;Si la defines como organización, los accesos cross-account dentro de la misma AWS Organization no generan findings porque se consideran internos a la zona de confianza. Si la defines como cuenta, cualquier acceso cross-account, incluso desde una cuenta hermana de la misma organización, puede generar finding.&lt;/p&gt;




&lt;h2&gt;
  
  
  Por qué este analizador importa antes que cualquier otro
&lt;/h2&gt;

&lt;p&gt;El Internal Access Analyzer tiene costo porque se cobra por recurso monitoreado. El Unused Access Analyzer también tiene costo porque se cobra por rol o usuario analizado. External Access Analyzer, en cambio, no tiene costo adicional y cubre automáticamente los recursos soportados de la región donde se habilita.&lt;/p&gt;

&lt;p&gt;El problema que detecta es frecuente y de alto impacto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bucket S3 con &lt;code&gt;"Principal": "*"&lt;/code&gt; que alguien abrió para una prueba y nunca cerró&lt;/li&gt;
&lt;li&gt;rol IAM con trust policy que confía en una cuenta externa que ya no existe como partner&lt;/li&gt;
&lt;li&gt;clave KMS accesible desde otra cuenta por una integración que ya fue migrada&lt;/li&gt;
&lt;li&gt;secret de Secrets Manager con resource policy demasiado permisiva&lt;/li&gt;
&lt;li&gt;rol con trust policy heredada hacia Cognito Identity Pools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estos recursos no necesariamente generan alarmas operacionales. La aplicación puede seguir funcionando normal. Nadie lo nota. El analizador los detecta porque observa la configuración de acceso, no porque espere a que ocurra un incidente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Recurso recomendado para generar findings útiles
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;Si quieres ver findings reales sin mucha configuración, este es el recurso más directo:&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Crea un &lt;strong&gt;bucket S3 con una bucket policy que permita acceso desde una cuenta externa o desde &lt;code&gt;"*"&lt;/code&gt;&lt;/strong&gt;. El analizador lo detecta y genera un finding con información como recurso, principal externo, origen del acceso y nivel de acceso.&lt;/p&gt;

&lt;p&gt;Por qué S3 es un buen candidato para un lab:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Frecuente en la práctica&lt;/strong&gt;: los findings externos más comunes suelen involucrar buckets con políticas demasiado abiertas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding rápido&lt;/strong&gt;: para S3, los cambios en bucket policy o ACL suelen reflejarse dentro de aproximadamente 30 minutos. Otros cambios, como Block Public Access a nivel de cuenta, pueden tardar más.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding detallado&lt;/strong&gt;: muestra el recurso, el principal externo, cómo se compartió y el nivel de acceso.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fácil de limpiar&lt;/strong&gt;: eliminar o corregir la bucket policy resuelve el finding.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;En la práctica, sin embargo, activar el analizador en un entorno real con AWS IAM Identity Center ya puede generar decenas de findings sin necesidad de crear un recurso de prueba. Eso fue exactamente lo que pasó aquí.&lt;/p&gt;




&lt;h2&gt;
  
  
  External Access Analyzer en acción: lo que encuentras en un entorno real
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Configuración del analizador
&lt;/h3&gt;

&lt;p&gt;El External Access Analyzer se crea desde la consola de IAM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IAM &amp;gt; Access Analyzer &amp;gt; Analyzers &amp;gt; Create analyzer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fytplfmrc8f2wuo8yu4ah.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fytplfmrc8f2wuo8yu4ah.png" alt="Menú de IAM en la consola de AWS con la opción Access Analyzer resaltada" width="244" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuración del lab:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Nombre:        demo-external-access-analyzer
Tipo:          External Access Analysis
Zona de trust: AWS Organization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjdmvl0ibbgxm4tj3uf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjdmvl0ibbgxm4tj3uf5.png" alt="Formulario de creación de un External Access Analyzer con zona de confianza configurada como AWS Organization" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un detalle importante: el analizador opera &lt;strong&gt;por región&lt;/strong&gt;. Si tienes recursos en &lt;code&gt;us-east-1&lt;/code&gt; y &lt;code&gt;us-east-2&lt;/code&gt;, necesitas un analizador en cada región donde quieras monitorear acceso externo. La zona de trust se define a nivel del analizador; si eliges la organización entera, los findings se calculan respecto a ese límite.&lt;/p&gt;




&lt;h3&gt;
  
  
  Lo que encontré al activarlo: 39 findings activos
&lt;/h3&gt;

&lt;p&gt;No hizo falta crear ningún recurso de prueba. En cuanto el analizador quedó activo, apareció una lista larga de findings activos.&lt;/p&gt;

&lt;p&gt;Al inicio tenía aplicado el filtro &lt;code&gt;Public access = false&lt;/code&gt;, por eso veía 38 findings. Al quitar ese filtro apareció un finding adicional: un bucket S3 con acceso público (&lt;code&gt;Public access = true&lt;/code&gt;). Por eso el total real del analizador era de 39 findings.&lt;/p&gt;

&lt;p&gt;La mayoría correspondían a roles IAM relacionados con IAM Identity Center y federación, pero también apareció un bucket S3 con acceso externo. Esa mezcla fue útil porque mostró dos tipos de exposición:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trust policies en roles IAM&lt;/li&gt;
&lt;li&gt;resource policies en S3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esto es importante porque External Access Analyzer no se limita a roles. Su objetivo es detectar recursos soportados que están accesibles desde fuera de la zona de confianza definida para el analizador.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzxfoq0dbztdcpmqqlabn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzxfoq0dbztdcpmqqlabn.png" alt="Lista de findings activos en External Access Analyzer con filtro Public access false aplicado" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Grupo 1 — Roles SSO: federación esperada, pero no se archiva a ciegas
&lt;/h3&gt;

&lt;p&gt;La mayoría de los findings corresponden a roles con nombres del tipo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;aws-reserved/sso.amazonaws.com/AWSReservedSSO_AdministratorAccess_&amp;lt;sufijo&amp;gt;
aws-reserved/sso.amazonaws.com/AWSReservedSSO_AWSReadOnlyAccess_&amp;lt;sufijo&amp;gt;
aws-reserved/sso.amazonaws.com/AWSReservedSSO_AWSPowerUserAccess_&amp;lt;sufijo&amp;gt;
aws-reserved/sso.amazonaws.com/AWSReservedSSO_AWSOrganizationsFullAccess_&amp;lt;sufijo&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estos roles los crea &lt;strong&gt;AWS IAM Identity Center&lt;/strong&gt; automáticamente en las cuentas donde asignas permission sets. Su trust policy permite que usuarios federados los asuman a través del SAML provider (en este caso yo tengo configurado cloud identity de google) asociado a IAM Identity Center:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Federated"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"arn:aws:iam::&amp;lt;cuenta&amp;gt;:saml-provider/AWSSSO_&amp;lt;id&amp;gt;_DO_NOT_DELETE"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRoleWithSAML"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"sts:TagSession"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"SAML:aud"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://signin.aws.amazon.com/saml"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El analizador los marca porque, desde la perspectiva de External Access Analyzer, existe un principal federado que puede asumir el rol. En entornos con IAM Identity Center esto suele ser esperado y forma parte del funcionamiento normal de SSO.&lt;/p&gt;

&lt;p&gt;En mi caso, la revisión sería:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;confirmar que el permission set corresponde al acceso esperado&lt;/li&gt;
&lt;li&gt;confirmar que la cuenta donde aparece el rol es la correcta&lt;/li&gt;
&lt;li&gt;confirmar que los usuarios o grupos asignados siguen vigentes&lt;/li&gt;
&lt;li&gt;confirmar que los permission sets administrativos están donde realmente deben estar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si todo eso está correcto, estos findings son buenos candidatos para archive rule.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw7ua42fsmiwauppluxuj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw7ua42fsmiwauppluxuj.png" alt="Detalle de un finding de rol SSO gestionado por IAM Identity Center con nivel de acceso Write y Tagging" width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El nivel de acceso que muestra el analizador para estos roles es &lt;code&gt;Write, Tagging&lt;/code&gt;, porque el finding está mirando la &lt;strong&gt;trust policy&lt;/strong&gt; del rol: quién puede asumirlo. No está mostrando los permisos efectivos que tendrá la sesión después de asumir el rol.&lt;/p&gt;

&lt;p&gt;Dicho de otra forma, en External Access Analyzer un finding sobre un IAM Role responde principalmente a esta pregunta:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Quién puede asumir este rol desde fuera de mi zona de confianza?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No responde directamente:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Qué puede hacer ese rol una vez asumido?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Grupo 2 — Roles con trust cross-account hacia una cuenta externa
&lt;/h3&gt;

&lt;p&gt;Cuatro findings corresponden a roles con nombres como &lt;code&gt;SSOSAdmin-Asumed&lt;/code&gt;, &lt;code&gt;SSOCores-Asumed&lt;/code&gt;, &lt;code&gt;SSOArchitech-Asumed&lt;/code&gt; y &lt;code&gt;SSOGov-Asumed&lt;/code&gt;. Todos tienen el mismo tipo de principal: una cuenta de AWS que no es parte de la organización definida como zona de trust.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Entidad principal: Cuenta de AWS → &amp;lt;cuenta-externa&amp;gt;
Compartido a través de: Trust policy del rol
Nivel de acceso: Write
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A diferencia de los roles SSO, aquí el trust es directo hacia una cuenta AWS específica. En este contexto, “cuenta externa” no significa una cuenta desconocida, sino una cuenta fuera de la AWS Organization definida como zona de confianza. En mi caso, ese cross-account fue creado adrede desde otra organización para el lab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ypaozknhxl0hc59rlpb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ypaozknhxl0hc59rlpb.png" alt="Detalle de un finding de rol IAM con trust cross-account hacia una cuenta externa" width="800" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aun así, el finding es útil porque recuerda algo importante: cuando la zona de trust es la organización, cualquier trust hacia una cuenta fuera de esa organización queda marcado como acceso externo.  &lt;/p&gt;

&lt;p&gt;La revisión práctica aquí no es “¿quién creó esto?”, sino:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;¿este trust cross-account todavía se necesita?
&lt;/li&gt;
&lt;li&gt;¿la cuenta externa sigue siendo la correcta?
&lt;/li&gt;
&lt;li&gt;¿el rol tiene permisos acordes al caso de uso?
&lt;/li&gt;
&lt;li&gt;¿conviene agregar condiciones como &lt;code&gt;sts:ExternalId&lt;/code&gt;, &lt;code&gt;aws:PrincipalArn&lt;/code&gt; u otra restricción?
&lt;/li&gt;
&lt;li&gt;¿está documentado que esta cuenta externa puede asumir el rol?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Importante: aunque el rol tenga &lt;code&gt;AdministratorAccess&lt;/code&gt;, el finding no muestra &lt;code&gt;AdministratorAccess&lt;/code&gt; como acción. External Access Analyzer está evaluando la trust policy del rol, por eso muestra &lt;code&gt;sts:AssumeRole&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;El finding responde:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿quién puede asumir este rol desde fuera de mi zona de confianza?  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No responde directamente:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿qué permisos tendrá esa sesión después de asumirlo?  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para medir el impacto real, hay que revisar también las policies adjuntas al rol. Si el rol confiado por una cuenta externa tiene &lt;code&gt;AdministratorAccess&lt;/code&gt;, entonces el finding es más sensible, aunque en la consola solo aparezca &lt;code&gt;sts:AssumeRole&lt;/code&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  Grupo 3 — Federación con Google Workspace: SAML externo personalizado
&lt;/h3&gt;

&lt;p&gt;Un finding apunta al rol &lt;code&gt;SSOTestSamlWorkspace&lt;/code&gt;, con trust configurado hacia un SAML provider &lt;code&gt;GoogleWorkspace&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Entidad principal: Usuario federado → arn:aws:iam::&amp;lt;cuenta&amp;gt;:saml-provider/GoogleWorkspace
Compartido a través de: Trust policy del rol
Nivel de acceso: Write
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este caso es diferente a los roles &lt;code&gt;AWSReservedSSO_*&lt;/code&gt; gestionados por IAM Identity Center. Aquí la confianza está puesta directamente en un SAML provider personalizado.&lt;/p&gt;

&lt;p&gt;En mi caso, este rol existe porque uso Google Workspace / Cloud Identity como parte del flujo de federación para entrar a AWS. El analyzer no está diciendo “esto está mal”; está diciendo “este proveedor federado puede asumir este rol”.&lt;/p&gt;

&lt;p&gt;Y eso es justo lo valioso: aunque uno mismo lo haya creado, el analyzer lo pone sobre la mesa para decidir si sigue siendo necesario, si debe documentarse mejor, si debe restringirse más o si ya toca borrarlo.&lt;/p&gt;

&lt;p&gt;Dicho en simple: gracias, analyzer, por recordarme que este camino de acceso sigue vivo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6t9vfz7btuqnro6uglk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd6t9vfz7btuqnro6uglk.png" alt="Detalle de un finding de federación SAML con proveedor GoogleWorkspace" width="800" height="269"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Grupo 4 — Cognito: un rol que quedó vivo después de una prueba
&lt;/h3&gt;

&lt;p&gt;Entre todos los findings, hay uno que tiene una naturaleza diferente al resto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Recurso:    service-role/cognito-testing
Principal:  cognito-identity.amazonaws.com
Condición:  us-east-1:&amp;lt;id-del-pool&amp;gt;  ← pool de Cognito
Nivel:      Write
Tipo:       Público de Cognito
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwifi5do9r0cyeumzt6ye.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwifi5do9r0cyeumzt6ye.png" alt="Detalle de un finding de rol IAM con trust policy hacia Cognito Identity" width="799" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este finding no venía de un Cognito User Pool, sino de una trust policy de IAM asociada a Cognito Identity Pools. La diferencia importa: el User Pool autentica usuarios, mientras que el Identity Pool puede entregar credenciales temporales de AWS mediante roles IAM.&lt;/p&gt;

&lt;p&gt;En mi caso, esto venía de una prueba antigua. En algún momento creé un Identity Pool, luego lo eliminé, pero el rol &lt;code&gt;cognito-testing&lt;/code&gt; quedó vivo con esta trust policy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Federated"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cognito-identity.amazonaws.com"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sts:AssumeRoleWithWebIdentity"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"StringEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cognito-identity.amazonaws.com:aud"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;id-del-pool&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"ForAnyValue:StringLike"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"cognito-identity.amazonaws.com:amr"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"unauthenticated"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La conclusión no es que actualmente exista un Identity Pool público activo, porque al revisar la cuenta ya no había Identity Pools en esa región. La conclusión correcta es que quedó un rol IAM con una trust policy heredada de una prueba anterior.&lt;/p&gt;

&lt;p&gt;Y justamente ahí está el valor del analyzer: no solo encuentra exposiciones activas evidentes, también te recuerda configuraciones viejas que quedaron dando vueltas.&lt;/p&gt;

&lt;p&gt;Gracias, analyzer. Me olvidé de borrar el rol.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4035d5bzkw2ogrizb73.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fw4035d5bzkw2ogrizb73.png" alt="Validación del rol cognito-testing con trust policy heredada hacia Cognito Identity Pools" width="372" height="224"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Grupo 5 — Bucket S3 con acceso público
&lt;/h3&gt;

&lt;p&gt;Al quitar el filtro &lt;code&gt;Public access = false&lt;/code&gt;, apareció un finding adicional sobre un bucket S3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Recurso: demo-api-gw-s3-cors-555
Tipo:    S3 Bucket
Principal externo: Todas las entidades principales
Acceso público: true
Nivel de acceso: Write, Permissions, Tagging, Read, List
Compartido a través de: Política del bucket
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este bucket fue parte de una prueba de API Gateway + S3/CORS. Justamente por eso el finding es útil: no necesariamente es un recurso productivo comprometido, pero sí es una exposición real que quedó visible para revisión.&lt;/p&gt;

&lt;p&gt;A diferencia de los roles SSO, aquí no hablamos de una trust policy de IAM. Hablamos de una bucket policy que permite acceso a todas las entidades principales.&lt;/p&gt;

&lt;p&gt;Este finding merece remediación prioritaria porque combina dos señales fuertes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;el principal externo es público&lt;/li&gt;
&lt;li&gt;el nivel de acceso incluye más que lectura&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En mi caso, como era una prueba, la decisión correcta es simple: corregir la bucket policy, activar/verificar Block Public Access o eliminar el bucket si ya no se necesita.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7e32szop2ycx1zu5yhlk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7e32szop2ycx1zu5yhlk.png" alt="Detalle de un finding de bucket S3 público con principal Todas las entidades principales" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Categorización práctica de los findings
&lt;/h3&gt;

&lt;p&gt;Con este volumen de findings, la primera tarea es categorizarlos para saber qué revisar primero:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Categoría&lt;/th&gt;
&lt;th&gt;Ejemplo&lt;/th&gt;
&lt;th&gt;Acción recomendada&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Roles SSO gestionados por AWS&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;AWSReservedSSO_*&lt;/code&gt; con SAML provider &lt;code&gt;DO_NOT_DELETE&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Validar permission set, cuenta y asignaciones; luego archivar con archive rule si es esperado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roles custom con trust cross-account&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SSOSAdmin-Asumed&lt;/code&gt; confiando en cuenta externa&lt;/td&gt;
&lt;td&gt;Revisar si el acceso sigue vigente, documentado y justificado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roles con SAML provider externo personalizado&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;SSOTestSamlWorkspace&lt;/code&gt; con GoogleWorkspace&lt;/td&gt;
&lt;td&gt;Revisar si el provider y el rol siguen activos&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rol con trust heredada hacia Cognito&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;cognito-testing&lt;/code&gt; con &lt;code&gt;amr = unauthenticated&lt;/code&gt; en la trust policy&lt;/td&gt;
&lt;td&gt;Validar si el Identity Pool sigue existiendo; si no existe, eliminar o limpiar el rol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bucket S3 público&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;demo-api-gw-s3-cors-555&lt;/code&gt; con principal público&lt;/td&gt;
&lt;td&gt;Revisar bucket policy, Block Public Access y necesidad real de exposición pública&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;El orden de prioridad no depende solo del volumen. Los roles SSO pueden ser muchos, pero suelen ser esperados si IAM Identity Center está bien gobernado. En cambio, un bucket S3 público con permisos amplios o un rol con una trust policy heredada hacia Cognito pueden representar una superficie de exposición mucho más concreta.&lt;/p&gt;




&lt;h3&gt;
  
  
  Archive Rules: reducir el ruido esperado
&lt;/h3&gt;

&lt;p&gt;Con decenas de findings de roles SSO esperados, crear una &lt;strong&gt;Archive Rule&lt;/strong&gt; es lo más eficiente. Las archive rules sirven para archivar automáticamente nuevos findings que coincidan con un patrón. Para findings existentes, puedes revisarlos y archivarlos manualmente, o aplicar la regla cuando corresponda desde el flujo de revisión.&lt;/p&gt;

&lt;p&gt;Se crean desde:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IAM &amp;gt; Access Analyzer &amp;gt; Analyzers &amp;gt; [tu analizador] &amp;gt; Archive rules &amp;gt; Create rule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frazu0cgwwghe3lukflv5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frazu0cgwwghe3lukflv5.png" alt="Pantalla de creación de archive rule para archivar findings esperados de roles SSO" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para los roles SSO, una condición útil es filtrar por el nombre del recurso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Resource contains "aws-reserved/sso.amazonaws.com/AWSReservedSSO_"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eso ayuda a archivar automáticamente los nuevos findings asociados a roles gestionados por IAM Identity Center, sin mezclar findings más sensibles como buckets públicos, roles custom con trust cross-account, SAML providers externos personalizados o Cognito.&lt;/p&gt;

&lt;p&gt;Las condiciones disponibles para los filtros dependen de la consola/API, pero normalmente puedes filtrar por campos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Resource&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Principal&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Access level&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is public&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Principal type&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Importante: una archive rule no debe usarse para ocultar findings sin revisión. Primero se valida que el patrón sea esperado; recién después se automatiza el archivado.&lt;/p&gt;




&lt;h3&gt;
  
  
  Recursos soportados por External Access Analyzer
&lt;/h3&gt;

&lt;p&gt;El analizador no solo cubre roles IAM. Estos son los tipos de recursos que puede analizar para external access:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Recurso&lt;/th&gt;
&lt;th&gt;Qué evalúa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;S3 Buckets&lt;/td&gt;
&lt;td&gt;Bucket policy, ACLs, access points asociados y Multi-Region Access Points&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S3 Directory Buckets&lt;/td&gt;
&lt;td&gt;Directory bucket policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IAM Roles&lt;/td&gt;
&lt;td&gt;Trust policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;KMS Keys&lt;/td&gt;
&lt;td&gt;Key policy y grants&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lambda Functions and Layers&lt;/td&gt;
&lt;td&gt;Resource-based policies&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SQS Queues&lt;/td&gt;
&lt;td&gt;Queue policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SNS Topics&lt;/td&gt;
&lt;td&gt;Topic policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secrets Manager&lt;/td&gt;
&lt;td&gt;Resource policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ECR Repositories&lt;/td&gt;
&lt;td&gt;Repository policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EFS File Systems&lt;/td&gt;
&lt;td&gt;File system policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EBS Volume Snapshots&lt;/td&gt;
&lt;td&gt;Snapshot sharing permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RDS DB Snapshots&lt;/td&gt;
&lt;td&gt;Snapshot sharing permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;RDS DB Cluster Snapshots&lt;/td&gt;
&lt;td&gt;Snapshot sharing permissions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DynamoDB Streams&lt;/td&gt;
&lt;td&gt;Resource policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DynamoDB Tables&lt;/td&gt;
&lt;td&gt;Resource policy&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;En este lab, la mayoría de findings fueron sobre roles IAM porque el entorno tenía muchos roles SSO y roles con trust policies hacia identidades externas. Sin embargo, también apareció un bucket S3 público. En entornos donde existan claves KMS compartidas, secretos con resource policies externas, colas SQS compartidas o snapshots públicos, el analizador también puede generar findings de esos tipos.&lt;/p&gt;




&lt;h3&gt;
  
  
  Qué hacer con un finding: Archive vs. remediar
&lt;/h3&gt;

&lt;p&gt;Cuando un finding aparece, tienes dos caminos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Si el acceso es intencional:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Haz clic en &lt;strong&gt;Archive&lt;/strong&gt;. El finding pasa a estado &lt;code&gt;Archived&lt;/code&gt; y queda fuera de la vista activa. También puedes crear archive rules para que findings similares se archiven automáticamente después de haber validado que ese patrón es esperado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Si el acceso no es intencional:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modifica o elimina la política o configuración que abre el acceso. En cuanto el recurso deja de tener acceso externo, el finding pasa a estado &lt;code&gt;Resolved&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Archivar no es remediar. Archivar significa: “este acceso fue revisado y es intencional”. Si el acceso no debería existir, lo correcto no es archivarlo; lo correcto es corregir la policy.&lt;/p&gt;




&lt;h2&gt;
  
  
  External Access vs. Internal Access: cuándo usar cada uno
&lt;/h2&gt;

&lt;p&gt;Antes de pasar al siguiente post, vale la pena separar ambos conceptos.&lt;/p&gt;

&lt;p&gt;External Access Analyzer e Internal Access Analyzer pertenecen a IAM Access Analyzer, pero responden preguntas distintas. External mira hacia fuera: recursos accesibles desde fuera de la zona de confianza. Internal mira hacia dentro: identidades internas que tienen acceso a recursos seleccionados.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criterio&lt;/th&gt;
&lt;th&gt;External Access Analyzer&lt;/th&gt;
&lt;th&gt;Internal Access Analyzer&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pregunta que responde&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;¿Qué recursos están accesibles desde fuera de mi zona de confianza?&lt;/td&gt;
&lt;td&gt;¿Qué identidades internas tienen acceso a recursos críticos seleccionados?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Zona de confianza&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cuenta o AWS Organization&lt;/td&gt;
&lt;td&gt;Cuenta o AWS Organization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tipo de exposición&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Acceso público o cross-account externo&lt;/td&gt;
&lt;td&gt;Acceso interno dentro de la cuenta u organización&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Qué analiza principalmente&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Resource-based policies, trust policies, ACLs o grants según el tipo de recurso&lt;/td&gt;
&lt;td&gt;Permisos efectivos sobre recursos específicos seleccionados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ejemplos de recursos&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Roles IAM, buckets S3, KMS keys, Lambda, SQS, SNS, Secrets Manager, ECR, EFS, snapshots, DynamoDB, entre otros recursos soportados&lt;/td&gt;
&lt;td&gt;Recursos específicos que seleccionas para análisis interno&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cobertura&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recursos soportados en la región donde el analyzer está activo&lt;/td&gt;
&lt;td&gt;Solo los recursos que seleccionas explícitamente&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Costo&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sin costo adicional&lt;/td&gt;
&lt;td&gt;Pagado por recurso monitoreado, por analyzer y por región&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SCP/RCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No es su objetivo principal como cálculo de permiso efectivo; se enfoca en exposición externa desde políticas de recurso, trust policies, ACLs o grants&lt;/td&gt;
&lt;td&gt;Sí entra en el modelo de análisis de permiso efectivo, aunque la interpretación del action list requiere cuidado&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mejor uso&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Baseline permanente para detectar exposición pública o externa&lt;/td&gt;
&lt;td&gt;Auditoría específica de acceso interno sobre recursos sensibles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Recomendación práctica&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Activarlo en todas las cuentas y regiones relevantes&lt;/td&gt;
&lt;td&gt;Usarlo con criterio sobre recursos críticos por costo y alcance&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La forma corta de verlo es esta:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;External Access Analyzer&lt;/strong&gt; sirve para detectar exposición hacia fuera.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal Access Analyzer&lt;/strong&gt; sirve para revisar acceso interno sobre recursos críticos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External&lt;/strong&gt; debería ser baseline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal&lt;/strong&gt; debería usarse selectivamente donde realmente necesitas análisis de acceso efectivo.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Perspectiva de seguridad: por qué los findings deben revisarse antes de archivarse
&lt;/h2&gt;

&lt;p&gt;External Access Analyzer también es útil desde una perspectiva de evaluación de seguridad.&lt;/p&gt;

&lt;p&gt;Un usuario o rol con permisos suficientes para consultar Access Analyzer podría usar los findings como un mapa rápido de recursos expuestos externamente: buckets con acceso público, roles con trust policies hacia cuentas externas, proveedores SAML externos o configuraciones de Cognito que permitan identidades no autenticadas.&lt;/p&gt;

&lt;p&gt;Eso no significa que cualquier finding sea automáticamente crítico. Significa que cada finding representa una ruta de acceso que existe y que merece clasificación.&lt;/p&gt;

&lt;p&gt;Desde el lado defensivo, la prioridad es llegar antes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Activar el analyzer.&lt;/li&gt;
&lt;li&gt;Revisar los findings.&lt;/li&gt;
&lt;li&gt;Separar accesos esperados de accesos no documentados.&lt;/li&gt;
&lt;li&gt;Archivar lo intencional.&lt;/li&gt;
&lt;li&gt;Remediar lo que no debería existir.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Los findings sin revisar son el problema real. Un bucket público intencional, documentado y monitoreado no tiene el mismo peso que un bucket público creado para una prueba y olvidado. Lo mismo aplica para roles federados, trusts cross-account o pools de Cognito.&lt;/p&gt;

&lt;p&gt;En este lab, la mayoría de findings eran esperados por IAM Identity Center, pero el bucket S3 público y el rol con trust heredada hacia Cognito merecían revisión separada. Esa es precisamente la utilidad del analyzer: no reemplaza el criterio del equipo de seguridad, pero reduce mucho el tiempo necesario para encontrar qué revisar primero.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lo que demuestra este lab
&lt;/h2&gt;

&lt;p&gt;Activar el analizador en un entorno real con IAM Identity Center puede generar hallazgos desde los primeros minutos, sin necesidad de crear recursos de prueba. Eso ya dice algo: hay rutas de acceso que merecen revisión y que no siempre son visibles si solo revisas manualmente cada cuenta o cada policy.&lt;/p&gt;

&lt;p&gt;Lo que vale de este analizador no es que reemplace el criterio del equipo de seguridad. Su valor está en que es &lt;strong&gt;continuo y automático&lt;/strong&gt;: revisa los recursos soportados y genera findings cuando detecta acceso público o externo respecto a tu zona de confianza.&lt;/p&gt;

&lt;p&gt;En términos prácticos:&lt;/p&gt;

&lt;p&gt;✅ Sin costo adicional&lt;br&gt;
✅ Cobertura automática de recursos soportados en la región donde se habilita&lt;br&gt;
✅ Findings con detalle de recurso, principal, tipo de acceso y acciones reportadas&lt;br&gt;
✅ Archive rules para reducir ruido esperado, como roles SSO gestionados por IAM Identity Center&lt;br&gt;
✅ Estado &lt;code&gt;Resolved&lt;/code&gt; cuando el acceso externo deja de existir&lt;/p&gt;

&lt;p&gt;Y la lección más importante del lab: el volumen de findings no es el indicador principal de riesgo.&lt;/p&gt;

&lt;p&gt;En mi caso, con el filtro &lt;code&gt;Public access = false&lt;/code&gt; veía 38 findings. Al quitarlo, apareció un bucket S3 público y el total subió a 39. La mayoría eran roles SSO esperados, pero el bucket S3 público y el rol con trust heredada hacia Cognito merecían revisión separada. Ese es precisamente el punto: el analyzer no solo te muestra cuántos findings tienes, sino cuáles debes clasificar primero.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusión
&lt;/h2&gt;

&lt;p&gt;Si tienes una cuenta de AWS y no tienes External Access Analyzer activo, es uno de los primeros controles que habilitaría. No tiene costo adicional, se activa en minutos y te da visibilidad sobre accesos que normalmente no generan una alerta operacional por sí solos.&lt;/p&gt;

&lt;p&gt;Lo que pasó en este lab es representativo de muchos entornos con IAM Identity Center: aparece un volumen alto de findings esperados, especialmente por roles SSO, pero entre ellos puede haber uno o dos findings que sí merecen atención inmediata.&lt;/p&gt;

&lt;p&gt;La habilidad no está solo en activar el analyzer. La habilidad está en clasificar rápido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;qué es esperado&lt;/li&gt;
&lt;li&gt;qué debe archivarse&lt;/li&gt;
&lt;li&gt;qué debe documentarse&lt;/li&gt;
&lt;li&gt;qué debe corregirse&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En el siguiente post cubro &lt;strong&gt;Internal Access Analyzer&lt;/strong&gt;: cómo analizar acceso interno efectivo sobre un recurso crítico, cómo se cruzan IAM policies, bucket policies y SCPs, y por qué no basta con revisar una sola policy.&lt;/p&gt;




&lt;p&gt;💡 &lt;strong&gt;¿Cuántos findings aparecen cuando activas el analizador por primera vez en tu entorno?&lt;/strong&gt; El número suele ser una sorpresa — y la mayoría son esperados, pero entre ellos casi siempre hay algo que merece atención.&lt;/p&gt;

&lt;p&gt;🔗 Si llegaste directo aquí, te recomiendo leer la Parte 1 para el contexto base. En la Parte 3 veremos Internal Access Analyzer con un lab de permisos efectivos, SCPs y acceso cross-account interno.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS #CloudSecurity #IAM #AccessAnalyzer #IAMIdentityCenter #SSO #CognitoSecurity #ExternalAccess #CloudGovernance #AWSOrganizations #LeastPrivilege
&lt;/h1&gt;




&lt;h2&gt;
  
  
  Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;AWS IAM Documentation — &lt;strong&gt;What is IAM Access Analyzer?&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS IAM Documentation — &lt;strong&gt;IAM Access Analyzer supported resource types for external and internal access&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-resources.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-resources.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS IAM Documentation — &lt;strong&gt;Create an IAM Access Analyzer external access analyzer&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-create-external.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-create-external.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS IAM Documentation — &lt;strong&gt;IAM Access Analyzer findings&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS IAM Documentation — &lt;strong&gt;Archive rules&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-archive-rules.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-archive-rules.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS Pricing — &lt;strong&gt;IAM Access Analyzer pricing&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://aws.amazon.com/iam/access-analyzer/pricing/" rel="noopener noreferrer"&gt;https://aws.amazon.com/iam/access-analyzer/pricing/&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS S3 Documentation — &lt;strong&gt;Reviewing bucket access using IAM Access Analyzer for S3&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-analyzer.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-analyzer.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AWS S3 Documentation — &lt;strong&gt;Blocking public access to your Amazon S3 storage&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-control-block-public-access.html&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>iam</category>
      <category>tutorial</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>🛡️AWS IAM Access Analyzer — Parte 1/4</title>
      <dc:creator>Terry Quispe Paniagua</dc:creator>
      <pubDate>Sun, 21 Jun 2026 01:14:43 +0000</pubDate>
      <link>https://dev.to/terry_cloud/aws-iam-access-analyzer-parte-14-22io</link>
      <guid>https://dev.to/terry_cloud/aws-iam-access-analyzer-parte-14-22io</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;¿Quién puede acceder realmente a tus recursos en AWS?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;En el post anterior hablamos de SCPs, RCPs y IAM Policies. Si no lo leíste, te recomiendo empezar por ahí porque este post construye sobre eso.&lt;/p&gt;

&lt;p&gt;Hoy quiero hacerte una pregunta incómoda:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"¿Puedes decirme, ahora mismo, qué identidades tienen acceso efectivo a este bucket S3?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No el acceso que &lt;em&gt;pensaste&lt;/em&gt; que configuraste. El acceso &lt;strong&gt;real&lt;/strong&gt;, considerando todas las políticas en juego.&lt;/p&gt;

&lt;p&gt;Si tardas más de 30 segundos en responder, este post es para ti.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ac1j0nbbc957kae7ree.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4ac1j0nbbc957kae7ree.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;El problema con el acceso en AWS&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Cuando tienes una sola cuenta y cuatro usuarios, responder esa pregunta es fácil. Abres la consola, revisas las políticas y listo.&lt;/p&gt;

&lt;p&gt;Pero hay una diferencia importante entre dos cosas que suelen confundirse:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acceso esperado&lt;/strong&gt;: lo que crees que configuraste, suponiendo que sea correcto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acceso efectivo&lt;/strong&gt;: lo que AWS realmente permite después de evaluar todas las políticas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La brecha entre estas dos cosas es donde vive la mayoría de los incidentes de seguridad en AWS. No son ataques sofisticados. Son configuraciones que alguien dio por buenas porque "la IAM policy dice que sí" — sin considerar el resto de las capas.&lt;/p&gt;

&lt;p&gt;En el mundo real, un entorno AWS medianamente serio se parece más a esto:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10, 20, 50 o más cuentas dentro de una AWS Organization&lt;/li&gt;
&lt;li&gt;Decenas de roles que se asumen entre cuentas - en algunas ocasiones he visto miles -.&lt;/li&gt;
&lt;li&gt;SCPs aplicadas a nivel de OU que limitan lo que pueden hacer las identidades.&lt;/li&gt;
&lt;li&gt;RCPs que controlan quién puede acceder a tus recursos desde fuera.&lt;/li&gt;
&lt;li&gt;Resource-based policies en S3, KMS, SQS, SNS, etc.&lt;/li&gt;
&lt;li&gt;Permission Boundaries en algunos roles.&lt;/li&gt;
&lt;li&gt;Trust policies que definen quién puede asumir cada rol.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y ahí es donde la cosa se complica de verdad.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;¿Qué determina realmente el acceso efectivo?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Cuando AWS evalúa si una acción está permitida, no se queda solo con la IAM policy que ves en el rol o usuario. Revisa todas las capas que aplican a esa solicitud y parte de una regla muy simple: si no hay un &lt;code&gt;Allow&lt;/code&gt;, el acceso está denegado; y si aparece un &lt;code&gt;Deny&lt;/code&gt; explícito, ese &lt;code&gt;Deny&lt;/code&gt; gana siempre.&lt;/p&gt;

&lt;p&gt;Dicho de forma simple, en una sola cuenta la evaluación se puede entender así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;¿Existe un Deny explícito aplicable?
    └── Sí → DENEGADO. Fin.
    └── No → continuar

¿Existe algún Allow válido?
    └── Puede venir de una IAM policy o de una resource-based policy
    └── Si no existe → DENEGADO

¿Hay algún límite que recorte ese permiso?
    └── SCP
    └── RCP
    └── Permission Boundary
    └── Session Policy

Si hay Allow y ningún límite lo bloquea → PERMITIDO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La parte importante es esta: IAM policies y resource-based policies pueden conceder permisos, pero SCPs, RCPs, Permission Boundaries y Session Policies funcionan más como límites. No agregan permisos por sí solos; más bien definen hasta dónde puede llegar un permiso que ya existe.&lt;/p&gt;

&lt;p&gt;Resumido de forma práctica:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Acceso efectivo =
    permiso concedido
  - denies explícitos
  - límites organizacionales
  - boundaries o session policies aplicables
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si &lt;strong&gt;cualquiera&lt;/strong&gt; de estas capas dice "No", la acción está bloqueada. No importa que las demás capas parezcan permitirlo. Este es el punto que la gente entiende en teoría pero subestima en la práctica. En cross-account hay matices adicionales, porque AWS evalúa tanto la cuenta del principal como la cuenta donde vive el recurso. Pero la idea base se mantiene: cualquier deny explícito aplicable bloquea la acción. Puedes revisar el flujo de evaluación en:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="//reference_policies_evaluation-logic_policy-eval-basics.html"&gt;Single account&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="//reference_policies_evaluation-logic-cross-account.html"&gt;cross-account&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="//reference_policies_evaluation-logic.html"&gt;Policy evaluation logic general&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El problema a escala: con múltiples cuentas, cientos o miles de roles, innumerables recursos, varias OUs con diferentes SCPs y RCPs, hacer este análisis a mano para cada recurso crítico es inviable. Y si no lo haces, no sabes realmente qué acceso tienen tus identidades.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Tres escenarios donde el acceso falla aunque "debería" funcionar&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Estos son los casos que más se repiten. Si has trabajado en entornos con Organizations, probablemente reconoces alguno.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escenario 1: El admin que no puede hacer nada&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un usuario tiene la política &lt;code&gt;AdministratorAccess&lt;/code&gt; en su cuenta. Intenta crear un bucket S3 en &lt;code&gt;sa-east-1&lt;/code&gt; y le da error de acceso denegado. No cambió nada. Todo funcionaba ayer.&lt;/p&gt;

&lt;p&gt;Lo que pasó: alguien en el equipo de plataforma aplicó una SCP a nivel de OU que restringe la creación de recursos a &lt;code&gt;us-east-1&lt;/code&gt; únicamente - algo muy habitual y recomendado -. El admin ve un &lt;code&gt;AccessDenied&lt;/code&gt;, pero también el motivo por el cual, ya que en el detalle de error se indica que la acción está vetada por una SCP - a veces no es tan detallado -.&lt;/p&gt;

&lt;p&gt;La SCP es un límite máximo. &lt;code&gt;AdministratorAccess&lt;/code&gt; dice "puede hacer todo", pero si la SCP dice "solo en us-east-1", el resultado es "puede hacer todo, solo en us-east-1".&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ejemplo: Eliminación de objeto con restricción por SCP&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhppdpxf4tfssi89325ls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhppdpxf4tfssi89325ls.png" alt=" " width="799" height="152"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ejemplo: Eliminación de objeto por CLI
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmdswgz25d0y7qnodqzw1.png" alt=" " width="796" height="60"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Escenario 2: El bucket "público" que no lo es&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un desarrollador configura un bucket S3 con una bucket policy que permite &lt;code&gt;s3:GetObject&lt;/code&gt; a &lt;code&gt;"Principal": "*"&lt;/code&gt;. Desde su cuenta local, el acceso funciona. Pero desde una cuenta externa de un proveedor, el acceso falla.&lt;/p&gt;

&lt;p&gt;Lo que pasó: hay una RCP a nivel de organización que exige que cualquier acceso a recursos de S3 venga de un principal con &lt;code&gt;aws:PrincipalOrgID&lt;/code&gt; igual al ID de la organización. El &lt;code&gt;"*"&lt;/code&gt; de la bucket policy no se limita a sí mismo — la RCP sí lo limita desde afuera.&lt;/p&gt;

&lt;p&gt;La RCP actúa sobre el recurso sin importar lo que diga la bucket policy. El desarrollador configuró el acceso "correctamente" según lo que entiende de S3, pero la capa organizacional lo restringe silenciosamente.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Escenario 3: El rol cross-account que IAM permite pero S3 no&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Un rol en la Cuenta B tiene una IAM policy que permite &lt;code&gt;s3:GetObject&lt;/code&gt; sobre el bucket &lt;code&gt;arn:aws:s3:::datos-criticos/*&lt;/code&gt;. El equipo valida la policy, todo se ve bien. Pero cuando el rol intenta acceder al bucket, falla.&lt;/p&gt;

&lt;p&gt;Lo que pasó: la bucket policy en la Cuenta A (donde vive el bucket) no lista el rol de Cuenta B como Principal permitido. En acceso cross-account, tanto la IAM policy del rol como la resource-based policy del recurso deben permitir la acción de forma explícita. Una sola no alcanza.&lt;/p&gt;

&lt;p&gt;Este es uno de los errores más comunes con acceso cross-account: el equipo de Cuenta B configura sus políticas IAM perfectamente y asume que eso es suficiente. No lo es.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;¿Qué es IAM Access Analyzer y qué tipos existen?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;IAM Access Analyzer es el servicio de AWS que ayuda a identificar y revisar accesos sobre recursos e identidades. En vez de revisar políticas manualmente y cruzar capas en tu cabeza — lo que puede ser propenso a errores y muy complicado — , el analizador lo hace por ti y genera &lt;em&gt;findings&lt;/em&gt; — hallazgos sobre accesos que merecen revisión.&lt;/p&gt;

&lt;p&gt;Hay tres tipos de analizador, y es importante no confundirlos porque resuelven problemas distintos:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo&lt;/th&gt;
&lt;th&gt;¿Qué detecta?&lt;/th&gt;
&lt;th&gt;¿Tiene costo?&lt;/th&gt;
&lt;th&gt;¿Cuándo usarlo?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;External Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recursos accesibles desde fuera de tu zona de confianza (otra cuenta, internet)&lt;/td&gt;
&lt;td&gt;Sin costo adicional&lt;/td&gt;
&lt;td&gt;Siempre. Es el punto de partida en cualquier cuenta&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Internal Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Qué principals &lt;em&gt;dentro&lt;/em&gt; de tu org tienen acceso a recursos específicos, con permisos efectivos&lt;/td&gt;
&lt;td&gt;Pagado ($9 USD/recurso/región/mes)&lt;/td&gt;
&lt;td&gt;Recursos críticos: buckets, RDS o cluster snapshots, DynamoDB etc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unused Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Roles y usuarios con permisos concedidos que no han sido utilizados&lt;/td&gt;
&lt;td&gt;Pagado ($0.20 USD/rol o usuario/mes)&lt;/td&gt;
&lt;td&gt;Revisiones de least privilege, limpieza de accesos obsoletos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;La confusión más común es querer usar &lt;strong&gt;Internal Access&lt;/strong&gt; para detectar accesos externos. No hace eso. Para eso existe &lt;strong&gt;External Access&lt;/strong&gt;, que además es gratuito.&lt;/p&gt;

&lt;p&gt;La novedad relevante que cubre esta serie es &lt;strong&gt;Internal Access&lt;/strong&gt;, una de las capacidades más recientes de IAM Access Analyzer, que permite analizar el permiso efectivo considerando SCPs, RCPs y resource policies en conjunto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc980gse8k9mzsibrv24z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc980gse8k9mzsibrv24z.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;¿Por qué importa esto para seguridad?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Auditorías y cumplimiento (PCI-DSS, ISO 27001, SOC 2)&lt;/strong&gt;&lt;br&gt;
En una auditoría, alguien va a pedirte evidencia de quién tiene acceso a tus datos sensibles. Access Analyzer te da eso en formato exportable, con el detalle de qué acciones puede realizar cada identidad. En vez de revisar cien políticas a mano, tienes un reporte automatizado.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Least privilege de verdad&lt;/strong&gt;&lt;br&gt;
Es fácil escribir "aplicamos least privilege" en un documento de arquitectura. Es difícil demostrarlo. Con análisis de permisos efectivos puedes ver exactamente qué permisos tiene cada identidad sobre cada recurso, y limpiar lo que sobra. No lo que crees que sobra — lo que el analizador te muestra que sobra.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Detección de configuraciones erróneas antes de que las encuentre alguien más&lt;/strong&gt;&lt;br&gt;
Un rol con &lt;code&gt;"Resource": "*"&lt;/code&gt; donde debería tener un ARN específico. Una bucket policy que alguien amplió para una prueba y nunca revirtió. Un acceso cross-account que quedó abierto después de una migración. Estos hallazgos no generan alertas operacionales — el sistema funciona, el acceso existe, y nadie lo nota hasta que hay un incidente o una auditoría.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Esta serie da para más&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mientras armaba este post me di cuenta de que IAM Access Analyzer no se puede explicar bien en una sola publicación sin hacerlo pesado - la verdad los conceptos de acceso en cloud son pesados si no se aterrizan correctamente.&lt;/p&gt;

&lt;p&gt;Por eso voy a separar la serie en tres partes mas una cuarta parte opcional como bonus con mcp: External Access, Internal Access y Unused Access. En cada una veremos el concepto, un caso práctico y un pequeño lab con evidencias, para aterrizarlo mejor y no quedarnos solo en la teoría.&lt;/p&gt;

&lt;p&gt;ADVERTENCIA.&lt;br&gt;
Algunos de los labs tendrán costos por lo que les pido precaución, lean antes y tengan controlado sus recursos.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;¿Qué viene en la Parte 2?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;En el siguiente post vamos al laboratorio. Vamos a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Configurar un analizador Internal Access a nivel de organización&lt;/li&gt;
&lt;li&gt;Crear tres roles con distintos niveles de acceso en una cuenta y un bucket en otra&lt;/li&gt;
&lt;li&gt;Agregar una SCP que bloquea una acción aunque IAM y la bucket policy la permitan&lt;/li&gt;
&lt;li&gt;Ver los findings de Access Analyzer y validar con CLI que el permiso efectivo es exactamente lo que el analizador reporta&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;💡 &lt;strong&gt;Reflexión:&lt;/strong&gt; ¿Alguna vez encontraste un rol con más acceso del que debería tener, después de creer que todo estaba bien configurado? Es más común de lo que parece — y casi siempre la diferencia está entre el acceso esperado y el acceso efectivo.&lt;/p&gt;

&lt;p&gt;🔜 &lt;strong&gt;Parte 2:&lt;/strong&gt; Lab completo de IAM Access Analyzer Internal Access con SCPs, cross-account y validación por CLI.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS #CloudSecurity #IAM #AccessAnalyzer #AWSCommunityBuilder #CloudGovernance #AWSOrganizations
&lt;/h1&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Referencias&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html" rel="noopener noreferrer"&gt;Policy evaluation logic&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic_policy-eval-basics.html" rel="noopener noreferrer"&gt;Single account policy evaluation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html" rel="noopener noreferrer"&gt;Cross-account policy evaluation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/what-is-access-analyzer.html" rel="noopener noreferrer"&gt;What is IAM Access Analyzer?&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-findings.html" rel="noopener noreferrer"&gt;IAM Access Analyzer findings&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-resources.html" rel="noopener noreferrer"&gt;IAM Access Analyzer supported resource types&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/IAM/latest/UserGuide/access-analyzer-create-internal.html" rel="noopener noreferrer"&gt;Create an IAM Access Analyzer internal access analyzer&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html" rel="noopener noreferrer"&gt;Service control policies - SCPs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html" rel="noopener noreferrer"&gt;Resource control policies - RCPs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://aws.amazon.com/iam/access-analyzer/pricing/" rel="noopener noreferrer"&gt;IAM Access Analyzer pricing&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>iam</category>
      <category>tutorial</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>🛡️ Entendiendo las Service Control Policies (SCPs) en AWS Organizations</title>
      <dc:creator>Terry Quispe Paniagua</dc:creator>
      <pubDate>Tue, 02 Dec 2025 03:47:50 +0000</pubDate>
      <link>https://dev.to/terry_cloud/-entendiendo-las-service-control-policies-scps-en-aws-organizations-40li</link>
      <guid>https://dev.to/terry_cloud/-entendiendo-las-service-control-policies-scps-en-aws-organizations-40li</guid>
      <description>&lt;h2&gt;
  
  
  1. Introducción
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ¿Qué problema resuelven las SCPs?
&lt;/h3&gt;

&lt;p&gt;Las SCPs, a diferencia de los permisos de IAM, no otorgan permisos, sino que los restringen. Popularmente llamados "guardrails" o "barandillas", son una herramienta clave para la gobernanza de AWS, así como también para fijar los lineamientos de seguridad y cumplimiento de la empresa.&lt;/p&gt;

&lt;p&gt;Antes de proseguir debemos entender unos conceptos previos:&lt;/p&gt;

&lt;h3&gt;
  
  
  IAM Policy
&lt;/h3&gt;

&lt;p&gt;Es un tipo de política de IAM que permite otorgar permisos a los usuarios y roles de AWS.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Organizations
&lt;/h3&gt;

&lt;p&gt;AWS Organizations es un servicio que permite administrar y gestionar de forma centralizada múltiples cuentas de AWS. Con Organizations puedes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crear y gestionar cuentas de AWS (Account Management)&lt;/li&gt;
&lt;li&gt;Centralizar los costos de las cuentas de AWS (Billing)&lt;/li&gt;
&lt;li&gt;Gestionar los permisos de las cuentas de AWS junto a IAM Identity Center (Identity and Access Management)&lt;/li&gt;
&lt;li&gt;Aplicar políticas de seguridad a las cuentas de AWS (SCPs)&lt;/li&gt;
&lt;li&gt;Habilitar servicios multicuentas (Multi-account)&lt;/li&gt;
&lt;li&gt;Agrupar cuentas por Unidades Organizativas (Jerarquía de organización)&lt;/li&gt;
&lt;li&gt;Auditar entorno multicuentas (Audit)&lt;/li&gt;
&lt;li&gt;Compartir recursos en múltiples cuentas (Resource sharing)&lt;/li&gt;
&lt;li&gt;Automatizar aprovisionamiento de múltiples cuentas mediante CloudFormation (Multi-account)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Service Control Policies (SCPs)
&lt;/h2&gt;

&lt;p&gt;Es un tipo de política de AWS Organizations que permite restringir los permisos de las cuentas de AWS que pertenecen a la organización. Esta es una característica de AWS Organizations; existen otras políticas, pero nos centraremos en el tipo de servicio.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estructura de una SCP
&lt;/h3&gt;

&lt;p&gt;La estructura de una SCP es la siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpigyuysqbv3i1o352f0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpigyuysqbv3i1o352f0y.png" alt="SCP Syntax" width="512" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Elementos principales de una SCP:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Elemento&lt;/th&gt;
&lt;th&gt;¿Qué hace?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Statement&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Es el contenedor principal de una política. Puedes tener varios statements en una SCP (cuidado: hay un límite de caracteres).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Effect&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Define si el statement permite (&lt;code&gt;Allow&lt;/code&gt;) o bloquea (&lt;code&gt;Deny&lt;/code&gt;) acciones. &lt;strong&gt;Nota:&lt;/strong&gt; &lt;code&gt;Allow&lt;/code&gt; no permite condicionales.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Action&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Especifica qué acciones de AWS se permiten o bloquean (ej: &lt;code&gt;s3:PutObject&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Indica a qué recursos de AWS aplica la política (ej: un bucket específico).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Condition&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(Opcional) Agrega condiciones para que el statement aplique solo en ciertos casos.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NotAction&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lo opuesto a &lt;code&gt;Action&lt;/code&gt;: especifica acciones que quedan exentas de la SCP.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NotResource&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Lo opuesto a &lt;code&gt;Resource&lt;/code&gt;: especifica recursos que quedan exentos de la SCP.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sid&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;(Opcional) Un nombre amigable para identificar el statement.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Version&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Define la versión del lenguaje de políticas (siempre usa &lt;code&gt;"2012-10-17"&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Comportamiento de una SCP
&lt;/h3&gt;

&lt;p&gt;Para entender mejor cómo funcionan las SCPs, podemos agrupar sus comportamientos en cuatro categorías clave:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Principios Básicos&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Naturaleza:&lt;/strong&gt; No otorgan permisos, solo los restringen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluación:&lt;/strong&gt; Un permiso solo se ejecuta si existe una política IAM que lo permita y una SCP que lo permita o no lo deniegue, en el caso de evaluación IAM y SCP. La evaluación final se encuentra en la &lt;a href="https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/reference_policies_evaluation-logic_policy-eval-basics.html" rel="noopener noreferrer"&gt;documentación oficial de AWS&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Alcance: ¿A quién afecta?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cuentas Miembro:&lt;/strong&gt; Las SCPs restringen los permisos de todos los usuarios y roles, &lt;strong&gt;incluido el usuario root&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Administradores Delegados:&lt;/strong&gt; Sí están afectados, ya que residen en cuentas miembro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excepción Clave:&lt;/strong&gt; La &lt;strong&gt;Cuenta de Administración (Management Account)&lt;/strong&gt; NO se ve afectada por las SCPs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Interacción con otras Políticas&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IAM Deny:&lt;/strong&gt; Siempre tiene prioridad sobre cualquier SCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SCP Deny:&lt;/strong&gt; Bloquea la acción explícitamente, incluso si IAM otorga &lt;code&gt;AdministratorAccess&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission Boundaries:&lt;/strong&gt; La evaluación final requiere: &lt;strong&gt;IAM Allow + SCP Allow + Boundary Allow&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Excepciones Técnicas&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service-Linked Roles:&lt;/strong&gt; No se pueden restringir con SCPs, ya que son necesarios para que los servicios de AWS funcionen correctamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource-Based Policies:&lt;/strong&gt; No se ven afectadas por SCPs; los accesos externos a recursos (como un bucket S3) siguen funcionando si la política del recurso lo permite.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Usuarios Externos:&lt;/strong&gt; No se ven afectados, incluso si acceden a recursos dentro de una cuenta restringida.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ¿Dónde se aplican las SCPs?
&lt;/h3&gt;

&lt;p&gt;En AWS Organizations, las SCPs se aplican a las cuentas de AWS que pertenecen a la organización y también a las unidades organizativas. Una unidad organizativa es como un folder donde puedes agrupar cuentas de AWS.&lt;/p&gt;

&lt;p&gt;A continuación una vista de una jerarquía de organización en AWS Organizations:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbalcy273rg7fuy5l9gsp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbalcy273rg7fuy5l9gsp.png" alt="Image Structure Organizations" width="800" height="831"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Componentes de una jerarquía de organización:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cuenta raíz (Root):&lt;/strong&gt; Es la cuenta principal de la organización, generalmente la cuenta de AWS que se creó al crear la organización. &lt;strong&gt;Importante:&lt;/strong&gt; Aplicar una SCP a la cuenta raíz afecta a todas las cuentas de la organización sin excepción (mucho cuidado con esto).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unidades organizativas (OUs):&lt;/strong&gt; Son como folders donde puedes agrupar cuentas de AWS. Aplicar una SCP a una OU afecta a todas las cuentas que pertenecen a la OU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cuentas:&lt;/strong&gt; Son las cuentas de AWS que pertenecen a la organización. Aplicar una SCP a una cuenta afecta solo a esa cuenta.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Las SCPs pueden aplicarse a múltiples cuentas por su característica de herencia.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  3. Laboratorio: Creación de SCPs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Costo del laboratorio:&lt;/strong&gt; $0&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;⚠️ Advertencia:&lt;/strong&gt; Nunca debes aplicar una SCP a la cuenta productiva ni a un entorno con cuentas productivas. Siempre usa cuentas de prueba para validar el funcionamiento de la SCP antes de aplicarlo en múltiples cuentas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  A. Armando el laboratorio para probar SCPs
&lt;/h3&gt;

&lt;h4&gt;
  
  
  🔐 Requisitos previos
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Tener una cuenta AWS principal (payer) desde la cual crearás la Organización.&lt;/li&gt;
&lt;li&gt;Tener acceso administrativo a esa cuenta.&lt;/li&gt;
&lt;li&gt;No necesitas método de pago adicional para la segunda cuenta.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ✅ Paso 1: Crear una Organización en AWS (si aún no está creada)
&lt;/h4&gt;

&lt;p&gt;1.1. Ingresa a la cuenta administradora (payer/root) de AWS.&lt;/p&gt;

&lt;p&gt;1.2. Ve al servicio &lt;strong&gt;AWS Organizations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;1.3. Si todavía no tienes una organización:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Create Organization&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Confirmar creación de la organización.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎉 Ahora tienes la capacidad de usar SCPs.&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Paso 2: Crear una Unidad Organizativa (OU) para pruebas
&lt;/h4&gt;

&lt;p&gt;Las OU te ayudarán a aislar y probar SCPs sin afectar nada productivo o importante.&lt;/p&gt;

&lt;p&gt;2.1. En AWS Organizations, ve a &lt;strong&gt;AWS accounts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2.2. Selecciona la OU raíz (root) y haz clic en &lt;strong&gt;Actions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2.3. Clic en &lt;strong&gt;Create new organizational unit (OU)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2.4. Pon un nombre claro (ej: &lt;code&gt;lab-scp-test&lt;/code&gt;) y acepta.&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Paso 3: Crear una cuenta miembro dentro de la OU
&lt;/h4&gt;

&lt;p&gt;Crearás una segunda cuenta AWS desde la cuenta administradora. Esta cuenta será tu "cuenta de pruebas" donde validarás las SCPs.&lt;/p&gt;

&lt;p&gt;3.1. Desde AWS Organizations, ve a &lt;strong&gt;AWS Accounts&lt;/strong&gt; → &lt;strong&gt;Add an AWS account&lt;/strong&gt; → &lt;strong&gt;Create an AWS account&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3.2. Rellena:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Account name:&lt;/strong&gt; &lt;code&gt;lab-scp-member&lt;/code&gt; (o el nombre de tu elección, puedes cambiar el nombre a futuro)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Email address:&lt;/strong&gt; Te aconsejo usar tu correo con el que creaste la cuenta administradora, pero con un alias de la siguiente manera:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; &amp;lt;tuemail_sin_@gmail.com&amp;gt;+labscp@gmail.com
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;Ejemplo:&lt;/strong&gt; Si tu correo es &lt;code&gt;pepito@gmail.com&lt;/code&gt;, tu segunda cuenta deberá ser: &lt;code&gt;pepito+labscp@gmail.com&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.3. Clic en &lt;strong&gt;Create an AWS account&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Paso 4: Mover la cuenta a la OU creada
&lt;/h4&gt;

&lt;p&gt;4.1. Selecciona la cuenta, clic en &lt;strong&gt;Actions&lt;/strong&gt; → &lt;strong&gt;Move AWS account&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;4.2. Elige la OU creada.&lt;/p&gt;

&lt;p&gt;4.3. Clic en &lt;strong&gt;Move AWS account&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  🔹 Configuración inicial de la cuenta miembro
&lt;/h4&gt;

&lt;p&gt;AWS enviará un correo para activar la cuenta. Necesitarás entrar a la cuenta para probar las SCPs. Para el primer ingreso lo harás con la cuenta root (podrías generar un ingreso mediante IAM Identity Center, pero se verá en otro artículo) y harás un reset de contraseña. Procura seguir las buenas prácticas de seguridad colocando MFA y una contraseña fuerte.&lt;/p&gt;

&lt;p&gt;Adicionalmente, necesitarás crear un usuario IAM con permisos de administrador, solo con propósitos de prueba, ya que no usaremos la root.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Guía para crear un usuario IAM:&lt;/strong&gt; &lt;a href="https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/id_users_create.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/id_users_create.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego de crear el usuario IAM, procederás a ingresar a la cuenta miembro con el usuario IAM creado para realizar las pruebas de SCPs. Recuerda: es solo para pruebas. Las SCPs solo se adjuntarán y crearán en la cuenta administradora de la organización; no podrás ver la organización desde la cuenta miembro.&lt;/p&gt;

&lt;h3&gt;
  
  
  B. Creación de SCPs
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ✅ Paso 1: Acceder a AWS Organizations
&lt;/h4&gt;

&lt;p&gt;1.1. Desde la consola de AWS, busca y selecciona &lt;strong&gt;Organizations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;1.2. Asegúrate de estar en la cuenta raíz de la organización o en una cuenta con permisos de administración de la organización.&lt;/p&gt;

&lt;h4&gt;
  
  
  ✅ Paso 2: Crear la SCP
&lt;/h4&gt;

&lt;p&gt;2.1. En el menú lateral, selecciona &lt;strong&gt;Policies&lt;/strong&gt; → &lt;strong&gt;Service control policies&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2.2. Haz clic en &lt;strong&gt;Create policy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;2.3. Ingresa un nombre y descripción para tu política.&lt;/p&gt;

&lt;p&gt;2.4. Define el contenido de la política en formato JSON (ver ejemplos más adelante).&lt;/p&gt;

&lt;h3&gt;
  
  
  C. Vincular política SCP a una OU o cuenta
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ✅ Paso 1: Vincular SCP a la OU de pruebas
&lt;/h4&gt;

&lt;p&gt;1.1. En &lt;strong&gt;AWS Organizations&lt;/strong&gt; → &lt;strong&gt;AWS accounts&lt;/strong&gt;, selecciona la OU objetivo, cuenta o folder raíz.&lt;/p&gt;

&lt;p&gt;1.2. Haz clic en &lt;strong&gt;Policies&lt;/strong&gt; → &lt;strong&gt;Service control policies&lt;/strong&gt; → &lt;strong&gt;Attach&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;1.3. Selecciona la SCP creada y haz clic en &lt;strong&gt;Attach policy&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  D. Prueba de SCP
&lt;/h3&gt;

&lt;p&gt;1.1. Ve a la cuenta miembro (cuenta de pruebas).&lt;/p&gt;

&lt;p&gt;1.2. Accede con el usuario IAM creado.&lt;/p&gt;

&lt;p&gt;1.3. Intenta realizar la acción que se definió en la SCP.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Ejemplos de SCP para control de recursos en AWS
&lt;/h2&gt;

&lt;p&gt;Nos basamos en una organización con estructura de OUs y cuentas de prueba, donde puedes aplicar estas SCPs para validar su funcionamiento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo de jerarquía organizativa:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Root
└── OU: &amp;lt;root-ou&amp;gt;
    ├── Development
    │   ├── Sandbox Dev 01 (Cuenta)
    │   └── &amp;lt;deepracer-aft1&amp;gt; (Cuenta)
    ├── Management
    │   └── Administrator (Cuenta de administración)
    ├── Network
    │   └── Networking (Cuenta)
    └── Security
        ├── Audit (Cuenta)
        └── Log Archive (Cuenta)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Nota:&lt;/strong&gt; Estas SCPs se pueden aplicar a la OU raíz, a una OU específica o a cuentas individuales, según el alcance que necesites. Recuerda que las denegaciones prevalecen y no se aplican a la cuenta administradora.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  1️⃣ Denegar creación de buckets S3
&lt;/h3&gt;

&lt;p&gt;Evita que cualquier cuenta cree buckets S3:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DenyS3BucketCreation"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"s3:CreateBucket"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Aplicación:&lt;/strong&gt; Colocar en la OU raíz para afectar a todas las cuentas de prueba, bloqueando la creación de buckets S3.&lt;/p&gt;

&lt;h3&gt;
  
  
  2️⃣ Restringir regiones de despliegue en las cuentas de Development
&lt;/h3&gt;

&lt;p&gt;Evita que se utilicen regiones distintas a la permitida, dejando accesibles solo ciertos servicios esenciales:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"NotAction"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"budgets:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"cloudfront:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"config:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"ec2:DescribeRegions"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"ec2:DescribeTransitGateways"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"ec2:DescribeVpnGateways"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"iam:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"networkmanager:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"organizations:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"route53:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"s3:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"shield:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"sts:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"support:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"trustedadvisor:*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"waf:*"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"StringNotEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                    &lt;/span&gt;&lt;span class="nl"&gt;"aws:RequestedRegion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                        &lt;/span&gt;&lt;span class="s2"&gt;"${REGION_NAME}"&lt;/span&gt;&lt;span class="w"&gt;
                    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Reemplaza&lt;/strong&gt; &lt;code&gt;${REGION_NAME}&lt;/code&gt; por la región autorizada (ejemplo: &lt;code&gt;"us-east-1"&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aplicación:&lt;/strong&gt; Útil para controlar costos y garantizar que recursos solo se desplieguen en regiones aprobadas. Dado que mencionan el alcance hacia las cuentas Development se vinculara a la OU Development que es el folder de esas cuentas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;descripcion:&lt;/strong&gt; En este caso se uso de NotAction para no afectar ciertos servicios de alcanza global, en este caso servicios como budgets, cloudfront, config, iam, networkmanager, organizations, route53, s3, shield, sts, support, trustedadvisor, waf no se veran afectados pero los demas si.&lt;/p&gt;

&lt;h3&gt;
  
  
  3️⃣ Restringir tipos de instancias RDS
&lt;/h3&gt;

&lt;p&gt;Evita que se creen instancias RDS que no correspondan a un tipo aprobado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DenyUnapprovedRDSTypes"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"rds:CreateDBInstance"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"StringNotEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                    &lt;/span&gt;&lt;span class="nl"&gt;"rds:DatabaseClass"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${INSTANCEDBTYPE}"&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Reemplaza&lt;/strong&gt; &lt;code&gt;${INSTANCEDBTYPE}&lt;/code&gt; por el tipo de instancia aprobado (ejemplo: &lt;code&gt;"db.t3.medium"&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aplicación:&lt;/strong&gt; Garantiza estándares de arquitectura y control de costos en RDS.&lt;/p&gt;

&lt;h3&gt;
  
  
  4️⃣ Denegar escritura en buckets S3 fuera de la organización
&lt;/h3&gt;

&lt;p&gt;Evita que cualquier cuenta escriba en buckets S3 que no pertenezcan a la organización:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2012-10-17"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Sid"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"DenyS3WritesToUnauthorizedBuckets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deny"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="s2"&gt;"s3:Put*"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"Condition"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="nl"&gt;"StringNotEquals"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
                    &lt;/span&gt;&lt;span class="nl"&gt;"aws:ResourceOrgID"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"[O-XXXXX]"&lt;/span&gt;&lt;span class="w"&gt;
                &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Reemplaza&lt;/strong&gt; &lt;code&gt;[O-XXXXX]&lt;/code&gt; por el ID de tu organización.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aplicación:&lt;/strong&gt; Útil para prevenir que los datos se escriban fuera de los buckets gestionados por tu organización, reforzando la seguridad y gobernanza de S3.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. SCPs que toda cuenta debería tener
&lt;/h2&gt;

&lt;p&gt;No existen SCPs que toda cuenta debería tener de forma universal, ya que cada organización tiene sus propias necesidades y requisitos. Sin embargo, bajo un modelo de seguridad básico, considero que las cuentas deberían tener al menos las siguientes SCPs:&lt;/p&gt;

&lt;h3&gt;
  
  
  🔐 5.1. Denegar la utilización de cuentas ROOT
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Evita que se realicen acciones críticas usando la cuenta raíz de AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beneficio:&lt;/strong&gt; Protege la cuenta administrativa principal de accesos accidentales o maliciosos.&lt;/p&gt;




&lt;h3&gt;
  
  
  🚪 5.2. Denegar la acción de salir de la organización
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Impide que las cuentas miembros abandonen la organización.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beneficio:&lt;/strong&gt; Mantiene la gobernanza centralizada y evita pérdidas de control sobre cuentas.&lt;/p&gt;




&lt;h3&gt;
  
  
  👤 5.3. Denegar acciones en IAM que no sean usuarios y roles específicos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Restringe la creación o modificación de políticas, roles y permisos que no estén permitidos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beneficio:&lt;/strong&gt; Evita escalación de privilegios no controlada y mantiene la seguridad de la identidad.&lt;/p&gt;




&lt;h3&gt;
  
  
  🌍 5.4. Denegar regiones no utilizadas en la organización
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Bloquea la creación de recursos fuera de las regiones aprobadas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beneficio:&lt;/strong&gt; Controla costos y asegura consistencia operativa en regiones autorizadas.&lt;/p&gt;




&lt;h3&gt;
  
  
  📝 5.5. Denegar borrado y modificación de registros específicos
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Protege logs críticos de CloudTrail, Config u otros registros importantes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beneficio:&lt;/strong&gt; Garantiza trazabilidad y cumplimiento normativo.&lt;/p&gt;




&lt;h3&gt;
  
  
  🗄️ 5.6. Denegar borrado de buckets donde se guardan registros de auditoría
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Impide que se eliminen buckets S3 usados para almacenar logs de auditoría.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beneficio:&lt;/strong&gt; Asegura la integridad de los registros y evidencia de auditoría.&lt;/p&gt;




&lt;h3&gt;
  
  
  💰 5.7. Denegar servicios con alto coste no útiles para la organización
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Descripción:&lt;/strong&gt; Bloquea servicios como Redshift, SageMaker u otros que no estén aprobados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Beneficio:&lt;/strong&gt; Evita gastos innecesarios y recursos no autorizados.&lt;/p&gt;

&lt;p&gt;Aunque muchas de estas SCPs están enfocadas principalmente en gobernanza y control, también actúan como capas adicionales de seguridad, creando barreras que protegen la organización de errores, mal uso o accesos no deseados.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Conclusión
&lt;/h2&gt;

&lt;p&gt;Las Service Control Policies (SCPs) son una herramienta fundamental para establecer guardrails de seguridad, cumplimiento y gobernanza en AWS Organizations. A través de este artículo hemos aprendido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Qué son las SCPs&lt;/strong&gt; y cómo se diferencian de las políticas IAM tradicionales&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cómo funcionan&lt;/strong&gt; y a quién afectan dentro de la organización&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dónde aplicarlas&lt;/strong&gt; en la jerarquía organizativa&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cómo crear un laboratorio&lt;/strong&gt; de pruebas sin costo para validar SCPs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ejemplos prácticos&lt;/strong&gt; de políticas comunes para controlar recursos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recomendaciones básicas&lt;/strong&gt; de SCPs que toda organización debería considerar&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recuerda siempre probar tus SCPs en entornos de prueba antes de aplicarlas en producción, ya que una política mal configurada puede bloquear operaciones críticas. Las SCPs son restrictivas por naturaleza: no otorgan permisos, solo los limitan.&lt;/p&gt;

&lt;p&gt;Con una implementación cuidadosa, las SCPs te permitirán mantener el control centralizado de tu entorno multi-cuenta, reducir riesgos de seguridad y optimizar costos operativos.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Bonus RedTeam
&lt;/h2&gt;

&lt;p&gt;Hemos hablado bastante de SCPs, pero ahora comprendes que tan importante es la management account para controlar todo el entorno. Si alguien tiene acceso no autorizado a la management account es lo mas peligroso que puede pasar, como recordaras estan excentas de las SCPs y puedes tomar acciones en las cuentas miembros desde crearlas, cerrarlas o expulsarlas de la organización. AWS organizations no es solo politicas de organización, es un servicio que integra muchos otro servicio de seguridad que veremos mas adelante.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Pregunta de reflexión final
&lt;/h2&gt;

&lt;p&gt;¿Qué tan seguro crees que es tu entorno multi-cuenta? ¿Qué medidas adicionales consideras importantes para mejorar la seguridad de tu organización?&lt;/p&gt;

&lt;p&gt;🚀 &lt;strong&gt;¡Ahora es tu turno de implementar SCPs en tu organización!&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Documentación y Referencias
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/es_es/IAM/latest/UserGuide/reference_policies_evaluation-logic_policy-eval-basics.html" rel="noopener noreferrer"&gt;AWS IAM - Lógica de evaluación de políticas&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/es_es/organizations/latest/userguide/orgs_tutorials_basic.html" rel="noopener noreferrer"&gt;AWS Organizations - Tutorial básico&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/es_es/organizations/latest/userguide/orgs_manage_policies_scps.html" rel="noopener noreferrer"&gt;AWS Organizations - Gestión de Service Control Policies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws-samples.github.io/threat-technique-catalog-for-aws/Techniques/T1666.A002.html" rel="noopener noreferrer"&gt;AWS Threat Technique Catalog - Técnicas de amenazas en Organizations&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples_general.html" rel="noopener noreferrer"&gt;AWS Organizations - Ejemplos de SCPs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>management</category>
      <category>security</category>
    </item>
    <item>
      <title>AWS Policy Deep Dive</title>
      <dc:creator>Terry Quispe Paniagua</dc:creator>
      <pubDate>Sun, 23 Nov 2025 23:37:11 +0000</pubDate>
      <link>https://dev.to/terry_cloud/aws-policy-deep-dive-5e78</link>
      <guid>https://dev.to/terry_cloud/aws-policy-deep-dive-5e78</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Parte 1: ¿Crees que tus datos están seguros solo con IAM? Hablemos de SCPs y RCPs.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;🛡️ La seguridad en la nube requiere una estrategia de defensa en profundidad. 🛡️&lt;br&gt;
Cuando empecé en AWS, pensaba que con IAM bastaba. Pero al profundizar, me di cuenta de la importancia de capas adicionales como las SCPs y RCPs.&lt;/p&gt;

&lt;p&gt;Entender la diferencia entre&amp;nbsp;&lt;strong&gt;Identidad&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Recurso&lt;/strong&gt;&amp;nbsp;y&amp;nbsp;&lt;strong&gt;Control Organizacional&lt;/strong&gt;&amp;nbsp;es vital para proteger nuestros entornos. No es solo "dar permisos", es saber&amp;nbsp;&lt;em&gt;dónde&lt;/em&gt;&amp;nbsp;aplicarlos para garantizar el menor privilegio y la máxima seguridad.&lt;/p&gt;

&lt;p&gt;Aquí les comparto mi guía mental para no perderse y saber identificar cuando podemos o debemos usar cada una de estas.&lt;/p&gt;

&lt;h3&gt;
  
  
  1️⃣ Identity-based Policies (IAM Policies)
&lt;/h3&gt;

&lt;p&gt;👉&amp;nbsp;&lt;strong&gt;El "Quién puede hacer qué"&lt;/strong&gt;&amp;nbsp;Son las más comunes. Se adjuntan a Usuarios, Grupos o Roles. &lt;br&gt;
📝&amp;nbsp;&lt;strong&gt;Ejemplo:&lt;/strong&gt;&amp;nbsp;Un usuario de operaciones necesita iniciar o detener instancias EC2s, pero no puede crear, terminar ni modificar instancias.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acción:&lt;/strong&gt;&amp;nbsp;Crear una Policy que permita&amp;nbsp;&lt;code&gt;ec2:StartInstances&lt;/code&gt;&amp;nbsp; y &lt;code&gt;ec2:StopInstances&lt;/code&gt; en la tabla de "Productos".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resultado:&lt;/strong&gt;&amp;nbsp;Si intenta modificar o eliminar la instancia, AWS le dice "No".&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2️⃣ Resource-based Policies
&lt;/h3&gt;

&lt;p&gt;👉&amp;nbsp;&lt;strong&gt;El "Quién puede tocar ESTO"&lt;/strong&gt;&amp;nbsp;Aquí la regla vive en el recurso mismo (S3 Bucket, SQS, KMS Key), no en el usuario. Son vitales para accesos&amp;nbsp;&lt;em&gt;Cross-Account&lt;/em&gt; pero no restringidos a ellos. 📝&amp;nbsp;&lt;strong&gt;Ejemplo:&lt;/strong&gt;&amp;nbsp;Tienes un Bucket S3 de logs centralizados.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acción:&lt;/strong&gt;&amp;nbsp;Colocas una Bucket Policy que dice: "Permitir&amp;nbsp;&lt;code&gt;s3:PutObject&lt;/code&gt;&amp;nbsp;a la cuenta de Producción (Account B)".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resultado:&lt;/strong&gt;&amp;nbsp;La cuenta B puede escribir logs ahí sin tener un usuario creado en tu cuenta de logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3️⃣ Service Control Policies (SCPs)
&lt;/h3&gt;

&lt;p&gt;👉&amp;nbsp;&lt;strong&gt;Las "Reglas de la Casa" (Límites de Identidad, popularmente guardrail o barandilla de seguridad)&lt;/strong&gt;&amp;nbsp;Aquí es donde muchos se confunden. Las SCPs&amp;nbsp;&lt;strong&gt;NO&lt;/strong&gt;&amp;nbsp;dan permisos. Solo definen el&amp;nbsp;&lt;em&gt;máximo&lt;/em&gt;&amp;nbsp;permiso posible. Si la SCP dice "No", no importa si tienes AdminAccess, es un "No". 📝&amp;nbsp;&lt;strong&gt;Ejemplo:&lt;/strong&gt;&amp;nbsp;Seguridad Compliance.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acción:&lt;/strong&gt;&amp;nbsp;Aplicas una SCP en la raíz de tu Organización que niega&amp;nbsp;&lt;code&gt;ec2:RunInstances&lt;/code&gt;&amp;nbsp;en cualquier región que no sea&amp;nbsp;&lt;code&gt;us-east-1&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - &lt;strong&gt;Resultado:&lt;/strong&gt;&amp;nbsp;Aunque seas Admin, si intentas levantar un servidor en Tokyo, fallará.
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &amp;nbsp;Resource Control Policies (RCPs)
&lt;/h3&gt;

&lt;p&gt;👉&amp;nbsp;&lt;strong&gt;El "Perímetro de Datos" (Límites de Recurso)&lt;/strong&gt;&amp;nbsp;Funcionan como las SCPs, pero enfocadas en restringir el acceso a tus&amp;nbsp;&lt;strong&gt;recursos&lt;/strong&gt;, sin importar quién sea el que llama (incluso si es externo). 📝&amp;nbsp;&lt;strong&gt;Ejemplo:&lt;/strong&gt;&amp;nbsp;Data Perimeter estricto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acción:&lt;/strong&gt;&amp;nbsp;Creas una RCP que dice: "Nuestros Buckets S3 solo pueden ser accedidos por&amp;nbsp;&lt;em&gt;Principals&lt;/em&gt;&amp;nbsp;que pertenezcan a nuestra Organización (PrincipalOrgID)".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resultado:&lt;/strong&gt;&amp;nbsp;Si alguien configura por error un Bucket como "Público" o intenta darle acceso a una cuenta externa de un proveedor, la RCP lo bloquea automáticamente. Ideal para prevenir ataques de exfiltración de datos&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &amp;nbsp;Resumen
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tipo de Política&lt;/th&gt;
&lt;th&gt;Se aplica a...&lt;/th&gt;
&lt;th&gt;Función Principal&lt;/th&gt;
&lt;th&gt;¿Cuándo usarlo?&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;IAM Policy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Usuario/Rol/Grupo&lt;/td&gt;
&lt;td&gt;Otorgar permisos&lt;/td&gt;
&lt;td&gt;Para otorgar permisos a usuarios, grupos o roles&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource Policy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;S3, SQS, etc.&lt;/td&gt;
&lt;td&gt;Otorgar acceso (incluso externo)&lt;/td&gt;
&lt;td&gt;Para definir quien puede acceder a un recurso&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cuenta AWS (excepto cuenta administradora de la organización), Unidades Org&lt;/td&gt;
&lt;td&gt;Restringir permisos máximos (Identidad)&lt;/td&gt;
&lt;td&gt;Para establecer límites máximos sobre las identidades&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RCP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Recursos de la Org, excepto recursos de la cuenta administradora de la organización&lt;/td&gt;
&lt;td&gt;Restringir acceso máximo (Recurso)&lt;/td&gt;
&lt;td&gt;Para establecer límites máximos sobre sobre quien accede a tus datos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  🔥 Bonus: Perspectiva Red Team
&lt;/h3&gt;

&lt;p&gt;Entender IAM, SCPs y RCPs no solo es vital para proteger tu cuenta y organización, también es un componente clave para reducir la superficie de ataque.&lt;/p&gt;

&lt;p&gt;Por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Escenario de Red Team:&lt;/strong&gt; un atacante intenta asumir roles o crear usuarios para escalar privilegios.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SCPs bloquean el movimiento lateral:&lt;/strong&gt; aunque tenga AdminAccess en una cuenta hija, no podrá ejecutar acciones prohibidas por la SCP a nivel de Organización (ej: &lt;code&gt;organizations:LeaveOrganization&lt;/code&gt;, &lt;code&gt;iam:CreateUser&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;RCPs evitan exfiltración de datos:&lt;/strong&gt; un bucket mal configurado no permite accesos de cuentas externas aunque el atacante tenga privilegios en otra parte.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conclusión:&lt;/strong&gt; conocer y aplicar correctamente estas políticas es &lt;strong&gt;como poner murallas antes de que alguien llegue al nucleo de tu entorno&lt;/strong&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Pregunta de reflexión: ¿por qué es un riesgo crítico desplegar recursos productivos o mantener usuarios activos operando directamente en la cuenta administradora de la organización o también llamado Payer Account?&lt;/p&gt;

&lt;p&gt;🔜&amp;nbsp;&lt;strong&gt;En el próximo post:&lt;/strong&gt;&amp;nbsp;Profundizaremos en las&amp;nbsp;&lt;strong&gt;SCPs&lt;/strong&gt;, cuales son las SCPs mas relevantes que toda cuenta debería tener y cómo configurarlas correctamente para dormir tranquilos.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>security</category>
    </item>
  </channel>
</rss>
