Apariencia
❌ "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

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:

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
OrderPublishEventsen vez deorderflow-order-publisher-role— el contenido de permisos es el mismo (sns:PublishsobreOrderFlowOrderEvents), 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
- Clase 9 — Permisos IAM: el publisher también los necesita
- Clase 8 — IAM: región incorrecta en el ARN (otro error real de IAM, mismo proyecto)