Recursos y condiciones para acciones de Lambda - AWS Lambda

Recursos y condiciones para acciones de Lambda

Puede restringir el ámbito de los permisos de un usuario mediante la especificación de recursos y condiciones en una política de IAM. Todas las acciones de API admiten una combinación de tipos de condición y recursos que varía en función del comportamiento de la acción.

Cada instrucción de una política de IAM concede permiso para realizar una acción en un recurso. Cuando la acción no actúa sobre un recurso designado, o cuando se concede permiso para realizar la acción en todos los recursos, el valor del recurso en la política es un comodín (*). Para muchas acciones de API, puede restringir los recursos que un usuario puede modificar si especifica el nombre de recurso de Amazon (ARN) de un recurso o un patrón de ARN que coincida con varios recursos.

Para restringir los permisos por recurso, especifique el recurso por ARN.

Formato de ARN de recurso de Lambda

  • Función: arn:aws:lambda:us-west-2:123456789012:function:my-function

  • Versión de la función: – arn:aws:lambda:us-west-2:123456789012:function:my-function:1

  • Alias de función: arn:aws:lambda:us-west-2:123456789012:function:my-function:TEST

  • Mapeo de origen de eventos: arn:aws:lambda:us-west-2:123456789012:event-source-mapping:fa123456-14a1-4fd2-9fec-83de64ad683de6d47

  • Capa: arn:aws:lambda:us-west-2:123456789012:layer:my-layer

  • Versión de la capa: arn:aws:lambda:us-west-2:123456789012:layer:my-layer:1

Por ejemplo, la siguiente política permite que un usuario de la cuenta 123456789012 invoque una función denominada my-function en la región EE.UU. Oeste (Oregón).

ejemplo invocar política de función

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Invoke", "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function" } ] }

Se trata de un caso especial donde el identificador de la acción (lambda:InvokeFunction) difiere de la operación de la API (Invoke). Para otras acciones, el identificador de la acción es el nombre de la operación con el prefijo lambda:.

Las condiciones son un elemento opcional de la política que aplica lógica adicional para determinar si se permite o no una acción. Además de las condiciones comunes compatibles con todas las acciones, Lambda define tipos de condición que puede utilizar para restringir los valores de parámetros adicionales en algunas acciones.

Por ejemplo, la condición lambda:Principal le permite restringir el servicio o la cuenta a los que un usuario puede conceder acceso de invocación en la política basada en recursos de una función. La siguiente política permite a un usuario conceder permiso para que los temas de SNS invoquen una función denominada test.

ejemplo administrar permisos de una política de función

{ "Version": "2012-10-17", "Statement": [ { "Sid": "ManageFunctionPolicy", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:RemovePermission" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:test:*", "Condition": { "StringEquals": { "lambda:Principal": "sns.amazonaws.com" } } } ] }

La condición requiere que el principal sea Amazon SNS y no otro servicio o cuenta. El patrón de recursos requiere que el nombre de la función sea test e incluye un número de versión o alias. Por ejemplo, test:v1.

Para obtener más información sobre los recursos y las condiciones para Lambda y otros servicios de AWS, consulte Claves de condición, recursos y acciones en la Guía del usuario de IAM.

Nombres de recursos de función

Puede hacer referencia a una función Lambda en la instrucción de una política utilizando un nombre de recursos de Amazon (ARN). El formato de los ARN de función depende de si se hace referencia a toda la función, a una versión de la función o a un alias.

Cuando los usuarios realizan llamadas a la API de Lambda, pueden especificar una versión o alias pasando el ARN de la versión o el alias en el parámetro FunctionName o estableciendo un valor en el parámetro Qualifier. Lambda toma decisiones sobre la autorización comparando el elemento del recurso de la política de IAM con el FunctionName que se pasa en las llamadas a la API.

Para obtener los resultados esperados, debe utilizar los tipos de ARN de función correctos en las políticas, especialmente en aquellas que deniegan el acceso. Es conveniente que siga las prácticas recomendadas si va a utilizar instrucciones Deny con funciones.

Prácticas recomendadas para usar instrucciones Deny con funciones

En la siguiente tabla, se resumen los recursos que se van a utilizar en los efectos Deny. En la columna Recurso MyFunction es el nombre de la función, :1 hace referencia a la versión 1 de la función y MyAlias es el nombre del alias de una función.

Prácticas recomendadas de recursos
Objetivo de la política Recurso

Denegar el acceso a todas las versiones de una función

MyFunction*

Denegar el acceso a un alias específico

MyFunction:MyAlias y MyFunction

Denegar el acceso a una versión específica de una función

MyFunction:1 y MyFunction

En las secciones siguientes, se incluyen ejemplos de instrucciones de las políticas para cada uno de los objetivos.

nota

Las políticas basadas en identidades solo pueden utilizarse para denegar recursos de funciones específicos. Actualmente, Lambda no admite el efecto Deny en las políticas basadas en recursos.

