Control de acceso basado en atributos para Lambda - AWS Lambda

Control de acceso basado en atributos para Lambda

Con el control de acceso basado en atributos (ABAC), puede utilizar etiquetas para controlar el acceso a las funciones de Lambda. Puede adjuntar etiquetas a una función de Lambda, pasarlas en determinadas solicitudes de API o adjuntarlas a la entidad principal de AWS Identity and Access Management (IAM) que realiza la solicitud. Para obtener más información sobre cómo AWS concede el acceso basado en atributos, consulte Controlar el acceso a los recursos de AWS mediante etiquetas en la Guía del usuario de IAM.

Puede usar ABAC para conceder el privilegio mínimo sin especificar un nombre de recurso de Amazon (ARN) o un patrón de ARN en la política de IAM. En su lugar, puede especificar una etiqueta en el elemento de condición de una política de IAM para controlar el acceso. El escalado es más fácil con ABAC porque no tiene que actualizar las políticas de IAM cuando crea nuevas funciones. En cambio, agregue etiquetas a las nuevas funciones para controlar el acceso.

En Lambda, las etiquetas funcionan a nivel de función. Las etiquetas no se admiten en capas, configuraciones de firma de código, ni asignaciones de orígenes de eventos. Al etiquetar una función, esas etiquetas se aplican a todas las versiones y alias asociados a la función. Para obtener más información sobre cómo etiquetar funciones, consulte Uso de etiquetas en funciones de Lambda.

Puede utilizar las siguientes claves de condición para controlar las acciones de las funciones:

  • aws:ResourceTag/tag-key: controle el acceso en función de las etiquetas que se adjuntan a las funciones de Lambda.

  • aws:RequestTag/tag-key: solicite que las etiquetas estén presentes en una solicitud, por ejemplo, al crear una nueva función.

  • aws:PrincipalTag/tag-key: controle lo que la entidad principal de IAM (la persona que hace la solicitud) está autorizada a hacer en función de las etiquetas que se adjuntan a su usuario o rol de IAM.

  • aws:TagKeys: controle si se pueden utilizar claves de etiquetas específicas en una solicitud.

Para obtener una lista completa de las acciones de Lambda que admite ABAC, consulte Acciones de función y verifique la columna Condition (Condición) de la tabla.

Los siguientes pasos muestran una forma de configurar permisos mediante ABAC. En este escenario de ejemplo, creará cuatro políticas de permisos de IAM. A continuación, adjuntará estas políticas a un nuevo rol de IAM. Por último, creará un usuario de IAM y le concederá permiso para que asuma el nuevo rol.

Requisitos previos

Asegúrese de que tiene un rol de ejecución de Lambda. Utilizará este rol al conceder permisos de IAM y al crear una función de Lambda.

Paso 1: solicitar etiquetas en las nuevas funciones

Cuando se usa ABAC con Lambda, es una práctica recomendada solicitar que todas las funciones tengan etiquetas. Esto ayuda a garantizar que las políticas de permisos de ABAC funcionen según lo esperado.

Cree una política de IAM similar al siguiente ejemplo: Esta política utiliza las claves de condición aws:RequestTag/tag-key y aws:TagKeys para solicitar que las funciones nuevas y la entidad principal de IAM que crea las funciones tengan la etiqueta project. El modificador ForAllValues garantiza que project sea la única etiqueta permitida. Si no incluye el modificador ForAllValues, los usuarios pueden agregar otras etiquetas a la función siempre que también pasen project.

ejemplo — Solicitar etiquetas en las nuevas funciones

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:RequestTag/project": "${aws:PrincipalTag/project}" }, "ForAllValues:StringEquals": { "aws:TagKeys": "project" } } } }

Paso 2: permitir acciones basadas en etiquetas adjuntas a una función de Lambda y a una entidad principal de IAM

Describa cómo crear una segunda política de IAM mediante la clave de condición aws:ResourceTag/tag-key para solicitar que la etiqueta de la entidad principal coincida con la etiqueta adjunta a la función. El siguiente ejemplo de política permite a las entidades principales con la etiqueta project invocar funciones con la etiqueta project. Si una función tiene otras etiquetas, se deniega la acción.

