Modelo de seguridad y autenticación para las URL de funciones de Lambda - AWS Lambda

Modelo de seguridad y autenticación para las URL de funciones de Lambda

Puede controlar el acceso a las URL de funciones de Lambda mediante el parámetro AuthType combinado con políticas basadas en recursos adjuntas a la función específica. La configuración de estos dos componentes determina quién puede invocar o realizar otras acciones administrativas en la URL de función.

El parámetro AuthType determina cómo Lambda autentica o autoriza las solicitudes a la URL de función. Al configurar la URL de función, debe especificar una de las siguientes opciones de AuthType:

  • AWS_IAM: Lambda utiliza AWS Identity and Access Management (IAM) para autenticar y autorizar solicitudes basadas en la política de identidad de la entidad principal de IAM y la política basada en recursos de la función. Elija esta opción si desea que solo los usuarios y roles de IAM autenticados invoquen su función a través de la URL de función.

  • NONE: Lambda no realiza ninguna autenticación antes de invocar la función. Sin embargo, la política basada en recursos de la función siempre está vigente y debe conceder acceso público para que la URL de función pueda recibir solicitudes. Elija esta opción para permitir el acceso público y no autenticado a la URL de función.

Además de AuthType, puede utilizar políticas basadas en recursos para conceder permisos a otras Cuentas de AWS para invocar su función. Para obtener más información, consulte Uso de políticas basadas en recursos para Lambda .

Para obtener más información sobre la seguridad, puede utilizar AWS Identity and Access Management Access Analyzer para obtener un análisis exhaustivo del acceso externo a la URL de función. IAM Access Analyzer también supervisa los permisos nuevos o actualizados en las funciones de Lambda para ayudarle a identificar los permisos que otorgan acceso público y entre cuentas. IAM Access Analyzer es de uso gratuito para cualquier cliente de AWS. Para comenzar a utilizar IAM Access Analyzer, consulte Uso de AWS IAM Access Analyzer.

Esta página contiene ejemplos de políticas basadas en recursos para ambos tipos de autenticación y también cómo crear estas políticas mediante la operación de la API AddPermission o la consola de Lambda. Para obtener información sobre cómo invocar la URL de función después de configurar los permisos, consulte Invocación de URL de funciones de Lambda.

Uso del tipo de autenticación AWS_IAM

Si elige el tipo de autenticación AWS_IAM, los usuarios que necesiten invocar la URL de función de Lambda deben tener el permiso lambda:InvokeFunctionUrl. Según quién realice la solicitud de invocación, es posible que deba conceder este permiso mediante una política basada en recursos.

Si la entidad principal que realiza la solicitud está en la misma Cuenta de AWS que la URL de función, entonces la entidad principal debe tener o bien permisos lambda:InvokeFunctionUrl en su política basada en identidad, o bien permisos concedidos en la política basada en recursos de la función. En otras palabras, una política basada en recursos es opcional si el usuario ya tiene permisos lambda:InvokeFunctionUrl en su política basada en identidad. La evaluación de políticas sigue las reglas descritas en Cómo determinar si una solicitud se permite o se deniega dentro de una cuenta.

Si la entidad principal que realiza la solicitud se encuentra en una cuenta diferente, la entidad principal debe tener tanto una política basada en identidad que le otorgue permisos lambda:InvokeFunctionUrl como permisos concedidos en una política basada en recursos sobre la función que intenta invocar. En estos casos entre cuentas, la evaluación de políticas sigue las reglas descritas en Determinación de si se permite una solicitud entre cuentas.

Para ver un ejemplo de interacción entre cuentas, la siguiente política basada en recursos permite al rol example en la Cuenta de AWS 444455556666 invocar la URL de función asociada a la función my-function:

ejemplo política de invocación entre cuentas de la URL de función

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }

Puede crear esta instrucción de política a través de la consola siguiendo estos pasos:

Para conceder permisos de invocación de URL a otra cuenta (consola)

  1. Abra la página de Functions (Funciones) en la consola de Lambda.

  2. Elija el nombre de la función para la que desea conceder permisos de invocación de la URL.

  3. Elija la pestaña Configuration (Configuración) y, a continuación, elija Permissions (Permisos).

  4. En Resource-based policy (Política basada en recursos), elija Add permissions (Agregar permisos).

  5. Elija Function URL (URL de función).

  6. En Auth type (Tipo de autenticación), elija AWS_IAM.

  7. (Opcional) En Statement ID (ID de instrucción), ingrese un ID de instrucción para su instrucción de política.

  8. En Principal (Entidad principal), ingrese el nombre de recurso de Amazon (ARN) del usuario o rol de IAM al que desea conceder permisos. Por ejemplo: arn:aws:iam::444455556666:role/example.

  9. Seleccione Save.

Como alternativa, puede crear esta instrucción de política mediante el comando add-permission de AWS Command Line Interface (AWS CLI) siguiente:

aws lambda add-permission --function-name my-function \ --statement-id example0-cross-account-statement \ --action lambda:InvokeFunctionUrl \ --principal arn:aws:iam::444455556666:role/example \ --function-url-auth-type AWS_IAM

