View a markdown version of this page

Concesión de acceso a la función de Lambda a Servicios de AWS - AWS Lambda

Concesión de acceso a la función de Lambda a Servicios de AWS

Cuando se utiliza un servicio de AWS para invocar una función, se debe conceder permiso en una instrucción de una política basada en recursos. Puede aplicar la instrucción a toda la función, o bien, puede limitar la instrucción a una sola versión o alias.

nota

Cuando se añade un desencadenador a la función con la consola de Lambda, esta actualiza la política basada en recursos de la función para permitir al servicio que la invoque. Para conceder permisos a otras cuentas o servicios que no están disponibles en la consola de Lambda, puede utilizar la AWS CLI.

Recomendamos usar put-resource-policy para definir una política JSON completa. Con put-resource-policy, puede agregar instrucciones de denegación, utilizar toda la gama de claves de condición de IAM y administrar todos los permisos en un único documento. Para casos de uso sencillos, puede utilizar add-permission para agregar instrucciones individuales.

importante

El uso de put-resource-policy reemplaza cualquier política basada en recursos existente en el recurso. Si el recurso ya tiene los permisos definidos con add-permission, put-resource-policy los sobrescribe. Use get-resource-policy para recuperar la política existente antes de realizar cambios.

Uso de una política JSON completa (recomendado)

La siguiente política de ejemplo concede a Amazon Simple Notification Service permiso para invocar una función denominada my-function, pero solo para un tema específico. También deniega las invocaciones de un tema en particular.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-sns-my-topic", "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:my-topic" } } }, { "Sid": "deny-sns-other-topic", "Effect": "Deny", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-east-2:123456789012:function:my-function", "arn:aws:lambda:us-east-2:123456789012:function:my-function:*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:us-east-2:123456789012:restricted-topic" } } } ] }

Guarde la política en un archivo denominado policy.json y aplíquela con put-resource-policy:

aws lambda put-resource-policy \ --resource-arn arn:aws:lambda:us-east-2:123456789012:function:my-function \ --policy file://policy.json

Para Amazon S3, el origen es un bucket cuyo ARN no incluye el ID de la cuenta. Es posible que usted elimine un bucket y que otra cuenta cree un bucket con el mismo nombre. Utilice la clave de condición aws:SourceAccount para garantizar que solo los recursos de su cuenta pueden invocar la función:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allow-s3", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:s3:::my-bucket" } } } ] }

Uso de add-permission

Para casos de uso sencillos, puede utilizar add-permission para agregar instrucciones individuales. El siguiente comando concede a Amazon Simple Notification Service permiso para invocar una función denominada my-function:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns \ --principal sns.amazonaws.com \ --output text

Debería ver los siguientes datos de salida:

{"Sid":"sns","Effect":"Allow","Principal":{"Service":"sns.amazonaws.com"},"Action":"lambda:InvokeFunction","Resource":"arn:aws:lambda:us-east-2:123456789012:function:my-function"}
nota

Si llama a add-permission después de put-resource-policy, la nueva instrucción se anexa a la política JSON existente.

Para restringir las invocaciones a un recurso específico, use la opción source-arn:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id sns-my-topic \ --principal sns.amazonaws.com \ --source-arn arn:aws:sns:us-east-2:123456789012:my-topic

Para Amazon S3, utilice la opción source-account con su ID de cuenta:

aws lambda add-permission \ --function-name my-function \ --action lambda:InvokeFunction \ --statement-id s3-account \ --principal s3.amazonaws.com \ --source-arn arn:aws:s3:::amzn-s3-demo-bucket \ --source-account 123456789012