Tutorial de SSO utilizando únicamente aplicaciones .NET - AWS SDK for .NET

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.

Tutorial de SSO utilizando únicamente aplicaciones .NET

En este tutorial se explica cómo habilitar SSO para una aplicación básica y un usuario de SSO de prueba. En él se configura la aplicación para generar un token de SSO temporal mediante programación, en lugar de utilizar AWS CLI.

En este tutorial se muestra una pequeña parte de la funcionalidad de SSO en AWS SDK for .NET. Para obtener información completa sobre cómo usar IAM Identity Center con AWS SDK for .NET, consulte el tema con información general. En ese tema, consulte en particular la descripción general de este escenario en la subsección Solo aplicación .NET.

nota

Varios de los pasos de este tutorial ayudan a configurar servicios como AWS Organizations e IAM Identity Center. Si ya ha realizado esa configuración, o si solo le interesa el código, puede pasar a la sección con el código de ejemplo.

Requisitos previos

  • Configure el entorno de desarrollo si aún no lo ha hecho. Esto se describe en secciones como Instalación y configuración de la cadena de herramientas y Introducción.

  • Identifique o cree al menos una Cuenta de AWS que pueda usar para probar el SSO. En este tutorial, esta cuenta se denomina Cuenta de AWS de prueba o, simplemente, cuenta de prueba.

  • Identifique un usuario de SSO que pueda probar el SSO en su nombre. Será la persona que use el SSO y las aplicaciones básicas que cree. En este tutorial, esa persona puede ser usted (el desarrollador) u otra persona. También recomendamos una configuración en la que el usuario de SSO trabaje en un equipo que no esté en el entorno de desarrollo. Sin embargo, esto no es estrictamente necesario.

  • El equipo del usuario de SSO debe tener instalada una versión de .NET Framework compatible con la que se ha utilizado para configurar el entorno de desarrollo.

Configuración de AWS

En esta sección se explica cómo configurar varios servicios de AWS para este tutorial.

Para realizar esta configuración, inicie sesión primero en la Cuenta de AWS de prueba como administrador. A continuación, proceda del modo siguiente:

Amazon S3

Vaya a la consola Amazon S3 y agregue unos cuantos buckets inocuos. Más adelante en este tutorial, el usuario de SSO recuperará una lista de estos buckets.

AWS IAM

Vaya a la consola de IAM y agregue unos cuantos usuarios de IAM. Si concede permisos a los usuarios de IAM, limite estos permisos a unos pocos permisos de solo lectura inocuos. Más adelante en este tutorial, el usuario de SSO recuperará una lista de estos usuarios de IAM.

AWS Organizations

Vaya a la consola de AWS Organizations y active Organizations. Para obtener más información, consulte Creación de una organización en la Guía del usuario de AWS Organizations.

Esta acción agrega la Cuenta de AWS de prueba a la organización como la cuenta de administración. Si tiene más cuentas de prueba, puede invitarlas a unirse a la organización, pero en este tutorial no es necesario hacerlo.

IAM Identity Center

Vaya a la consola de IAM Identity Center y active el inicio de sesión único. Realice la verificación de correo electrónico si es necesario. Para obtener más información, consulte ¿Qué es IAM Identity Center? en la Guía del usuario de IAM Identity Center.