Para ver la lista de acciones de una instrucción de política, puede agregar cualquiera de las acciones definidas por Lambda que actúan en un recurso de una función.

Denegar el acceso a todas las versiones de funciones

La siguiente instrucción de política basada en identidades deniega el acceso a la acción lambda:GetFunctionConfiguration en todas las versiones de la función my-function. El carácter comodín que se encuentra al final del ARN de la función garantiza que esta política se aplique a todos los ARN de versión y alias.

ejemplo Ejemplos de política basada en identidades

{ "Version": "2020-07-20", "Statement": [ { "Effect": "Deny", "Action": [ "lambda:GetFunctionConfiguration" ], "Resource": "arn:aws:lambda:us-west-2:123456789012:function:my-function*" } ] }

Denegar el acceso a un alias de función específico

Para denegar el acceso a un alias específico, debe especificar en la política tanto el ARN del alias como el ARN completo de la función. De este modo, se impide que los usuarios puedan acceder al alias especificado pasando el ARN incompleto como FunctionName y el alias como Qualifier.

nota

Si crea este tipo de política, las llamadas a la API deben hacer referencia a la versión no publicada de la función especificando un ARN completo con el sufijo $LAST en el parámetro FunctionName.

La siguiente instrucción de política basada en identidades deniega el acceso a la acción lambda:InvokeFunction del alias my-alias de la función my-function.

ejemplo Ejemplos de política basada en identidades

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenySpecificAlias", "Effect": "Deny", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:my-function:my-alias", "arn:aws:lambda:us-west-2:123456789012:function:my-function" ] } ] }

Denegar el acceso a una versión de función específica

Para denegar el acceso a una versión específica, debe especificar en la política tanto el ARN completo como el ARN incompleto. De este modo, impedirá que los usuarios puedan acceder a la versión especificada pasando el ARN incompleto como FunctionName y la versión como Qualifier.

nota

Si crea este tipo de política, las llamadas a la API deben hacer referencia a la versión no publicada de la función especificando un ARN completo con el sufijo $LAST en el parámetro FunctionName.

La siguiente instrucción de política basada en identidades deniega el acceso a la acción de invocación de la versión 1 de la función my-function.

ejemplo Ejemplos de política basada en identidades

{ "Version": "2012-10-17", "Statement": [ { "Sid": "DenySpecificFunctionVersion", "Effect": "Deny", "Action": [ "lambda:InvokeFunction" ], "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:my-function:1", "arn:aws:lambda:us-west-2:123456789012:function:my-function" ] } ] }

Acciones de función

Las acciones que operan sobre una función se pueden restringir a una función específica por ARN de función, versión o alias, tal y como se describe en la siguiente tabla. Las acciones que no admiten restricciones de recursos solo pueden concederse para todos los recursos (*).

Funciones
Acción Recurso Condición

AddPermission

RemovePermission

Función

Versión de función

Alias de función

lambda:Principal

Invoke

Permiso: lambda:InvokeFunction

Función

Versión de función

Alias de función

Ninguno

CreateFunction

UpdateFunctionConfiguration

Función

lambda:CodeSigningConfigArn

lambda:Layer

lambda:VpcIds

lambda:SubnetIds

lambda:SecurityGroupIds

CreateAlias

DeleteAlias

DeleteFunction

DeleteFunctionConcurrency

GetAlias

GetFunction

GetFunctionConfiguration

GetPolicy

ListAliases

ListVersionsByFunction

PublishVersion

PutFunctionConcurrency

UpdateAlias

UpdateFunctionCode

Función

Ninguno

GetAccountSettings

ListFunctions

ListTags

TagResource

UntagResource

*

Ninguno

Acciones de asignación de origen de eventos

Para los mapeos de origen de eventos, los permisos de eliminación y actualización se pueden restringir a un origen de eventos específico. La condición lambda:FunctionArn le permite restringir las funciones que un usuario puede configurar para invocar un origen de eventos.

Para estas acciones, el recurso es el mapeo de origen de eventos, por lo que Lambda proporciona una condición que permite restringir el permiso según la función que invoca el mapeo de origen de eventos.

Mapeos de origen de eventos
Acción Recurso Condición

DeleteEventSourceMapping

UpdateEventSourceMapping

Mapeo de origen de eventos

lambda:FunctionArn

CreateEventSourceMapping

*

lambda:FunctionArn

GetEventSourceMapping

ListEventSourceMappings

*

Ninguno

Acciones de capa

Las acciones de capa permiten restringir las capas que un usuario puede administrar o utilizar con una función. Las acciones relacionadas con el uso y los permisos de capa actúan sobre una versión de una capa, mientras que PublishLayerVersion actúa sobre un nombre de capa. Pueden utilizar cualquiera de ellas con comodines para restringir las capas que un usuario puede utilizar por nombre.

nota

Nota: la acción GetLayerVersion también cubre GetLayerVersionByArn. Lambda no admite GetLayerVersionByArn como una acción de IAM.