Afinar las secciones de recursos y condiciones de las políticas - AWS Lambda

Afinar las secciones de recursos y condiciones de las políticas

Puede restringir el ámbito de los permisos de un usuario mediante la especificación de recursos y condiciones en una política de AWS Identity and Access Management (IAM). Todas las acciones en una política admiten una combinación de tipos de recursos y condiciones 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, 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 la función: arn:aws:lambda:us-west-2:123456789012:function:my-function:TEST

  • Asignación 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 en una Cuenta de AWS 123456789012 invoque una función denominada my-function en la región de AWS Oeste de EE. UU. (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:.

Comprensión de la sección de condiciones de las políticas

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 que admiten todas las acciones, Lambda define tipos de condiciones que puede utilizar para restringir los valores de parámetros adicionales en algunas acciones.

Por ejemplo, la condición lambda:Principal 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 a los temas de Amazon Simple Notification Service (Amazon SNS) para invocar 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 Acciones, recursos y claves de condición de los servicios de AWS en la Referencia de autorización de servicios.

Hacer referencia a las funciones en la sección de recursos de las políticas

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

Cuando realizan llamadas a la API de Lambda, los usuarios pueden especificar una versión o un alias al pasar el ARN de la versión o el alias en el parámetro GetFunction de FunctionName, o al establecer un valor en el parámetro GetFunction de Qualifier. Lambda toma decisiones de autorización comparando el elemento de recurso de la política de IAM con el FunctionName y el Qualifier pasado en las llamadas a la API. Si hay un error de coincidencia, Lambda deniega la solicitud.

Tanto si permite o deniega una acción en la función, debe utilizar los tipos de ARN de función correctos en la instrucción de la política para obtener los resultados esperados. Por ejemplo, si su política hace referencia al ARN incompleto, Lambda acepta las solicitudes que hacen referencia al ARN incompleto, pero deniega las solicitudes que hacen referencia a un ARN completo.

nota

No se puede utilizar un carácter comodín (*) para que coincida con el ID de cuenta. Para obtener más información sobre la sintaxis aceptada, consulte la referencia de la política JSON de IAM en la Guía del usuario de IAM.

ejemplo permitir la invocación de un ARN incompleto
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction" } ] }

Si su política hace referencia a un ARN completo específico, Lambda acepta las solicitudes que hacen referencia al ARN, pero deniega las solicitudes que hagan referencia a un ARN incompleto o a otro ARN completo, como myFunction:2.

ejemplo permitir la invocación de un ARN completo específico
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:1" } ] }

Si su política hace referencia a cualquier ARN completo mediante :*, Lambda acepta cualquier ARN completo, pero deniega las solicitudes que hagan referencia a un ARN incompleto.

ejemplo permitir la invocación de cualquier ARN completo
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction:*" } ] }

Si su política hace referencia a cualquier ARN mediante *, Lambda acepta cualquier ARN completo o incompleto.

ejemplo permitir la invocación de cualquier ARN completo o incompleto
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-west-2:123456789012:function:myFunction*" } ] }

Acciones de función admitidas

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 se conceden para todos los recursos (*).

Acciones de función
Acción Recurso Condición

AddPermission

RemovePermission

Función

Versión de función

Alias de función

lambda:Principal

aws:ResourceTag/${TagKey}

lambda:FunctionUrlAuthType

Invoke

Permiso: lambda:InvokeFunction

Función

Versión de función

Alias de función

aws:ResourceTag/${TagKey}

lambda:EventSourceToken

CreateFunction

Función

lambda:CodeSigningConfigArn

lambda:Layer

lambda:VpcIds

lambda:SubnetIds

lambda:SecurityGroupIds

aws:ResourceTag/${TagKey}

aws:RequestTag/${TagKey}

aws:TagKeys

UpdateFunctionConfiguration

Función

lambda:CodeSigningConfigArn

lambda:Layer

lambda:VpcIds

lambda:SubnetIds

lambda:SecurityGroupIds

aws:ResourceTag/${TagKey}

CreateAlias

DeleteAlias

DeleteFunction

DeleteFunctionCodeSigningConfig

DeleteFunctionConcurrency

GetAlias

GetFunction

GetFunctionCodeSigningConfig

GetFunctionConcurrency

GetFunctionConfiguration

GetPolicy

ListProvisionedConcurrencyConfigs

ListAliases

ListTags

ListVersionsByFunction

PublishVersion

PutFunctionCodeSigningConfig

PutFunctionConcurrency

UpdateAlias

UpdateFunctionCode

Función

aws:ResourceTag/${TagKey}

CreateFunctionUrlConfig

DeleteFunctionUrlConfig

GetFunctionUrlConfig

UpdateFunctionUrlConfig

Función

Alias de función

lambda:FunctionUrlAuthType

lambda:FunctionArn

aws:ResourceTag/${TagKey}

ListFunctionUrlConfigs

Función

lambda:FunctionUrlAuthType

DeleteFunctionEventInvokeConfig

GetFunctionEventInvokeConfig

ListFunctionEventInvokeConfigs

PutFunctionEventInvokeConfig

UpdateFunctionEventInvokeConfig

Función

aws:ResourceTag/${TagKey}

DeleteProvisionedConcurrencyConfig

GetProvisionedConcurrencyConfig

PutProvisionedConcurrencyConfig

Alias de función

Versión de función

aws:ResourceTag/${TagKey}

GetAccountSettings

ListFunctions

*

Ninguna

TagResource

Función

aws:ResourceTag/${TagKey}

aws:RequestTag/${TagKey}

aws:TagKeys

UntagResource

Función

aws:ResourceTag/${TagKey}

aws:TagKeys

Acciones de asignación de orígenes de eventos admitidos

Para las asignaciones de orígenes de eventos, puede restringir los permisos de eliminación y actualización 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 fuente de eventos.

Acciones de asignación de origen de eventos
Acción Recurso Condición

DeleteEventSourceMapping

UpdateEventSourceMapping

Asignación de orígenes de eventos

lambda:FunctionArn

CreateEventSourceMapping

GetEventSourceMapping

*

lambda:FunctionArn

ListEventSourceMappings

*

Ninguna

Acciones de capas admitidas

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

La acción GetLayerVersion también explica lo siguiente: GetLayerVersionByArn. Lambda no es compatible con GetLayerVersionByArn como una acción de IAM.

Acciones de capa
Acción Recurso Condición

AddLayerVersionPermission

RemoveLayerVersionPermission

GetLayerVersion

GetLayerVersionPolicy

DeleteLayerVersion

Versión de la capa

Ninguna

ListLayerVersions

PublishLayerVersion

Capa

Ninguna

ListLayers

*

Ninguna