Blog de Amazon Web Services (AWS)

Amplíe las funciones de AWS IAM a cargas de trabajo fuera de AWS con IAM Roles Anywhere

Por Faraz Angabini, especialista sénior en seguridad en AWS
 

AWS Identity and Access Management (IAM) ahora facilita el uso de las funciones de IAM para las cargas de trabajo que se ejecutan fuera de AWS con el anuncio de IAM Roles Anywhere.  Esta funcionalidad amplía las funciones de los roles de IAM a las cargas de trabajo fuera de AWS.  Puede utilizar IAM Roles Anywhere para proporcionar una forma segura a los servidores, contenedores o aplicaciones locales de obtener credenciales temporales de AWS, lo que elimina la necesidad de crear y administrar credenciales a largo plazo en AWS.

En esta publicación, analizaré brevemente cómo funciona IAM Roles Anywhere, mencionaré algunos de los casos de uso más comunes de IAM Roles Anywhere y, por último, proporcionaré un escenario de ejemplo para demostrar cómo funciona la implementación.

 

Descripción general

Para permitir que sus aplicaciones accedan a los servicios y recursos de AWS, debe proporcionar a la aplicación credenciales de AWS válidas para realizar solicitudes de API de AWS.  Para las cargas de trabajo que se ejecutan en AWS, esto se hace asociando un rol de IAM a Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Service (Amazon ECS) y Amazon Elastic Kubernetes Service (Amazon EKS) o recursos de AWS Lambda, según la plataforma informática que aloja la aplicación.  Esto es seguro y práctico porque no tiene que distribuir ni administrar las credenciales de AWS para las aplicaciones que se ejecutan en AWS.  En cambio, el rol de IAM proporciona credenciales temporales que las aplicaciones pueden usar al realizar llamadas a la API de AWS.

IAM Roles Anywhere le permite utilizar funciones de IAM en sus aplicaciones fuera de AWS para acceder de forma segura a las API de AWS, del mismo modo que utiliza las funciones de IAM para las cargas de trabajo dentro de AWS.  Con IAM Roles Anywhere, puede proporcionar credenciales a corto plazo para sus servidores, contenedores u otras plataformas informáticas locales.  Al utilizar IAM Roles Anywhere para proporcionar credenciales a corto plazo, puede eliminar la necesidad de claves y secretos de acceso a AWS a largo plazo, lo que puede ayudar a mejorar la seguridad y eliminar la carga operativa que supone administrar y rotar las credenciales a largo plazo.  También puede utilizar IAM Roles Anywhere para ofrecer una experiencia coherente a la hora de administrar las credenciales en cargas de trabajo híbridas.

En esta publicación, asumo que tiene un conocimiento básico de IAM, por lo que no voy a entrar en detalles sobre las funciones de IAM.  Para obtener más información sobre las funciones de IAM, consulte la documentación de IAM.

 

¿Cómo funciona IAM Roles Anywhere?

IAM Roles Anywhere depende de la infraestructura de clave pública (PKI) para establecer la confianza entre su cuenta de AWS y la autoridad de certificación (CA) que emite los certificados para sus cargas de trabajo locales.  Las cargas de trabajo externas a AWS y yo utilizamos IAM Roles Anywhere para intercambiar certificados X.509 por credenciales temporales de AWS.  Los certificados los emite una CA que usted registra como ancla de confianza (raíz de confianza) en IAM Roles Anywhere.  La CA puede formar parte de su sistema de PKI existente o ser una CA creada por usted con la Autoridad de certificación privada (ACM PCA) de AWS Certificate Manager.

Su aplicación realiza una solicitud de autenticación para IAM Roles Anywhere y envía su clave pública (codificada en un certificado) y una firma firmada con la clave privada correspondiente.  Su aplicación también especifica el rol que se asumirá en la solicitud.  Cuando IAM Roles Anywhere recibe la solicitud, primero valida la firma con la clave pública y, a continuación, valida si el certificado lo emitió un ancla de confianza previamente configurado en la cuenta.  Para obtener más información, consulte la documentación de validación de suscripciones.

