Tengo una función AWS Lambda muy simple: solo enumero todos mis eventos de CloudWatch:
import boto3 def lambda_handler(event, context): client = boto3.client("events") return client.list_rules() Sin embargo, cuando intento ejecutarlo (con un evento de prueba vacío: {} ), obtengo la siguiente excepción de permisos:
An error occurred (AccessDeniedException) when calling the ListRules operation: User: arn:aws:sts::123321123321:assumed-role/lambda+basicEvents/lambdaName is not authorized to perform: events:ListRules on resource: arn:aws:events:eu-west-1:123321123321:rule/*Tengo esta política adjunta al rol de ejecución de lambda (y puedo ver las acciones enumeradas en la pestaña de permisos en la lambda):
{ "document": { "Version": "2012-10-17", "Statement": [ { "Sid": "BasicCloudWatchEventsManager", "Effect": "Allow", "Action": [ "events:DescribeRule", "events:EnableRule", "events:PutRule", "events:ListRules", "events:DisableRule" ], "Resource": "arn:aws:events:*:*:rule/[*/]*" } ] }, "name": "BasicCloudWatchEventsManager", "id": "SOME7LONG7ID", "type": "managed", "arn": "arn:aws:iam::123321123321:policy/BasicCloudWatchEventsManager" } Creé la política usando el editor visual que proporcionan, solo cambié el sid manualmente.
¿Alguna pista de lo que podría estar faltando?
Después de mucha frustración, lo descubrí. En el editor de políticas visuales, al seleccionar el recurso como cualquier rule , agregar un ARN y seleccionar "cualquiera" para todas las opciones, se agregará esta línea en la política:
"Resource": "arn:aws:events:*:*:rule/[*/]*"Lo que esto significa que significa es:
* ) región[*/] )Sin embargo, parece que la lógica de Amazon está un poco rota y la parte opcional no funciona y probablemente se tome literalmente. Entonces, lo que tuve que hacer para solucionarlo es cambiar esto a:
"Resource": "arn:aws:events:*:*:rule/*"Con esto funciona sin problemas.