Protección de las funciones por etiqueta
Los siguientes pasos muestran una forma de configurar permisos para funciones 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.
Temas
- Requisitos previos
- Paso 1: solicitar etiquetas en las nuevas funciones
- Paso 2: permitir acciones basadas en etiquetas adjuntas a una función de Lambda y a una entidad principal de IAM
- Paso 3: conceder permisos de lista
- Paso 4: conceder permisos de IAM
- Paso 5: crear el rol de IAM
- Paso 6: crear el usuario de IAM
- Paso 7: probar los permisos
- Paso 8: Eliminar los recursos
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, aws:ResourceTag/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
}", "aws:ResourceTag/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 ) y luego 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 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
-
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. -
Cambie al rol
abac-project-role
. Para obtener más información, consulte Cambiar a un rol (consola). -
-
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 Clave, escriba
project
. No ingrese nada en Value (Valor).
-
-
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 etiquetaproject
. -
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.
Paso 8: Eliminar los recursos
Para eliminar el rol de IAM
-
Abra la página Roles
en la consola de IAM. -
Seleccione el rol que creó en el paso 5.
-
Elija Eliminar.
-
Para confirmar la eliminación, escriba el nombre del rol en el campo de entrada de texto.
-
Elija Eliminar.
Cómo eliminar el usuario de IAM
-
Abra la página Users
en la consola de IAM;. -
Seleccione el usuario de IAM que ha creado en el paso 6.
-
Elija Eliminar.
-
Para confirmar la eliminación, escriba el nombre del usuario en el campo de entrada de texto.
-
Elija Eliminar usuario.
Cómo eliminar la función de Lambda
-
Abra la página de Funciones
en la consola de Lambda. -
Seleccione la función que ha creado.
-
Elija Acciones, Eliminar.
-
Escriba
delete
en el campo de entrada de texto y seleccione Delete (Eliminar).