Cuando ambas validaciones se hayan realizado correctamente, se autenticará su solicitud e IAM Roles Anywhere creará una nueva sesión de rol para el rol especificado en la solicitud, llamada AWS Security Token Service (AWS STS).  Los permisos efectivos para esta sesión de rol son la intersección de las políticas basadas en la identidad del rol de destino y las políticas de sesión, si se especifican, en el perfil que se crean en IAM Roles Anywhere.  Como cualquier otra sesión de rol de IAM, también está sujeta a otros tipos de políticas que pueda tener establecidas, como los límites de permisos y las políticas de control de servicios (SCP).

Normalmente, la configuración y el uso de IAM Roles Anywhere implican tres tareas principales, realizadas por diferentes personas:

  • Configuración inicial de IAM Roles Anywhere: esta tarea implica crear un anclaje de confianza, configurar la política de confianza de roles que asumirá IAM Roles Anywhere y definir el perfil de rol.  Estas actividades las lleva a cabo el administrador de la cuenta de AWS y pueden estar limitadas por las políticas de IAM.
  • Aprovisionamiento de certificados para cargas de trabajo fuera de AWS: esta tarea implica garantizar que el certificado X.509, firmado por la CA, esté instalado y disponible en el servidor, el contenedor o la aplicación fuera de AWS que se debe autenticar.  Esto lo realiza en su entorno local un administrador de infraestructura o un agente de aprovisionamiento, normalmente mediante las herramientas de automatización y administración de la configuración existentes.
  • Cómo utilizar IAM Roles Anywhere: esta tarea implica configurar la cadena de proveedores de credenciales para utilizar la herramienta auxiliar de credenciales de IAM Roles Anywhere a fin de intercambiar el certificado por credenciales de sesión.  Esto lo suele hacer el desarrollador de la aplicación que interactúa con las API de AWS.

Explicaré los detalles de cada tarea cuando analicemos el escenario de ejemplo más adelante en esta publicación.

 

Casos de uso comunes de IAM Roles Anywhere

Puede usar IAM Roles Anywhere para cualquier carga de trabajo que se ejecute en su centro de datos o en otros proveedores de nube que requieran credenciales para acceder a las API de AWS.  Estos son algunos de los casos de uso que creemos que resultarán interesantes para los clientes en función de las conversaciones y los patrones que observamos:

 

Escenario de ejemplo y explicación paso a paso

Para demostrar cómo funciona IAM Roles Anywhere en la práctica, veamos un escenario sencillo en el que querrá llamar a las API de S3 para cargar algunos datos desde un servidor de su centro de datos.

Prerrequisitos

Antes de poder configurar IAM Roles Anywhere, debe cumplir los siguientes requisitos:

  • Paquete de certificados de su propia CA o de una CA ACM PCA CA activa en la misma región de AWS que IAM Roles Anywhere
  • Un certificado de entidad final y una clave privada asociada disponibles en el servidor local
  • Permisos de administrador para IAM Roles e IAM Roles Anywhere

Configuración

A continuación, demuestro cómo realizar el proceso de configuración mediante la consola de IAM Roles Anywhere.  También puede utilizar la API de AWS o la interfaz de línea de comandos (CLI) para realizar estas acciones.  Aquí hay tres actividades principales:

  • Crea un ancla de confianza
  • Cree y configure un rol que confíe en IAM Roles Anywhere
  • Crea un perfil

Para crear un ancla de confianza

  1. Navegue hasta la consola de IAM Roles Anywhere.
  2. En Anclajes de confianza, selecciona Crear un anclaje de confianza 
  3. En la página Crear un anclaje de confianza, introduzca un nombre para su ancla de confianza y seleccione la CA privada de AWS Certificate Manager existente de la lista.  Como alternativa, si desea utilizar su propia CA externa, elija Paquete de certificados externos y proporcione el paquete de certificados.
Figure 1: Create a trust anchor in IAM Roles Anywhere

