¡Se Herramientas de AWS para PowerShell ha lanzado la versión 5 (V5) del!
Para empezar a utilizar la nueva versión de Tools para PowerShell, consulte la Guía del usuario de Herramientas de AWS para PowerShell (V5), especialmente el tema sobre la Migración a la V5.
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.
Configurar la identidad federada con Herramientas de AWS para PowerShell
Para permitir que los usuarios de su organización obtengan acceso a los recursos de AWS, debe configurar un método de autenticación estándar y repetible para fines de seguridad, auditabilidad, conformidad y para permitir la separación de roles y cuentas. Aunque es habitual proporcionar a los usuarios la posibilidad de obtener acceso a las API de AWS, sin acceso federado a la API, también tendría que crear usuarios de AWS Identity and Access Management (IAM), lo que haría que utilizar la federación pierda sentido. En este tema se describe la compatibilidad de SAML (Security Assertion Markup Language) con las Herramientas de AWS para PowerShell, que facilita la solución de acceso federado.
La compatibilidad de SAML con las Herramientas de AWS para PowerShell le permite proporcionar a los usuarios acceso federado a servicios de AWS. SAML es un formato estándar abierto basado en XML para transmitir datos de autenticación y autorización de los usuarios entre servicios y, en concreto, entre un proveedor de identidad (como Active Directory Federation Services
Requisitos previos
Antes de intentar usar la compatibilidad de SAML por primera vez, debe disponer de lo siguiente.
-
Una solución de identidad federada que esté integrada de forma correcta a su cuenta de AWS para poder tener acceso a la consola usando solo las credenciales de su organización. Para obtener más información acerca de cómo hacer esto, en concreto para Active Directory Federation Services, consulte Acerca de la federación basada en SAML 2.0 en la Guía del usuario de IAM y la entrada de blog Enabling Federation to AWS Using Windows Active Directory, AD FS, and SAML 2.0
. Aunque la entrada de blog explica el procedimiento para AD FS 2.0, los pasos son similares si ejecuta AD FS 3.0. -
Version 3.1.31.0 o posterior de las Herramientas de AWS para PowerShell instalada en su estación de trabajo local.
Cómo un usuario con identidad federada obtiene acceso federado a las API de servicios de AWS
En el siguiente proceso, se describe a grandes rasgos cómo AD FS federa a un usuario de Active Directory (AD) para obtener acceso a los recursos de AWS.
-
El cliente en el equipo del usuario federado se autentica en AD FS.
-
Si la autenticación se realiza correctamente, AD FS envía al usuario una aserción SAML.
-
El cliente del usuario envía la aserción SAML a AWS Security Token Service (STS) como parte de una solicitud de federación SAML.
-
STS devuelve una respuesta SAML que contiene credenciales temporales de AWS para un rol que el usuario puede asumir.
-
El usuario accede a las API del servicio de AWS mediante la inclusión de las credenciales temporales solicitadas por las Herramientas de AWS para PowerShell.
Cómo funciona la compatibilidad de SAML en las Herramientas de AWS para PowerShell
En esta sección se describe cómo los cmdlets de las Herramientas de AWS para PowerShell permiten la configuración de identidades federadas basadas en SAML para los usuarios.
-
Herramientas de AWS para PowerShell se autentica en AD FS utilizando las credenciales actuales del usuario de Windows o, de forma interactiva, cuando el usuario intenta ejecutar un cmdlet que requiere credenciales para llamar a AWS.
-
AD FS autentica al usuario.
-
AD FS genera una respuesta de autenticación SAML 2.0 que incluye una aserción; el objetivo de la aserción consiste en identificar y proporcionar información sobre el usuario. Herramientas de AWS para PowerShell extrae la lista de roles autorizados del usuario de la aserción SAML.
-
Herramientas de AWS para PowerShell reenvía la solicitud SAML, incluidos los nombres de recursos de Amazon (ARN) del rol solicitado, a STS llamando a la API
AssumeRoleWithSAMLRequest. -
Si la solicitud SAML es válida, STS devuelve una respuesta que contiene
AccessKeyId,SecretAccessKeyySessionTokende AWS. Estas credenciales duran 3 600 segundos (1 hora). -
El usuario ahora tiene credenciales válidas para trabajar con las API de los servicios de AWS a las que el rol de usuario tiene permiso de acceso. Herramientas de AWS para PowerShell aplica de forma automática estas credenciales a todas las siguientes llamadas a la API de AWS y las renueva de forma automática cuando vencen.
nota
Cuando las credenciales caducan y se necesitan nuevas credenciales, Herramientas de AWS para PowerShell vuelve a autenticarse automáticamente con AD FS y obtiene credenciales nuevas durante la hora siguiente. Para los usuarios de cuentas unidas al dominio, este proceso se produce silenciosamente. Para las cuentas que no están unidas a un dominio, Herramientas de AWS para PowerShell les pide a los usuarios que especifiquen sus credenciales antes de volver a autenticarse.
Cómo usar los cmdlets de configuración de SAML de PowerShell
Herramientas de AWS para PowerShell incluye dos nuevos cmdlets que proporcionan compatibilidad con SAML.
-
Set-AWSSamlEndpointAD FS configura el punto de enlace de AD-FS, asigna un nombre descriptivo al punto de enlace y, de forma opcional, describe el tipo de autenticación del punto de enlace. -
Set-AWSSamlRoleProfilecrea o edita el perfil de cuenta de usuario que desea asociar a un punto de enlace de AD FS, identificado mediante la especificación del nombre descriptivo proporcionado en el cmdletSet-AWSSamlEndpoint. Cada perfil de rol se asigna a un único rol que el usuario tiene permiso para realizar.Al igual que con los perfiles de credenciales de AWS, puede asignar un nombre descriptivo al perfil del rol. Puede utilizar el mismo nombre descriptivo con el cmdlet
Set-AWSCredentialo como el valor del parámetro-ProfileNamepara cualquier cmdlet que invoque API de servicios de AWS.
Abra una nueva sesión de Herramientas de AWS para PowerShell. Si ejecuta PowerShell 3.0 o posterior, el módulo de Herramientas de AWS para PowerShell se importa automáticamente al ejecutar cualquiera de sus cmdlets. Si ejecuta PowerShell 2.0, debe importar el módulo manualmente. Para ello, ejecute el cmdlet Import-Module, tal y como se muestra en el siguiente ejemplo.
PS >Import-Module "C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell\AWSPowerShell.psd1"
Cómo ejecutar los cmdlets Set-AWSSamlEndpoint y Set-AWSSamlRoleProfile
-
En primer lugar, configure el valor del punto de enlace del sistema AD FS. La forma más sencilla de hacer esto es almacenar el punto de enlace en una variable, tal y como se muestra en este paso. Asegúrese de sustituir los marcadores de posición de ID de cuenta y nombre de host de AD FS por sus propios ID de cuenta y nombre de host de AD-FS. Especifique el nombre de host de AD FS en el parámetro
Endpoint.PS >$endpoint = "https://adfs.example.com/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices" -
Para crear el valor del punto de enlace, ejecute el cmdlet
Set-AWSSamlEndpointespecificando el valor correcto para el parámetroAuthenticationType. Los valores válidos sonBasic,Digest,Kerberos,NegotiateyNTLM. Si no especifica este parámetro, el valor predeterminado esKerberos.PS >$epName = Set-AWSSamlEndpoint -Endpoint $endpoint -StoreAsADFS-Demo-AuthenticationType NTLMEl cmdlet devuelve el nombre descriptivo que asignó mediante el parámetro
-StoreAs, para que pueda utilizarlo cuando ejecuteSet-AWSSamlRoleProfileen la línea siguiente. -
Ahora, ejecute el cmdlet
Set-AWSSamlRoleProfilepara autenticarse con el proveedor de identidad de AD FS y obtener el conjunto de roles (en la aserción SAML) que el usuario tiene permiso para realizar.El cmdlet
Set-AWSSamlRoleProfileutiliza el conjunto de roles devueltos para pedir al usuario que seleccione el rol que desea asociar con el perfil especificado o para validar que los datos del rol proporcionados en los parámetros están presentes (si no están presentes, se le pedirá al usuario que los elija). Si el usuario está autorizado para un único rol, el cmdlet asocia el rol con el perfil automáticamente, sin preguntarle al usuario. No es necesario proporcionar credenciales para configurar un perfil para su uso con una cuenta unida al dominio.PS >Set-AWSSamlRoleProfile -StoreAsSAMLDemoProfile-EndpointName $epNameDe forma alternativa, para las cuentas que no están unidas al dominio, puede proporcionar las credenciales de Active Directory y, a continuación, seleccionar un rol de AWS al que el usuario tenga acceso, tal y como se muestra en la siguiente línea. Esto es útil si tiene cuentas de usuario de Active Directory diferentes para diferenciar los roles dentro de su organización (por ejemplo, funciones de administración).
PS >$credential = Get-Credential -Message "Enter the domain credentials for the endpoint"PS >Set-AWSSamlRoleProfile -EndpointName $epName -NetworkCredential $credential -StoreAsSAMLDemoProfile -
En cualquier caso, el cmdlet
Set-AWSSamlRoleProfilele pide que elija el rol que debe almacenarse en el perfil. En el ejemplo siguiente se muestran dos roles disponibles:ADFS-DevyADFS-Production. El administrador de AD FS asocia los roles de IAM con las credenciales de inicio de sesión de AD.Select Role Select the role to be assumed when this profile is active [1] 1 - ADFS-Dev [2] 2 - ADFS-Production [?] Help (default is "1"):También puede especificar un rol sin la solicitud introduciendo los parámetros
RoleARN,PrincipalARNy, opcionalmente,NetworkCredential. Si el rol especificado no aparece en la aserción devuelta por la autenticación, se le pedirá al usuario que elija entre los roles disponibles.PS >$params = @{ "NetworkCredential"=$credential, "PrincipalARN"="{arn:aws:iam::012345678912:saml-provider/ADFS}", "RoleARN"="{arn:aws:iam::012345678912:role/ADFS-Dev}" }PS >$epName | Set-AWSSamlRoleProfile @params -StoreAs SAMLDemoProfile1 -Verbose -
Puede crear perfiles para todos los roles en un solo comando añadiendo el parámetro
StoreAllRoles, tal y como se muestra en el siguiente código. Tenga en cuenta que el nombre del rol se utiliza como nombre de perfil.PS >Set-AWSSamlRoleProfile -EndpointName $epName -StoreAllRolesADFS-Dev ADFS-Production
Cómo utilizar perfiles de rol para ejecutar cmdlets que requieren credenciales de AWS
Para ejecutar cmdlets que requieran credenciales de AWS, puede utilizar perfiles de rol definidos en el archivo de credenciales compartidas de AWS. Proporcione el nombre de un perfil de rol a Set-AWSCredential (o como el valor de cualquier parámetro ProfileName en las Herramientas de AWS para PowerShell) para obtener de forma automática credenciales temporales de AWS para el rol que se describe en el perfil.
Aunque utilice un único perfil de rol cada vez, puede cambiar de un perfil a otro dentro de una sesión del shell. El cmdlet Set-AWSCredential no autentica ni obtiene credenciales cuando se ejecuta por sí solo; el cmdlet registra que desea usar un perfil de rol especificado. Hasta que ejecuta un cmdlet que requiera credenciales de AWS, no se produce la autenticación ni la solicitud de credenciales.
Ahora puede utilizar las credenciales temporales de AWS obtenidas con el perfil SAMLDemoProfile para trabajar con las API de servicios de AWS. En las secciones siguientes se muestran ejemplos de cómo utilizar los perfiles de rol.
Ejemplo 1: Definir un rol predeterminado con Set-AWSCredential
Este ejemplo define un rol predeterminado para una sesión de Herramientas de AWS para PowerShell mediante Set-AWSCredential. A continuación, puede ejecutar cmdlets que requieran credenciales y que estén autorizados por el rol especificado. En este ejemplo se muestran todas las instancias de Amazon Elastic Compute Cloud en la región EE. UU. Oeste (Oregón) que están asociadas con el perfil especificado con el cmdlet Set-AWSCredential.
PS >Set-AWSCredential -ProfileName SAMLDemoProfilePS >Get-EC2Instance -Region us-west-2 | Format-Table -Property Instances,GroupNamesInstances GroupNames --------- ---------- {TestInstance1} {default} {TestInstance2} {} {TestInstance3} {launch-wizard-6} {TestInstance4} {default} {TestInstance5} {} {TestInstance6} {AWS-OpsWorks-Default-Server}
Ejemplo 2: Cambiar los perfiles de rol durante una sesión de PowerShell
En este ejemplo, se muestran todos los buckets de Amazon S3 disponibles en la cuenta de AWS del rol asociado al perfil SAMLDemoProfile. El ejemplo muestra que, aunque es posible que haya usado otro perfil anteriormente en su sesión de Herramientas de AWS para PowerShell, puede cambiar de perfil especificando un valor diferente para el parámetro -ProfileName con cmdlets que lo admitan. Se trata de una tarea común para los administradores que administran Amazon S3 desde la línea de comandos de PowerShell.
PS >Get-S3Bucket -ProfileName SAMLDemoProfileCreationDate BucketName ------------ ---------- 7/25/2013 3:16:56 AMamzn-s3-demo-bucket4/15/2015 12:46:50 AMamzn-s3-demo-bucket14/15/2015 6:15:53 AMamzn-s3-demo-bucket21/12/2015 11:20:16 PMamzn-s3-demo-bucket3
Tenga en cuenta que el cmdlet Get-S3Bucket especifica el nombre del perfil que se creó al ejecutar el cmdlet Set-AWSSamlRoleProfile. Este comando puede ser útil si ha definido un perfil de rol anteriormente en su sesión (por ejemplo, ejecutando el cmdlet Set-AWSCredential) y desea utilizar un perfil de rol diferente para el cmdlet Get-S3Bucket. El administrador de perfiles pone credenciales temporales a disposición del cmdlet Get-S3Bucket.
Aunque las credenciales caduquen al cabo de una hora (un límite impuesto por STS), Herramientas de AWS para PowerShell actualiza automáticamente las credenciales solicitando una nueva aserción SAML cuando las herramientas detectan que las credenciales actuales han caducado.
Para los usuarios unidos a un dominio, este proceso se produce sin interrupción, porque durante la autenticación se usa la identidad de Windows del usuario actual. Para las cuentas de usuario no unidas a un dominio, Herramientas de AWS para PowerShell muestra un mensaje de credenciales de PowerShell en el que se solicita la contraseña del usuario. El usuario proporciona las credenciales, que se usan para volver a autenticarle y obtener una nueva aserción.
Ejemplo 3: Obtener instancias en una región
En el siguiente ejemplo, se muestran todas las instancias de Amazon EC2 en la región Asia-Pacífico (Sídney) que están asociadas con la cuenta que usa el perfil ADFS-Production. Este comando es útil para devolver todas las instancias de Amazon EC2 de una región.
PS >(Get-Ec2Instance -ProfileName ADFS-Production -Region ap-southeast-2).Instances | Select InstanceType, @{Name="Servername";Expression={$_.tags | where key -eq "Name" | Select Value -Expand Value}}InstanceType Servername ------------ ---------- t2.small DC2 t1.micro NAT1 t1.micro RDGW1 t1.micro RDGW2 t1.micro NAT2 t2.small DC1 t2.micro BUILD
Lecturas adicionales
Para obtener información general acerca de cómo implementar el acceso a API federado, consulte la página sobre cómo implementar una solución general para el acceso a API o CLI federado mediante SAML 2.0
Si tiene alguna pregunta o comentario, visite los foros para desarrolladores de AWS de PowerShell Scripting