A continuación, realice la siguiente configuración.

  1. Vaya a la página Configuración. Busque la “URL de portal de acceso” y registre el valor para usarlo más adelante en el ajuste sso_start_url.

  2. En el banner de la AWS Management Console, busque la Región de AWS que se configuró al habilitar el SSO. Es el menú desplegable a la izquierda del ID de Cuenta de AWS. Registre el código de región para usarlo más adelante en el ajuste sso_region. Este código será similar a us-east-1.

  3. Cree un usuario de SSO de la siguiente manera:

    1. Vaya a la página Usuarios.

    2. Seleccione Agregar usuario e introduzca el nombre de usuario, la dirección de correo electrónico, el nombre y el apellido del usuario. A continuación, haga clic en Siguiente.

    3. Seleccione Siguiente en la página de grupos, revise la información y seleccione Agregar usuario.

  4. Cree un grupo de la siguiente manera:

    1. Vaya a la página Grupos.

    2. Seleccione Crear grupo e introduzca el nombre de grupo y la descripción del grupo.

    3. En la sección Agregar usuarios al grupo, seleccione el usuario de SSO de prueba que creó anteriormente. Seleccione Crear grupo.

  5. Cree un conjunto de permisos de la siguiente manera:

    1. Vaya a la página Conjuntos de permisos y seleccione Crear conjunto de permisos.

    2. En Tipo de conjunto de permisos, seleccione Conjunto de permisos personalizado y seleccione Siguiente.

    3. Abra Política insertada e introduzca la siguiente política:

      { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "iam:ListUsers" ], "Resource": "*" } ] }
    4. En este tutorial, introduzca SSOReadOnlyRole como nombre del conjunto de permisos. Agregue una descripción si lo desea y, a continuación, seleccione Siguiente.

    5. Revise la información y seleccione Crear.

    6. Registre el nombre del conjunto de permisos para usarlo más adelante en el ajuste sso_role_name.

  6. Vaya a la página Cuentas de AWS y seleccione la cuenta de AWS que agregó anteriormente a la organización.

  7. En la sección Información general de esa página, busque el ID de la cuenta y regístrelo para usarlo más adelante en el ajuste sso_account_id.

  8. Seleccione la pestaña Usuarios y grupos y, a continuación, seleccione Asignar usuarios y grupos.

  9. En la página Asignar usuarios y grupos, seleccione la pestaña Grupos, luego el grupo que creó anteriormente y, por último, Siguiente.

  10. Seleccione el conjunto de permisos que creó anteriormente, luego Siguiente y, por último, Enviar. La configuración tardará un poco en surtir efecto.

Creación de aplicaciones de ejemplo

Cree las siguientes aplicaciones. Se ejecutarán en el equipo del usuario de SSO.

Incluya los paquetes NuGet AWSSDK.SSO y AWSSDK.SSOOIDC, además de AWSSDK.S3 y AWSSDK.SecurityToken.

using System; using System.Threading.Tasks; using System.Diagnostics; // NuGet packages: AWSSDK.S3, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC using Amazon.Runtime; using Amazon.Runtime.CredentialManagement; using Amazon.S3; using Amazon.S3.Model; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; namespace SSOExample.S3.Programmatic_login { class Program { // Requirements: // - An SSO profile in the SSO user's shared config file. // Class members. private static string profile = "my-sso-profile"; static async Task Main(string[] args) { // Get SSO credentials from the information in the shared config file. var ssoCreds = LoadSsoCredentials(profile); // Display the caller's identity. var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds); Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}"); // Display a list of the account's S3 buckets. // The S3 client is created using the SSO credentials obtained earlier. var s3Client = new AmazonS3Client(ssoCreds); Console.WriteLine("\nGetting a list of your buckets..."); var listResponse = await s3Client.ListBucketsAsync(); Console.WriteLine($"Number of buckets: {listResponse.Buckets.Count}"); foreach (S3Bucket b in listResponse.Buckets) { Console.WriteLine(b.BucketName); } Console.WriteLine(); } // Method to get SSO credentials from the information in the shared config file. static AWSCredentials LoadSsoCredentials(string profile) { var chain = new CredentialProfileStoreChain(); if (!chain.TryGetAWSCredentials(profile, out var credentials)) throw new Exception($"Failed to find the {profile} profile"); var ssoCredentials = credentials as SSOAWSCredentials; ssoCredentials.Options.ClientName = "Example-SSO-App"; ssoCredentials.Options.SsoVerificationCallback = args => { // Launch a browser window that prompts the SSO user to complete an SSO login. // This method is only invoked if the session doesn't already have a valid SSO token. // NOTE: Process.Start might not support launching a browser on macOS or Linux. If not, // use an appropriate mechanism on those systems instead. Process.Start(new ProcessStartInfo { FileName = args.VerificationUriComplete, UseShellExecute = true }); }; return ssoCredentials; } } // Class to read the caller's identity. public static class Extensions { public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient) { var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest()); return response.Arn; } } }

Incluya los paquetes NuGet AWSSDK.SSO y AWSSDK.SSOOIDC, además de AWSSDK.IdentityManagement y AWSSDK.SecurityToken.

