¡La versión 4 (V4) del SDK para .NET está en versión preliminar! Para ver información sobre esta nueva versión en versión preliminar, consulta la Guía para desarrolladores AWS SDK para .NET (versión preliminar de la versión 4).
Ten en cuenta que la versión 4 del SDK está en versión preliminar, por lo que su contenido está sujeto a cambios.
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. SDK para .NET Para obtener más información sobre el uso del Centro de identidad de IAM con el SDK para .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 le ayudan a configurar servicios como AWS Organizations el Centro de identidad de IAM. 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 uno 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.
Configura AWS
En esta sección se muestra cómo configurar varios AWS servicios para este tutorial.
Para realizar esta configuración, primero inicie sesión en la prueba Cuenta de AWS como administrador. A continuación, proceda del modo siguiente:
Amazon S3
Vaya a la consola Amazon S3
AWS YO SOY
Vaya a la consola de IAM
AWS Organizations
Vaya a la consola de AWS Organizations
Esta acción agrega la prueba Cuenta de AWS a la organización como 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
A continuación, realice la siguiente configuración.
-
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
. -
En el encabezado de AWS Management Console, busca la Región de AWS que se configuró cuando habilitaste el SSO. Este es el menú desplegable a la izquierda del Cuenta de AWS ID. Registre el código de región para usarlo más adelante en el ajuste
sso_region
. Este código será similar aus-east-1
. -
Cree un usuario de SSO de la siguiente manera:
-
Vaya a la página Usuarios.
-
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, elija Siguiente.
-
Seleccione Siguiente en la página de grupos, revise la información y seleccione Agregar usuario.
-
-
Cree un grupo de la siguiente manera:
-
Vaya a la página Grupos.
-
Seleccione Crear grupo e introduzca el nombre de grupo y la descripción del grupo.
-
En la sección Agregar usuarios al grupo, seleccione el usuario de SSO de prueba que creó anteriormente. Seleccione Crear grupo.
-
-
Cree un conjunto de permisos de la siguiente manera:
-
Vaya a la página Conjuntos de permisos y seleccione Crear conjunto de permisos.
-
En Tipo de conjunto de permisos, seleccione Conjunto de permisos personalizado y seleccione Siguiente.
-
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": "*" } ] }
-
En este tutorial, introduzca
SSOReadOnlyRole
como nombre del conjunto de permisos. Agregue una descripción si lo desea y, a continuación, seleccione Siguiente. -
Revise la información y seleccione Crear.
-
Registre el nombre del conjunto de permisos para usarlo más adelante en el ajuste
sso_role_name
.
-
-
Ve a la página de AWS cuentas y elige la AWS cuenta que agregaste anteriormente a la organización.
-
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
. -
Seleccione la pestaña Usuarios y grupos y, a continuación, seleccione Asignar usuarios y grupos.
-
En la página Asignar usuarios y grupos, seleccione la pestaña Grupos, luego el grupo que creó anteriormente y, por último, Siguiente.
-
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.
Incluye NuGet paquetes AWSSDK.SSO
y, AWSSDK.SSOOIDC
además de AWSSDK.S3
yAWSSDK.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 NuGet paquetes AWSSDK.SSO
y, AWSSDK.SSOOIDC
además de AWSSDK.IdentityManagement
yAWSSDK.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 realizan tareas de inicio de sesión único al proporcionar un método de devolución de llamada en la propiedad Options 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:
-
Si la carpeta que contiene el AWS
config
archivo 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. -
Cree un AWS
config
archivo compartido en esa carpeta, si es necesario, 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 -
Ejecute la aplicación Amazon S3.
-
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.
-
Cuando el inicio de sesión se complete, la aplicación mostrará la lista de buckets de S3.
-
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 AWS recursos o recursos de su entorno de desarrollo, como archivos y carpetas.