ejemplo — Solicitar etiquetas coincidentes en la función y la entidad principal de IAM

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunction" ], "Resource": "arn:aws:lambda:*:*:function:*", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }

Paso 3: conceder permisos de lista

Cree una política que permita a la entidad principal enumerar las funciones de Lambda y los roles de IAM. Esto permite a la entidad principal ver todas las funciones de Lambda y los roles de IAM en la consola y cuando llama a las acciones de la API.

ejemplo — Conceder permisos de lista de Lambda e IAM

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllResourcesLambdaNoTags", "Effect": "Allow", "Action": [ "lambda:GetAccountSettings", "lambda:ListFunctions", "iam:ListRoles" ], "Resource": "*" } ] }

Paso 4: conceder permisos de IAM

Cree una política que permita iam:PassRole. Este permiso es necesario al asignar un rol de ejecución a una función. En la siguiente política de ejemplo, reemplace el ARN de ejemplo por el ARN del rol de ejecución de Lambda.

nota

No utilice la clave de condición de ResourceTag en una política con la acción iam:PassRole. No puede utilizar la etiqueta en un rol de IAM para controlar el acceso a quién puede pasar ese rol. Para obtener más información sobre los permisos necesarios a fin de pasar un rol a un servicio, consulte Concesión de permisos a un usuario para pasar un rol a un servicio de AWS.

ejemplo — Conceder permiso para pasar el rol de ejecución

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::111122223333:role/lambda-ex" } ] }

Paso 5: crear el rol de IAM

Es una práctica recomendada utilizar roles para delegar permisos. Cree un rol de IAM denominado abac-project-role:

  • En Step 1: Select trusted entity (Paso 1: seleccionar una entidad de confianza): seleccione AWS account (Cuenta de AWS) y luego elija This account (Esta cuenta).

  • En Step 2: Add permissions (Paso 2: agregar permisos): adjunte las cuatro políticas de IAM que creó en los pasos anteriores.

  • En Step 3: Name, review, and create (Paso 3: nombrar, revisar y crear): elija Add tag (Agregar etiqueta). En Key (Clave), escriba project. No ingrese nada en Value (Valor).

Paso 6: crear el usuario de IAM

Cree un usuario de IAM denominado abac-test-user. En la sección Set permissions (Establecer permisos), elija Attach existing policies directly (Adjuntar directamente las políticas existentes) y, a continuación, Create policy (Crear política). Escriba la siguiente definición de política. Reemplace 111122223333 por su ID de cuenta de AWS. Esta política permite al abac-test-user asumir el abac-project-role.

ejemplo — Permitir que el usuario de IAM asuma el rol de ABAC

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::111122223333:role/abac-project-role" } }

Paso 7: probar los permisos

  1. Inicie sesión en la consola de AWS como abac-test-user. Para obtener más información, consulte Iniciar sesión como usuario de IAM.

  2. Cambie al rol abac-project-role. Para obtener más información, consulte Cambiar a un rol (consola).

  3. Cree una función de Lambda:

    • En Permissions (Permisos), elija Change default execution role (Cambiar rol de ejecución predeterminado) y, a continuación, en Execution role (Rol de ejecución), elija Use an existing role (Usar un rol existente). Elija el mismo rol de ejecución que utilizó en Paso 4: conceder permisos de IAM.

    • En Advanced settings (Configuración avanzada), elija Enable tags (Habilitar etiquetas) y, a continuación, Add new tag (Agregar nueva etiqueta). En Key (Clave), escriba project. No ingrese nada en Value (Valor).

  4. Pruebe la función.

  5. Cree una segunda función de Lambda y agregue una etiqueta diferente, como environment. Esta operación puede fallar porque la política de ABAC que creó en Paso 1: solicitar etiquetas en las nuevas funciones solo permite a la entidad principal crear funciones con la etiqueta project.

  6. Cree una tercera función sin etiquetas. Esta operación puede fallar porque la política de ABAC que creó en Paso 1: solicitar etiquetas en las nuevas funciones solo permite a la entidad principal crear funciones sin etiquetas.

Esta estrategia de autorización permite controlar el acceso sin crear nuevas políticas para cada usuario nuevo. Para conceder acceso a los nuevos usuarios, basta con darles permiso a fin de que asuman el rol que corresponde a su proyecto asignado.