Hoy me he encontrado con un mensaje de error al aplicar terraform para crear un ASG y su Launch Template en AWS que no me ha parecido intuitivo.
Error: Error creating AutoScaling Group:
AccessDenied: You are not authorized to use launch template: name-of-the-template
status code: 403, request id: 12425678-7890-4567-1234-14ef2ea89123
Bueno, en realidad era un «Access Denied». ¿Fácil, no? Pues no, o por lo menos no para mí. El usuario que aplicaba terraform ya tenía los permisos que a priori parecía que necesitaba para poder crear ese recurso y sus asociados.
Entonces… ¿cómo saber de qué permisos se me está quejando? Aquí es donde entra CloudTrail. Lo que he hecho es básicamente buscar los eventos para el usuario con el que estaba ejecutando el comando, pues no he encontrado la forma de usar la request-id que nos devuelve el error. Recuerda que pueden tardar varios minutos hasta que aparezcan los eventos en CloudTrail, así que paciencia.
Una vez obtenida la lista de eventos, he encontrado uno que me ha llamado la atención. Se trata del evento «RunInstances» que al ver los detalles nos muestra algo parecido a lo siguiente (copio -y modifico- la parte interesante):
...
"eventName": "RunInstances",
"awsRegion": "us-east-1",
"sourceIPAddress": "autoscaling.amazonaws.com",
"userAgent": "autoscaling.amazonaws.com",
"errorCode": "Client.UnauthorizedOperation",
"errorMessage": "You are not authorized to perform this operation. Encoded authorization failure message: CHURRO_ENORME",
...
En la parte del errorMessage encontraremos el mensaje de error específico codificado (sustituido en el ejemplo por CHURRO_ENORME para facilitar la lectura y evitar compartir información de más), que podremos decodificar desde línea de comandos con aws cli ejecutado con un usuario con permisos para sts:DecodeAuthorizationMessage, tal que así.
aws sts decode-authorization-message --encoded-message CHURRO_ENORME
El comando anterior nos devolverá un json que nos dará más información sobre el error concreto. En mi caso me he fijado sobre todo en el «Action» del json, para ver por dónde iban los tiros del problema de permisos.
Ah, por si te interesa, me faltaba no uno si no 3 permisos, que pego en orden de aparición en CloudTrail (tras cada ejecución añadiendo un permiso me encontraba con un nuevo error que he identificado siguiendo es mismo método):
– ec2:RunInstance
– iam:PassRole
– ec2:CreateTags
Creation complete after 42s