View a markdown version of this page

Utilice el usuario IDs en las políticas de IAM para el control de acceso y la automatización - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Utilice el usuario IDs en las políticas de IAM para el control de acceso y la automatización

Srinivas Ananda Babu y Ram Kandaswamy, Amazon Web Services

Resumen

Este patrón explica los posibles inconvenientes de usar políticas basadas en nombres de usuario en AWS Identity and Access Management la IAM, las ventajas de usar políticas basadas en el nombre de usuario y cómo integrar este IDs enfoque para la automatización. AWS CloudFormation

En él Nube de AWS, el servicio de IAM le ayuda a gestionar las identidades de los usuarios y el control de acceso con precisión. Sin embargo, confiar en los nombres de usuario al crear las políticas de IAM puede provocar riesgos de seguridad imprevistos y problemas de control de acceso. Por ejemplo, considere este escenario: un empleado nuevo, John Doe, se une a su equipo y usted crea una cuenta de usuario de IAM con el nombre de usuario j.doe, lo que le concede permisos a través de las políticas de IAM que hacen referencia a los nombres de usuario. Cuando John deja la empresa, se elimina la cuenta. El problema comienza cuando una empleada nueva, Jane Doe, se une al equipo y se vuelve a crear el nombre de usuario j.doe. Las políticas existentes ahora conceden a Jane Doe los mismos permisos que a John Doe. Esto crea una pesadilla en materia de seguridad y cumplimiento.

La actualización manual de cada política para reflejar los detalles de los usuarios nuevos es un proceso lento y propenso a errores, especialmente a medida que la organización crece. La solución consiste en utilizar un ID de usuario único e inmutable. Al crear una cuenta de usuario de IAM, AWS asigna al usuario de IAM un ID de usuario único (o ID principal). Puede utilizar estos usuarios IDs en sus políticas de IAM para garantizar un control de acceso coherente y fiable que no se vea afectado por los cambios o la reutilización del nombre de usuario.

Por ejemplo, una política de IAM que utiliza un ID de usuario podría tener un aspecto similar al siguiente:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::example-bucket", "Principal": { "AWS": "arn:aws:iam::123456789012:user/abcdef01234567890" } } ] }

Entre las ventajas de utilizar el usuario IDs en las políticas de IAM se incluyen las siguientes:

  • Unicidad. IDs Los usuarios son únicos en todos los ámbitos Cuentas de AWS, por lo que proporcionan una solicitud de permisos correcta y coherente.

  • Inmutabilidad. El usuario IDs no se puede cambiar, por lo que proporciona un identificador estable para hacer referencia a los usuarios en las políticas.

  • Auditoría y conformidad. Servicios de AWS suelen incluir al usuario IDs en los registros y registros de auditoría, lo que facilita el seguimiento de las acciones hasta usuarios específicos.

  • Automatización e integración. El uso de scripts IDs de AWS APIs automatización o de entrada de usuario garantiza que los procesos no se vean afectados por los cambios de nombre de usuario. SDKs

  • Preparación para el futuro. Utilizar el usuario IDs en las políticas desde el principio puede evitar posibles problemas de control de acceso o actualizaciones exhaustivas de las políticas.

Automatización

Cuando se utilizan herramientas de infraestructura como código (IaC) AWS CloudFormation, las dificultades de las políticas de IAM basadas en nombres de usuario pueden seguir causando problemas. El recurso de usuario de IAM devuelve el nombre de usuario cuando se llama a la función intrínseca Ref. A medida que la infraestructura de su organización evoluciona, el ciclo de creación y eliminación de recursos, tal como las cuentas de usuario de IAM, puede provocar problemas de control de acceso no deseados si se reutilizan los nombres de usuario.