using System; using System.Threading.Tasks; using System.Diagnostics; // NuGet packages: AWSSDK.IdentityManagement, AWSSDK.SecurityToken, AWSSDK.SSO, AWSSDK.SSOOIDC using Amazon.Runtime; using Amazon.Runtime.CredentialManagement; using Amazon.IdentityManagement; using Amazon.IdentityManagement.Model; using Amazon.SecurityToken; using Amazon.SecurityToken.Model; namespace SSOExample.IAM.Programmatic_login { class Program { // Requirements: // - An SSO profile in the SSO user's shared config file. // Class members. private static string profile = "my-sso-profile"; static async Task Main(string[] args) { // Get SSO credentials from the information in the shared config file. var ssoCreds = LoadSsoCredentials(profile); // Display the caller's identity. var ssoProfileClient = new AmazonSecurityTokenServiceClient(ssoCreds); Console.WriteLine($"\nSSO Profile:\n {await ssoProfileClient.GetCallerIdentityArn()}"); // Display a list of the account's IAM users. // The IAM client is created using the SSO credentials obtained earlier. var iamClient = new AmazonIdentityManagementServiceClient(ssoCreds); Console.WriteLine("\nGetting a list of IAM users..."); var listResponse = await iamClient.ListUsersAsync(); Console.WriteLine($"Number of IAM users: {listResponse.Users.Count}"); foreach (User u in listResponse.Users) { Console.WriteLine(u.UserName); } Console.WriteLine(); } // Method to get SSO credentials from the information in the shared config file. static AWSCredentials LoadSsoCredentials(string profile) { var chain = new CredentialProfileStoreChain(); if (!chain.TryGetAWSCredentials(profile, out var credentials)) throw new Exception($"Failed to find the {profile} profile"); var ssoCredentials = credentials as SSOAWSCredentials; ssoCredentials.Options.ClientName = "Example-SSO-App"; ssoCredentials.Options.SsoVerificationCallback = args => { // Launch a browser window that prompts the SSO user to complete an SSO login. // This method is only invoked if the session doesn't already have a valid SSO token. // NOTE: Process.Start might not support launching a browser on macOS or Linux. If not, // use an appropriate mechanism on those systems instead. Process.Start(new ProcessStartInfo { FileName = args.VerificationUriComplete, UseShellExecute = true }); }; return ssoCredentials; } } // Class to read the caller's identity. public static class Extensions { public static async Task<string> GetCallerIdentityArn(this IAmazonSecurityTokenService stsClient) { var response = await stsClient.GetCallerIdentityAsync(new GetCallerIdentityRequest()); return response.Arn; } } }

Aparte de enumerar los buckets de Amazon S3 y los usuarios de IAM, estas aplicaciones muestran el ARN de identidad de usuario del perfil habilitado para SSO, que en este tutorial es my-sso-profile.

Estas aplicaciones llevan a cabo tareas de inicio de sesión único proporcionando un método de devolución de llamada en la propiedad Opciones de un objeto SSOAWSCredentials.

Indicaciones para el usuario de SSO

Pida al usuario de SSO que consulte su correo electrónico y acepte la invitación de SSO. Se le pedirá que establezca una contraseña. Es posible que el mensaje tarde unos minutos en llegar a la bandeja de entrada del usuario de SSO.

Proporcione al usuario de SSO las aplicaciones que creó anteriormente.

A continuación, pida al usuario de SSO que haga lo siguiente:

  1. Si la carpeta que contiene el archivo config de AWS compartido no existe, créela. Si la carpeta existe y tiene una subcarpeta llamada .sso, elimínela.

    La ubicación de esta carpeta suele ser %USERPROFILE%\.aws en Windows y ~/.aws en Linux y macOS.

  2. Si es necesario, cree un archivo config de AWS compartido en esa carpeta y agréguele un perfil de la siguiente manera:

    [default] region = <default Region> [profile my-sso-profile] sso_start_url = <user portal URL recorded earlier> sso_region = <Region code recorded earlier> sso_account_id = <account ID recorded earlier> sso_role_name = SSOReadOnlyRole
  3. Ejecute la aplicación Amazon S3.

  4. Inicie sesión en la página de inicio de sesión web que aparece. Use el nombre de usuario del mensaje de invitación y la contraseña que se creó en respuesta al mensaje.

  5. Cuando el inicio de sesión se complete, la aplicación mostrará la lista de buckets de S3.

  6. Ejecute la aplicación IAM. La aplicación muestra la lista de usuarios de IAM. Esto sucede aun cuando no se haya realizado un segundo inicio de sesión. La aplicación IAM usa el token temporal que se creó anteriormente.

Limpieza

Si no quiere conservar los recursos que ha creado durante este tutorial, límpielos. Pueden ser recursos de AWS o recursos del entorno de desarrollo, como archivos y carpetas.