Skip to content

❌ "Failed to create policy" — el nombre de la policy tenía caracteres no permitidos ​

Clase 9 · Creación de la policy IAM del rol de orderflow-order-publisher — sección 9 · caso real, con capturas propias

🩻 Contexto ​

Al crear (IAM → Roles → orderflow-order-publisher-role-i2i0t6c9 → Add permissions → Create policy) la policy de mínimo privilegio para que la Lambda orderflow-order-publisher pueda publicar en el Topic OrderFlowOrderEvents, con el JSON ya correcto:

json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["sns:Publish"],
      "Resource": "arn:aws:sns:us-east-2:540659180627:OrderFlowOrderEvents"
    }
  ]
}

el paso Review and create rechazó la policy con un error — el JSON de permisos estaba bien, el problema era el nombre que se le puso a la policy.

🔍 Causa — el Policy name solo acepta un set limitado de caracteres ​

Página "Review and create" de IAM con el banner rojo "Failed to create policy. The specified value for policyName is invalid. It must contain only alphanumeric characters and/or the following: +=,.@_-", y el campo Policy name corregido a "orderflow-order-publisher-role"

Failed to create policy .
The specified value for policyName is invalid. It must contain only
alphanumeric characters and/or the following: +=,.@_-

A diferencia del nombre de un recurso como un Topic SNS o una función Lambda (que en esta clase ya vienen usando guiones sin problema, p. ej. orderflow-order-publisher), el campo Policy name de IAM tiene su propio set permitido de caracteres — alfanuméricos más + = , . @ _ - únicamente. Cualquier otro carácter (espacios, /, :, etc.) hace fallar la creación con este mismo mensaje, sin importar que el JSON de permisos esté perfecto.

💡 Es un tipo de error distinto a los de sintaxis JSON o de Resource/ARN (ver este otro error de Clase 8) — acá el contenido de la policy nunca llegó a evaluarse, el rechazo pasa antes, en la validación del nombre.

✅ Solución ​

Renombrar la policy usando solo caracteres permitidos — se resolvió con orderflow-order-publisher-role (mismo patrón de guiones que el resto de recursos orderflow-* de la clase) y confirmar de nuevo:

Banner verde "Policy orderflow-order-publisher-role created.", con el resumen del rol orderflow-order-publisher-role-i2i0t6c9 mostrando sus 2 Permissions policies: AWSLambdaBasicExecutionRole-... (Customer managed) y orderflow-order-publisher-role (Customer inline)

Policy orderflow-order-publisher-role created. — con eso, el rol de la Lambda queda con dos policies: la managed AWSLambdaBasicExecutionRole-... (logs a CloudWatch, la que Lambda agrega sola) y la inline orderflow-order-publisher-role recién creada (sns:Publish sobre el Topic puntual) — mismo patrón de "dos policies, cada una con su propósito" ya visto en el error de IAM de Clase 8.

📝 Actualización: en una captura posterior de la misma clase, el rol muestra su policy inline con el nombre OrderPublishEvents en vez de orderflow-order-publisher-role — el contenido de permisos es el mismo (sns:Publish sobre OrderFlowOrderEvents), probablemente se recreó con un nombre más descriptivo en algún punto no capturado. Ver la nota correspondiente en Clase 9, sección 9.

📎 Apuntes relacionados ​