Para solucionar este problema, te recomendamos que incorpores el usuario en tus plantillas. IDs CloudFormation Sin embargo, obtener IDs un usuario para este propósito puede resultar difícil. Aquí es donde los recursos personalizados pueden resultar útiles. Puede utilizar recursos CloudFormation personalizados para ampliar la funcionalidad del servicio mediante la integración con servicios externos AWS APIs o con otros. Al crear un recurso personalizado que obtenga el ID de usuario de un usuario de IAM determinado, puede hacer que el ID de usuario esté disponible en sus CloudFormation plantillas. Este enfoque agiliza el proceso de referencia al usuario IDs y garantiza que sus flujos de trabajo de automatización sigan siendo sólidos y estén preparados para el futuro.

Requisitos previos y limitaciones

Requisitos previos 

  • Un activo Cuenta de AWS

  • Una función de IAM para que un administrador de la nube ejecute la plantilla CloudFormation

Limitaciones

  • Algunas Servicios de AWS no están disponibles en todas Regiones de AWS. Para conocer la disponibilidad de las regiones, consulte Servicios de AWS by Region. Para los puntos de conexión específicos, consulte la página Service endpoints and quotas y elija el enlace del servicio.

Arquitectura

Arquitectura de destino

En el siguiente diagrama se muestra cómo se CloudFormation utiliza un recurso personalizado respaldado por AWS Lambda para recuperar el ID de usuario de IAM.

Obtener el ID de usuario de IAM mediante un recurso CloudFormation personalizado.

Automatización y escala

Puedes usar la CloudFormation plantilla varias veces para diferentes Regiones de AWS cuentas. Debe ejecutarla solo una vez en cada región o cuenta.

Tools (Herramientas)

Servicios de AWS

  • IAM: AWS Identity and Access Management (IAM) es un servicio web que le ayuda a controlar de forma segura el acceso a los AWS recursos. Utilice IAM para controlar quién está autenticado (ha iniciado sesión) y autorizado (tiene permisos) para utilizar recursos.

  • AWS CloudFormation— le AWS CloudFormation ayuda a modelar y configurar sus AWS recursos para que pueda dedicar menos tiempo a gestionarlos y más tiempo a centrarse en las aplicaciones en las que se ejecutan. AWS Crea una plantilla que describe los AWS recursos que desea y CloudFormation se encarga de aprovisionar y configurar esos recursos por usted.

  • AWS Lambda— AWS Lambda es un servicio informático que permite ejecutar código sin aprovisionar ni administrar servidores. Lambda ejecuta su código solo cuando es necesario y escala de manera automática, desde unas pocas solicitudes por día hasta miles por segundo. 

Prácticas recomendadas

Si está empezando desde cero o tiene prevista una implementación totalmente nueva, le recomendamos que utilice AWS IAM Identity Center para la administración centralizada de usuarios. El Centro de Identidad de IAM se integra con sus proveedores de identidad existentes (como Active Directory u Okta) para federar las identidades de los usuarios AWS, lo que elimina la necesidad de crear y administrar los usuarios de IAM directamente. Este enfoque no solo garantiza un control de acceso uniforme, sino que también simplifica la administración del ciclo de vida de los usuarios y ayuda a mejorar la seguridad y el cumplimiento en todo el entorno. AWS

Epics

TareaDescripciónHabilidades requeridas

Valide su función Cuenta de AWS y la de IAM.

Confirme que tiene un rol de IAM con permisos para implementar CloudFormation plantillas en su. Cuenta de AWS

Si piensa utilizar la consola AWS CLI en lugar de la CloudFormation consola para implementar la plantilla en el último paso de este procedimiento, también debe configurar credenciales temporales para ejecutar AWS CLI comandos. Para obtener instrucciones, consulte la documentación de IAM.

Arquitecto de la nube
TareaDescripciónHabilidades requeridas

Crea una CloudFormation plantilla.

  1. Cree una CloudFormation plantilla siguiendo las instrucciones de la CloudFormation documentación. Puede utilizar el formato JSON o YAML. Este patrón supone que utiliza el formato YAML.

  2. Guarde la plantilla con el nombre get_unique_user_id.yaml.

AWS DevOps, arquitecto de nube

Agregue un parámetro de entrada para el nombre de usuario.

