A versão 4 (V4) do SDK para .NET está em pré-visualização! Para ver informações sobre essa nova versão na versão prévia, consulte o Guia do desenvolvedor AWS SDK para .NET (versão 4).
Observe que a V4 do SDK está em versão prévia, portanto, seu conteúdo está sujeito a alterações.
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 os aplicativos AWS CLI e.NET
Este tutorial mostra como habilitar o SSO para um aplicativo .NET básico e um usuário de SSO de teste. Ele usa o AWS CLI para gerar um token SSO temporário em vez de gerá-lo programaticamente.
Este tutorial mostra uma pequena parte da funcionalidade de SSO no SDK para .NET. Para obter detalhes completos sobre o uso do IAM Identity Center com o SDK para .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 AWS CLI e aplicativo.NET.
nota
Várias das etapas deste tutorial ajudam você a configurar serviços como AWS Organizations o IAM Identity Center. Se já realizou essas configurações 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 um 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.
-
Certifique-se de que a AWS CLI versão 2 esteja instalada no computador do usuário do SSO. Você pode verificar isso executando
aws --version
em um prompt de comando ou terminal.
Configurar AWS
Esta seção mostra como configurar vários AWS serviços para este tutorial.
Para realizar essa configuração, primeiro entre no teste Conta da AWS como administrador. Faça o seguinte:
Amazon S3
Acesse o console do Amazon S3
AWS IAM
Acesse o console do IAM
AWS Organizations
Acesse o console do AWS Organizations
Essa ação adiciona o teste Conta da AWS à 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.
Centro de Identidade do IAM
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 o Região da AWS que foi definido quando você ativou o SSO. Esse é o menu suspenso à esquerda do Conta da AWS ID. 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 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 AWS contas e escolha a AWS conta 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.
Inclui NuGet pacotes AWSSDK.SSO
e, AWSSDK.SSOOIDC
além de AWSSDK.S3
AWSSDK.SecurityToken
e.
using System;
using System.Threading.Tasks;
// 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.CLI_login
{
class Program
{
// Requirements:
// - An SSO profile in the SSO user's shared config file.
// - An active SSO Token.
// If an active SSO token isn't available, the SSO user should do the following:
// In a terminal, the SSO user must call "aws sso login --profile my-sso-profile".
// 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");
return credentials;
}
}
// 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;
}
}
}
Inclui NuGet pacotes AWSSDK.SSO
e, AWSSDK.SSOOIDC
além de AWSSDK.IdentityManagement
AWSSDK.SecurityToken
e.
using System;
using System.Threading.Tasks;
// 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.CLI_login
{
class Program
{
// Requirements:
// - An SSO profile in the SSO user's shared config file.
// - An active SSO Token.
// If an active SSO token isn't available, the SSO user should do the following:
// In a terminal, the SSO user must call "aws sso login --profile my-sso-profile".
// 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");
return credentials;
}
}
// 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
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 AWS
config
arquivo 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. Uma exceção de tempo de execução é exibida.
-
Execute o seguinte AWS CLI comando:
aws sso login --profile
my-sso-profile
-
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.
-
Execute o aplicativo do Amazon S3 novamente. Agora, o aplicativo exibe 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 AWS recursos ou recursos em seu ambiente de desenvolvimento, como arquivos e pastas.