Figura 1: Crear un anclaje de confianza en IAM Roles Anywhere

 

Para crear y configurar un rol que dependa de IAM Roles Anywhere

  1. Mediante la interfaz de línea de comandos de AWS (AWS CLI), creará un rol de IAM con los permisos adecuados que desee que asuma su servidor local tras la autenticación con IAM Roles Anywhere.  Guarde la siguiente Política de confianza como rolesanywhere-trust-policy.json en su ordenador.
{
   «Versión»: "2012-10-17",
    «Declaración»: [
        {
            «Efecto»: «Permitir»,
            «Principal»: {
                «Servicio»: «rolesanywhere.amazonaws.com»
            },
            «Acción»: [
                «STS: Assume Themes»,
                «STS: setSourceIdentity»,
                «STS: sesión de etiquetas»
            ]
        }
    ]
}
 

 

  1. Guarde la siguiente política basada en identidades como onpremsrv-permissions-policy.json.  Esto otorga permisos a Role para escribir objetos en el bucket de S3 especificado.

 

{
    «Versión»: "2012-10-17",
    «Declaración»: [
        {
            «Efecto»: «Permitir»,
            «Acción»: «S3:PutObject»,
            «Recurso»: «arn:aws:s3:<DOC-EXAMPLE-BUCKET>: /*»
        }
    ]
}
 

3. Ejecute los dos comandos de la CLI de AWS siguientes para crear el rol y adjuntar la política de permisos.

 

AWS iam create-role\
Ejemplos de --role-name 3WriteRole\
--assume-role-policy-document file://<path>/rolesanywhere-trust-policy.json



AWS iam put-role-policy\
Ejemplos de --role-name 3WriteRole\
--nombre-política onpremsrv-inline-policy\
--policy-document file://<path>/onpremsrv-permissions-policy.json
 

Otra opción es utilizar las sentencias de condición basadas en los atributos extraídos del certificado X.509 para restringir aún más la Política de confianza a fin de controlar los recursos locales que pueden obtener credenciales de IAM Roles Anywhere.  IAM Roles Anywhere establece el valor sourceIdentity para el CN del sujeto (onpremsrv01 en mi ejemplo).  También define etiquetas de sesión individuales (PrincipalTag/) con atributos derivados del certificado.  Por lo tanto, puede utilizar las etiquetas principales de la cláusula Condición de la Política de confianza como restricciones de autorización adicionales.

Por ejemplo, el asunto del certificado que utilizo en esta publicación es el siguiente.

Asunto:...  O = Example Corp., OR = SecOps, CN = onpremsrv01

Por lo tanto, puedo añadir declaraciones de condiciones como las que se muestran a continuación en la Política de confianza (rolesanywhere-trust-policy.json):

...
    «Condición»: {
        «Cadena es igual a»: {
            «AWS: Etiqueta principal/X509 Subject/CN»: «onpremsrv01»,
            «AWS: Etiqueta principal/asunto x509 y/o»: «SecOps»
        }
    }
...
 

Para obtener más información, consulte la documentación de la política de confianza de IAM Roles Anywhere.

 

Para crear un perfil

  1. Navegue hasta la consola de Roles Anywhere.
  2. En Perfiles, selecciona Crear un perfil.
  3. En la página Crear un perfil, introduzca un nombre para el perfil.
  4. En Funciones, seleccione un perfil que haya creado en el paso anterior (examples3WriteRole).
  5. Si lo desea, puede utilizar las políticas de sesión para definir con más detalle el alcance de las sesiones que ofrece IAM Roles Anywhere.  Esto resulta especialmente útil cuando configura el perfil con varios roles y desea restringir los permisos en todos ellos.  Puede añadir las políticas de sesión deseadas como políticas gestionadas o políticas en línea.  Aquí, con fines de demostración, agrego una política en línea para permitir solo las solicitudes provenientes de mi dirección IP especificada.
Figure 2: Create a profile in IAM Roles Anywhere

Figura 2: Crear un perfil en IAM Roles Anywhere

 

En este punto, la configuración de IAM Roles Anywhere está completa y ya puede empezar a utilizarla.

Uso de roles de IAM en cualquier lugar

IAM Roles Anywhere proporciona una herramienta de credenciales auxiliar que se puede utilizar con una funcionalidad de credenciales de proceso compatible con todos los SDK de AWS actuales.  Esto simplifica el proceso de suscripción de la aplicación.  Consulte la documentación de IAM Roles Anywhere para obtener información sobre cómo obtener la herramienta auxiliar de credenciales.

Para probar primero la funcionalidad, ejecute la herramienta auxiliar de credenciales (aws_signing_helper) manualmente en el servidor local de la siguiente manera.

. proceso de credenciales /aws_signing_helper\
    --certificate /path/to/certificate.pem\
    --clave privada /ruta/to/clave privada.pem\
    --trust-anchor-arn<TA_ARN>\
    --profile-arn<PROFILE_ARN>\
    --brazo de rol <ExampleS3WriteRole_ARN>
 
Figure 3: Running the credential helper tool manually

Figura 3: Ejecución manual de la herramienta auxiliar de credenciales

 

Debería recibir las credenciales de sesión de IAM Roles Anywhere, como se muestra en la figura 3. Tras confirmar que la configuración funciona, actualice o cree el archivo ~/.aws/config y añada el asistente de firma como credital_process.  Esto permitirá el acceso autónomo al servidor local.  Para obtener más información sobre el archivo de configuración de la CLI de AWS, consulte Configuración del archivo de credenciales y configuración.

 

# contenido ~/.aws/config
[predeterminado]
 proceso_de_credenciales =. Proceso de credenciales /aws_signing_helper
    --certificate /path/to/certificate.pem
    --clave privada /path/to/private-key.pem
    --trust-anchor-arn <TA_ARN>
    --profile-arn <PROFILE_ARN>
    --brazo de rol <ExampleS3WriteRole_ARN>
 

Para comprobar que la configuración funciona según lo esperado, ejecute el comando aws sts get-caller-identity desde la CLI de AWS y confirme que la función asumida es la que configuró en IAM Roles Anywhere.  También debería ver que el nombre de la sesión de rol contiene el número de serie del certificado que se usó para la autenticación (cc:c3:...: 85:37, en este ejemplo).  Por último, debe tener permisos para copiar un archivo al bucket de S3, como se muestra en la figura 4.

Figure 4: Verify the assumed role

Figura 4: Verificar la función asumida

 

Auditoría

Al igual que otros servicios de AWS, AWS CloudTrail captura las llamadas a la API para IAM Roles Anywhere.  Veamos las entradas de registro de CloudTrail correspondientes a las actividades que realizamos anteriormente.

La primera entrada de registro que me interesa es CreateSession, cuando el servidor local invoca IAM Roles Anywhere a través de la herramienta auxiliar de credenciales y recibe las credenciales de sesión en respuesta.

{
    ...
	«Fuente del evento»: «rolesanywhere.amazonaws.com»,
    «Nombre del evento»: «Crear sesión»,
    ...
    «Parámetros de solicitud»: {
        «seguro»: «Mi ICTCCAFICCQD6... Ejemplo de MVW3RRSZLA»,
        «profileRan»: «arn:aws:rolesanywhere:us-west- 2:111122223333:profile/profile_id»,
        «roLearn»: «arn:aws:iam: :111122223333: Role/Examples3WriteRole»,
        ...
    },
    «Elementos de respuesta»: {
        «Conjunto de credenciales»: [{
            «AssumedRoleUser»: {
                «arn»: «arn:aws:sts: :111122223333:asumed-role/examples3writerole/00ccc3a2432f8c5fec93f0fc574f118537",
            },
            «credenciales»: {
                «ID de clave de acceso»: «EJEMPLO DE ASIAIOSFODNN7»,
                «caducidad»: «2021-07-06T 00:46:43 A»,
                «Clave de acceso secreta»: «OCULTOS POR MOTIVOS DE SEGURIDAD»,
                «Token de sesión»: «IQOJAQODYxDzejr...»
            },
            ...
            «Identidad de origen»: «cn=onPremSrv01"
        }],
    },
    ...
}
 

Puede ver que el parámetro cert, junto con otros, se envía a IAM Roles Anywhere y que una sesión de rol junto con las credenciales temporales se devuelve al servidor.

La siguiente entrada de registro que queremos ver es la llamada S3:PutObject que hicimos desde nuestro servidor local.

{
    ...
    «Fuente del evento»: «s3.amazonaws.com»,
    «Nombre del evento»: «Poner objeto»,
    'Identidad de usuario': {
        «tipo»: «Rol asumido»,
        «arn»: «arn:aws:sts: :111122223333:asumed-role/examples3writerole/00ccc3a2432f8c5fec93f0fc574f118537",
        ...
        «Contexto de sesión»:
        {
            ...
            «Identidad de origen»: «cn=onPremSrv01"
        },
    },
    ...
}
 

Además de los registros de CloudTrail, hay varias métricas y eventos disponibles para su uso con fines de monitoreo. Para obtener más información, consulte Monitorear las funciones de IAM en cualquier lugar.

 

Notas adicionales

Puede deshabilitar el anclaje de confianza en IAM Roles Anywhere para evitar inmediatamente que se emitan nuevas sesiones en sus recursos fuera de AWS.  La revocación de certificados se admite mediante el uso de listas de revocación de certificados (CRL) importadas.  Puede cargar una CRL generada a través de la CA y se comprobará el estado de revocación de los certificados utilizados para la autenticación.  IAM Roles Anywhere no admite devoluciones de llamadas para puntos de distribución CRL (CDP) ni puntos finales del Protocolo de estado de certificados en línea (OCSP).

Otra consideración, que no es específica de IAM Roles Anywhere, es garantizar el almacenamiento seguro de las claves privadas en el servidor con los permisos del sistema de archivos adecuados.

 

Conclusión

En esta publicación, demostramos cómo el nuevo servicio IAM Roles Anywhere le ayuda a permitir que las cargas de trabajo ajenas a AWS interactúen con las API de AWS de forma segura y cómoda.  Al ampliar los recursos de las funciones de IAM a los servidores, contenedores o aplicaciones que se ejecutan fuera de AWS, puede eliminar la necesidad de contar con credenciales de AWS a largo plazo, lo que significa que no tendrá que realizar más esfuerzos innecesarios de distribución, almacenamiento y rotación.

Mencioné algunos de los casos de uso más comunes de IAM Roles Anywhere. También aprendió sobre el proceso de configuración y sobre cómo usar IAM Roles Anywhere para obtener credenciales a corto plazo.

 

Este artículo fue traducido del Blog da AWS en Inglés.

 


Acerca de los autor

Faraz Angabini es especialista sénior en seguridad en AWS. Ayuda a los clientes estratégicos de AWS en su viaje a la nube. Sus intereses incluyen la seguridad, la gestión de identidades y accesos, la criptografía, las redes y la infraestructura.

 

 

 

 

Revisores

Bruno Lopes es un arquitecto de soluciones sénior en el equipo de AWS LATAM. Lleva más de 14 años trabajando con soluciones de TI, y en su cartera cuenta con numerosas experiencias en cargas de trabajo de Microsoft, entornos híbridos y formación técnica para clientes como Technical Trainer y Evangelista. Ahora actúa como arquitecto de soluciones, combinando todas las capacidades para reducir la burocracia en la adopción de las mejores tecnologías a fin de ayudar a los clientes a superar sus desafíos diarios.

 

 

 

 

Dan Rezende es un arquitecto de infraestructura en la nube en el equipo de Servicios Profesionales para el Sector Público. Haber trabajado en migraciones y aprovisionamiento de infraestructuras de aplicaciones en empresas del sector público y privado. En su tiempo libre, a Dan le gusta viajar y pasar tiempo con su familia.