Añada el siguiente código a la Parameters sección de la CloudFormation plantilla:

Parameters: NewIamUserName: Type: String Description: Unique username for the new IAM user

Este parámetro solicita al usuario el nombre de usuario.

AWS DevOps, arquitecto de nube

Agregue un recurso personalizado para crear un usuario de IAM.

Añada el siguiente código a la Resources sección de la CloudFormation plantilla:

Resources: rNewIamUser: Type: 'AWS::IAM::User' Properties: UserName: !Ref NewIamUserName

Este código añade un CloudFormation recurso que crea un usuario de IAM con el nombre proporcionado por el NewIamUserName parámetro.

AWS DevOps, arquitecto de nube

Agregue un rol de ejecución para la función de Lambda.

En este paso, crea un rol de IAM que otorga un permiso a una AWS Lambda función para obtener el UserId IAM. Especifique los siguientes permisos mínimos necesarios para que Lambda se ejecute:

  • logs:CreateLogStream

  • logs:PutLogEvents

  • CreateLogGroup

  • iam:GetUser

  • AssumeRole para lambda.amazonaws.com

Para obtener instrucciones sobre cómo crear un rol de ejecución, consulte la documentación de Lambda. Hará referencia a este rol en el paso siguiente, cuando cree la función de Lambda.

Administrador de AWS, arquitecto de la nube

Agregue una función de Lambda para obtener el UserId de IAM único.

En este paso, se define una función de Lambda con un tiempo de ejecución de Python para obtener el UserId de IAM único. Para ello, añada el siguiente código a la Resources sección de la CloudFormation plantilla. Sustituya <<ROLENAME>> por el nombre del rol de ejecución que creó en el paso anterior.

GetUserLambdaFunction: Type: 'AWS::Lambda::Function' Properties: Handler: index.handler Role: <<ROLENAME>> Timeout: 30 Runtime: python3.11 Code: ZipFile: | import cfnresponse, boto3 def handler(event, context): try: print(event) user = boto3.client('iam').get_user(UserName=event['ResourceProperties']['NewIamUserName'])['User'] cfnresponse.send(event, context, cfnresponse.SUCCESS, {'NewIamUserId': user['UserId'], 'NewIamUserPath': user['Path'], 'NewIamUserArn': user['Arn']}) except Exception as e: cfnresponse.send(event, context, cfnresponse.FAILED, {'NewIamUser': str(e)})
AWS DevOps, arquitecto de nube

Agregue un recurso personalizado.

Añada el siguiente código a la Resources sección de la CloudFormation plantilla:

rCustomGetUniqueUserId: Type: 'Custom::rCustomGetUniqueUserIdWithLambda' Properties: ServiceToken: !GetAtt GetUserLambdaFunction.Arn NewIamUserName: !Ref NewIamUserName

Este recurso personalizado llama a la función de Lambda para obtener el UserID de IAM.

AWS DevOps, arquitecto de nube

Defina CloudFormation los resultados.

Añada el siguiente código a la Outputs sección de la CloudFormation plantilla:

Outputs: NewIamUserId: Value: !GetAtt rCustomGetUniqueUserId.NewIamUserId

Muestra el UserID de IAM del nuevo usuario de IAM.

AWS DevOps, arquitecto de nube

Guarde la plantilla.

Guarde los cambios en la CloudFormation plantilla.

AWS DevOps, arquitecto de nube
TareaDescripciónHabilidades requeridas

Implemente la CloudFormation plantilla.

Para implementar la get_unique_user_id.yaml plantilla mediante la CloudFormation consola, siga las instrucciones de la CloudFormation documentación.

Como alternativa, puede ejecutar el siguiente AWS CLI comando para implementar la plantilla:

aws cloudformation create-stack \ --stack-name DemoNewUser \ --template-body file://get_unique_user_id.yaml \ --parameters ParameterKey=NewIamUserName,ParameterValue=demouser \ --capabilities CAPABILITY_NAMED_IAM
AWS DevOps, arquitecto de nube

Recursos relacionados