As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Tutorial para SSO usando somente aplicativos .NET
Este tutorial mostra como habilitar o SSO para um aplicativo básico e um usuário de SSO de teste. Ele configura o aplicativo para gerar um token SSO temporário de forma programática em vez de usar a AWS CLI.
Este tutorial mostra uma pequena parte da funcionalidade de SSO no AWS SDK for .NET. Para obter detalhes completos sobre o uso do Centro de Identidade do IAM com o AWS SDK for .NET, consulte o tópico com informações básicas. Nesse tópico, consulte especialmente a descrição de alto nível desse cenário na subseção chamada Somente aplicativo .NET.
nota
Várias das etapas deste tutorial ajudam você a configurar serviços como AWS Organizations e o Centro de Identidade do IAM. Se já realizou essa configuração ou se está interessado apenas no código, você pode pular para a seção com o código de exemplo.
Pré-requisitos
-
Configure seu ambiente de desenvolvimento, caso ainda não tenha feito isso. Isso é descrito em seções como Instale e configure seu conjunto de ferramentas e Conceitos básicos.
-
Identifique ou crie pelo menos uma Conta da AWS que você possa usar para testar o SSO. Para os fins deste tutorial, isso é chamado de Conta da AWS de teste ou simplesmente conta de teste.
-
Identifique um usuário de SSO que possa testar o SSO para você. Essa é uma pessoa que usará o SSO e os aplicativos básicos que você criar. Neste tutorial, essa pessoa pode ser você (o desenvolvedor) ou outra pessoa. Também recomendamos uma configuração na qual o usuário do SSO trabalhe em um computador que não esteja em seu ambiente de desenvolvimento. Contudo, isso não é estritamente necessário.
-
O computador do usuário do SSO deve ter uma estrutura do .NET instalada que seja compatível com a que você usou para configurar seu ambiente de desenvolvimento.
Configurar o AWS
Esta seção mostra como configurar vários serviços da AWS para este tutorial.
Para realizar essa configuração, primeiro entre na Conta da AWS de teste como administrador. Então, faça o seguinte:
Amazon S3
Acesse o console do Amazon S3
IAM da AWS
Acesse o console do IAM
AWS Organizations
Acesse o console do AWS Organizations
Essa ação adiciona a Conta da AWS de teste à organização como a conta de gerenciamento. Se você tiver contas de teste adicionais, poderá convidá-las para participar da organização, mas isso não é necessário para este tutorial.
IAM Identity Center
Acesse o console do Centro de Identidade do IAM
Depois, execute a configuração a seguir.
-
Vá para a página Configurações. Procure a “URL do portal de acesso” e registre o valor para uso posterior na configuração do
sso_start_url
. -
No banner do AWS Management Console, procure a Região da AWS que foi definida quando você ativou o SSO. Esse é o menu suspenso à esquerda do ID da Conta da AWS. Registre o código da região para uso posterior na configuração da
sso_region
. Esse código será semelhante aus-east-1
. -
Crie um usuário de SSO da seguinte forma:
-
Acesse a página Usuários.
-
Escolha Adicionar usuário e insira o nome de usuário, endereço de e-mail, nome e sobrenome do usuário. Em seguida, escolha Next (Próximo).
-
Escolha Avançar na página para grupos, revise as informações e escolha Adicionar usuário.
-
-
Crie um grupo da seguinte forma:
-
Acesse a página Grupos.
-
Escolha Criar grupo e insira o nome do grupo e a descrição do grupo.
-
Na seção Adicionar usuários ao grupo, selecione o usuário de SSO de teste que você criou anteriormente. Selecione Criar grupo.
-
-
Crie um conjunto de permissões da seguinte forma:
-
Acesse a página Conjuntos de permissões e escolha Criar conjunto de permissões.
-
Em Tipo de conjunto de permissões, selecione Conjunto de permissões personalizado e escolha Avançar.
-
Abra a política em linha e insira a seguinte política:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "iam:ListUsers" ], "Resource": "*" } ] }
-
Para este tutorial, insira
SSOReadOnlyRole
como o nome do conjunto de permissões. Adicione uma descrição, se quiser, e escolha Avançar. -
Revise as informações e escolha Criar.
-
Registre o nome do conjunto de permissões para uso posterior na configuração do
sso_role_name
.
-
-
Acesse a página de contas da AWS e escolha a conta da AWS que você adicionou à organização anteriormente.
-
Na seção Visão geral dessa página, encontre o ID da conta e registre-a para uso posterior na configuração do
sso_account_id
. -
Escolha a guia Usuários e grupos e, em seguida, escolha Atribuir usuários ou grupos.
-
Na página Atribuir usuários e grupos, escolha a guia Grupos, selecione o grupo que você criou anteriormente e escolha Avançar.
-
Selecione o conjunto de permissões que você criou anteriormente e escolha Avançar e, em seguida, escolha Enviar. A configuração leva alguns instantes.
Como criar aplicativos de exemplo
Crie os aplicativos a seguir. Eles serão executados no computador do usuário do SSO.
Inclua pacotes NuGet AWSSDK.SSO
e AWSSDK.SSOOIDC
, além de AWSSDK.S3
e 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; } } }
Inclua pacotes NuGet AWSSDK.SSO
e AWSSDK.SSOOIDC
, além de AWSSDK.IdentityManagement
e 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; } } }
Além de exibir listas de buckets do Amazon S3 e usuários do IAM, esses aplicativos exibem o ARN de identidade do usuário para o perfil habilitado para SSO, que está neste tutorial. my-sso-profile
Esses aplicativos executam tarefas de login SSO fornecendo um método de retorno de chamada na propriedade Options de um objeto SSOAwsCredentials.
Instrua o usuário do SSO
Peça ao usuário do SSO que verifique seu e-mail e aceite o convite do SSO. Será solicitado que ele defina uma senha. A mensagem pode levar alguns minutos para chegar à caixa de entrada do usuário do SSO.
Forneça ao usuário do SSO os aplicativos criados anteriormente.
Em seguida, peça ao usuário do SSO que faça o seguinte:
-
Se a pasta que contém o arquivo
config
da AWS compartilhado não existir, crie-a. Se a pasta existir e tiver uma subpasta chamada.sso
, exclua essa subpasta.A localização dessa pasta geralmente é
%USERPROFILE%\.aws
no Windows e~/.aws
no Linux e no macOS. -
Crie um AWS
config
arquivo compartilhado nessa pasta, se necessário, e adicione um perfil a ele da seguinte maneira:[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 -
Execute o aplicativo do Amazon S3.
-
Na página de login na web resultante, faça login. Use o nome de usuário da mensagem de convite e a senha que foi criada em resposta à mensagem.
-
Quando o login estiver concluído, o aplicativo exibirá a lista de buckets do S3.
-
Execute o aplicativo do IAM. O aplicativo exibe a lista de usuários do IAM. Isso é verdade mesmo que um segundo login não tenha sido realizado. O aplicativo IAM usa o token temporário que foi criado anteriormente.
Limpeza
Se você não quiser manter os recursos que criou durante este tutorial, apague-os. Eles podem ser recursos da AWS ou recursos em seu ambiente de desenvolvimento, como arquivos e pastas.