Control de acceso a las URL de las funciones de Lambda - AWS Lambda

Control de acceso a las URL de las funciones de Lambda

nota

A partir de octubre de 2025, las nuevas URL de función requerirán ambos permisos, lambda:InvokeFunctionUrl y lambda:InvokeFunction.

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 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.

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. Puede utilizar IAM Access Analyzer sin cargo. 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 cómo crear estas políticas mediante la operación de la API AddPermission o la consola de Lambda. Para obtener información acerca de 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 y también el permiso lambda:InvokeFunction. 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 los permisos lambda:InvokeFunctionUrl y lambda:InvokeFunction 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 y lambda:InvokeFunction en su política basada en identidad. La evaluación de políticas sigue las reglas descritas en la lógica de evaluación de políticas.

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 y lambda:InvokeFunction como permisos concedidos en una política basada en recursos sobre la función que intenta invocar. La evaluación de políticas sigue las reglas descritas en Cómo determinar si una solicitud se permite o se deniega 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. La clave de contexto lambda:InvokedViaFunctionUrl restringe la acción lambda:InvokeFunction a las llamadas de la URL de función. Esto significa que la entidad principal debe usar la URL de función para invocar la función. Si no incluye lambda:InvokedViaFunctionUrl, la entidad principal puede invocar su función mediante otros métodos de invocación, además de la URL de función.

ejemplo : política entre cuentas basada en recursos
JSON
{ "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" } } }, { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::444455556666:role/example" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }

Puede crear esta política basada en recursos 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 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. Introduzca un identificador de estado de cuenta para su declaración de póliza.

  8. En Entidad principal, ingrese el ID de cuenta o el nombre de recurso de Amazon (ARN) del usuario o rol al que desea conceder permisos. Por ejemplo: 444455556666.

  9. Seleccione Save.

Como alternativa, puede crear esta instrucción de política mediante los comandos add-permission AWS Command Line Interface (AWS CLI). Al usar la AWS CLI, debe agregar los estados de cuenta lambda:InvokeFunctionUrl y lambda:InvokeFunction los estados por separado. Por ejemplo:

aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal 444455556666 \ --function-url-auth-type AWS_IAM
aws lambda add-permission --function-name my-function \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal 444455556666 \ --invoked-via-function-url

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, su función debe tener una política basada en recursos que permita lambda:InvokeFunctionUrl y lambda:InvokeFunction. 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 política basada en recursos por usted. Si utiliza la AWS CLI, AWS CloudFormation o la API de Lambda directamente, debe agregar la política usted.

Le recomendamos que incluya la clave de contexto lambda:InvokedViaFunctionUrlL en sus políticas basadas en recursos cuando utilice el tipo de autenticación NONE. Esta clave de contexto garantiza que la función solo se pueda invocar a través de la URL de función y no a través de otros métodos de invocación.

Tenga en cuenta lo siguientes sobre esta política:

  • Todas las entidades pueden llamar lambda:InvokeFunctionUrl y lambda:InvokeFunction. Esto significa que cualquier persona que tenga la URL de función puede invocarla.

  • El valor de la clave de condición lambda:FunctionUrlAuthType es NONE. Esto significa que la 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.

  • La condición lambda:InvokedViaFunctionUrl garantiza que la función solo se pueda invocar a través de la URL de función y no a través de otros métodos de invocación.

ejemplo : política predeterminada basada en recursos para el tipo de autenticación NONE
JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "FunctionURLAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunctionUrl", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "StringEquals": { "lambda:FunctionUrlAuthType": "NONE" } } }, { "Sid": "FunctionURLInvokeAllowPublicAccess", "Effect": "Allow", "Principal": "*", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Condition": { "Bool": { "lambda:InvokedViaFunctionUrl": "true" } } } ] }
Crear la política basada en recursos con AWS CLI

A menos que utilice la consola o AWS SAM para crear una URL de función con un tipo de autenticación NONE, debe agregar usted mismo la política basada en recursos. Utilice los siguientes comandos para crear declaraciones para los permisos lambda:InvokeFunctionUrl y lambda:InvokeFunction. Cada declaración debe añadirse en un comando independiente.

aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeURL \ --action lambda:InvokeFunctionUrl \ --principal * \ --function-url-auth-type NONE
aws lambda add-permission \ --function-name UrlTestFunction \ --statement-id UrlPolicyInvokeFunction \ --action lambda:InvokeFunction \ --principal * \ --invoked-via-function-url
nota

Si elimina una 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.

Si la política basada en recursos de una función no concede permisos lambda:invokeFunctionUrl y lambda:InvokeFunction, 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 . Esto ocurrirá 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.

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
JSON
{ "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 claves de contexto de condición. Lambda es compatible con las siguientes claves de contexto para las URL de funciones.

  • lambda: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.

  • lambda:InvokedViaFunctionUrl: restringe la acción lambda:InvokeFunction a las llamadas realizadas a través de la URL de función. Esto garantiza que la función solo se pueda invocar a través de la URL de función y no a través de otros métodos de invocación. Para ver ejemplos de políticas basadas en recursos que utilizan la clave de contexto lambda:InvokedViaFunctionUrl, consulte los ejemplos de Uso del tipo de autenticación AWS_IAM y Uso del tipo de autenticación NONE.

Puede utilizar estas claves de contexto 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
JSON
{ "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
JSON
{ "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
JSON
{ "Version":"2012-10-17", "Statement": [ { "Effect": "Deny", "Action":[ "lambda:CreateFunctionUrlConfig", "lambda:UpdateFunctionUrlConfig" ], "Resource": "arn:aws:lambda:*:123456789012:function:*", "Condition": { "StringNotEquals": { "lambda:FunctionUrlAuthType": "AWS_IAM" } } } ] }