En el ejemplo anterior, el valor de clave de la condición lambda:FunctionUrlAuthType es AWS_IAM. Esta política solo permite el acceso cuando el tipo de autenticación de la URL de función también es AWS_IAM.

Uso del tipo de autenticación NONE

importante

Cuando el tipo de autenticación de la URL de función es NONE y tiene una política basada en recursos que concede acceso público, cualquier usuario no autenticado con la URL de función puede invocar la función.

En algunos casos, es posible que desee que la URL de función sea pública. Por ejemplo, es posible que desee atender solicitudes realizadas directamente desde un navegador web. Para permitir el acceso público a la URL de función, elija el tipo de autenticación NONE.

Si elige el tipo de autenticación NONE, Lambda no utilizará IAM para autenticar las solicitudes a la URL de función. Sin embargo, los usuarios deben tener permisos lambda:InvokeFunctionUrl para invocar correctamente la URL de función. Puede conceder permisos lambda:InvokeFunctionUrl utilizando la siguiente política basada en recursos:

ejemplo política de invocación de URL de función para todas las entidades principales no autenticadas

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }
nota

Al crear una URL de función con tipo de autenticación NONE a través de la consola o AWS Serverless Application Model (AWS SAM), Lambda crea automáticamente la instrucción de política basada en recursos anterior por usted. Si la política ya existe o el usuario o el rol que crea la aplicación no tiene los permisos adecuados, Lambda no creará la política por usted. Si utiliza la AWS CLI, AWS CloudFormation o la API de Lambda directamente, debe agregar los permisos lambda:InvokeFunctionUrl usted. Esto hace que su función sea pública.

Además, si elimina la URL de función con el tipo de autenticación NONE, Lambda no elimina de forma automática la política basada en recursos asociada. Si desea eliminar esta política, debe hacerlo de forma manual.

En esta instrucción, el valor de clave de la condición lambda:FunctionUrlAuthType es NONE. Esta instrucción de política solo permite el acceso cuando el tipo de autenticación de la URL de función también es NONE.

Si la política basada en recursos de una función no concede permisos lambda:invokeFunctionUrl, los usuarios obtendrán un código de error 403 Forbidden (Prohibido) cuando intenten invocar la URL de función, incluso si la URL de función utiliza el tipo de autenticación NONE.

Gobierno y control de acceso

Además de los permisos de invocación de la URL de función, también puede controlar el acceso a las acciones utilizadas para configurar las URL de funciones. Lambda es compatible con las siguientes acciones de política de IAM para las URL de funciones:

  • lambda:InvokeFunctionUrl: invocar una función de Lambda mediante la URL de función.

  • lambda:CreateFunctionUrlConfig: crear una URL de función y configurar su AuthType.

  • lambda:UpdateFunctionUrlConfig: actualizar una configuración de URL de función y su AuthType.

  • lambda:GetFunctionUrlConfig: ver los detalles de una URL de función.

  • lambda:ListFunctionUrlConfigs: enumerar las configuraciones de la URL de función.

  • lambda:DeleteFunctionUrlConfig: eliminar una URL de función.

nota

La consola de Lambda admite agregar permisos solo para lambda:InvokeFunctionUrl. Para todas las demás acciones, debe agregar permisos mediante la API de Lambda o AWS CLI.

Para permitir o denegar el acceso de otras entidades de AWS a la URL de función, incluya estas acciones en las políticas de IAM. Por ejemplo, la siguiente política concede permisos al rol example en la Cuenta de AWS 444455556666 para actualizar la URL de función para la función my-function en la cuenta 123456789012.

ejemplo política de URL de función entre cuentas

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:UpdateFunctionUrlConfig", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function" } ] }

Claves de condición

Para obtener un control de acceso detallado sobre las URL de funciones, utilice una clave de condición. Lambda admite una clave de condición adicional para las URL de funciones: FunctionUrlAuthType. La clave FunctionUrlAuthType define un valor de enumeración que describe el tipo de autenticación que utiliza la URL de función. El valor puede ser AWS_IAM o NONE.

Puede utilizar esta clave de condición en las políticas asociadas a la función. Por ejemplo, es posible que desee restringir quién puede realizar cambios de configuración en las URL de funciones. Para denegar todas las solicitudes UpdateFunctionUrlConfig a cualquier función con tipo de autenticación de URL NONE, puede definir la siguiente política:

ejemplo política de URL de función con denegación explícita

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action":[ "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } } ] }

Para conceder permisos al rol example en la Cuenta de AWS 444455556666 para hacer solicitudes CreateFunctionUrlConfig y UpdateFunctionUrlConfig en funciones con tipo de autenticación de URL AWS_IAM, puede definir la siguiente política:

ejemplo política de URL de función con permiso explícito

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:us-east-1:123456789012:function:*", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }

También puede utilizar esta clave de condición en una política de control de servicios (SCP). Utilice las SCP para administrar los permisos en toda una organización en AWS Organizations. Por ejemplo, para denegar a los usuarios la creación o actualización de URL de funciones que utilicen un tipo de autenticación distinto a AWS_IAM, utilice la siguiente política de control de servicios:

ejemplo SCP de URL de función con denegación explícita

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:*:123456789012:function:*", "Condition": { "StringNotEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }