Tutorial para SSO usando os aplicativos AWS CLI e .NET - AWS SDK for .NET

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 de forma programática.

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 AWS CLI e 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 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 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.

  • Certifique-se de que a versão 2 da AWS CLI esteja instalada no computador do usuário do SSO. Você pode verificar isso executando aws --version em um prompt de comando ou terminal.

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 e adicione alguns buckets inócuos. Posteriormente neste tutorial, o usuário do SSO recuperará uma lista desses buckets.

IAM da AWS

Acesse o console do IAM e adicione alguns usuários do IAM. Se você conceder permissões aos usuários do IAM, limite as permissões a algumas permissões inócuas somente para leitura. Posteriormente neste tutorial, o usuário do SSO recuperará uma lista desses usuários do IAM.

AWS Organizations

Acesse o console do AWS Organizations e ative o Organizations. Para obter mais informações, consulte Criar uma organização no Guia do usuário 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 e habilite o SSO. Execute a verificação por e-mail, se necessário. Para obter mais informações, consulte Habilitar o Centro de Identidade do IAM no Guia do usuário do Centro de Identidade do IAM.

Depois, execute a configuração a seguir.

  1. 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.

  2. 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 a us-east-1.

  3. Crie um usuário de SSO da seguinte forma:

    1. Acesse a página Usuários.

    2. 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).

    3. Escolha Avançar na página para grupos, revise as informações e escolha Adicionar usuário.

  4. Crie um grupo da seguinte forma:

    1. Acesse a página Grupos.

    2. Escolha Criar grupo e insira o nome do grupo e a descrição do grupo.

    3. Na seção Adicionar usuários ao grupo, selecione o usuário de SSO de teste que você criou anteriormente. Selecione Criar grupo.

  5. Crie um conjunto de permissões da seguinte forma:

    1. Acesse a página Conjuntos de permissões e escolha Criar conjunto de permissões.

    2. Em Tipo de conjunto de permissões, selecione Conjunto de permissões personalizado e escolha Avançar.

    3. 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": "*" } ] }
    4. Para este tutorial, insira SSOReadOnlyRole como o nome do conjunto de permissões. Adicione uma descrição, se quiser, e escolha Avançar.

    5. Revise as informações e escolha Criar.

    6. Registre o nome do conjunto de permissões para uso posterior na configuração do sso_role_name.

  6. Acesse a página de contas da AWS e escolha a conta da AWS que você adicionou à organização anteriormente.

  7. 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.

  8. Escolha a guia Usuários e grupos e, em seguida, escolha Atribuir usuários ou grupos.

  9. Na página Atribuir usuários e grupos, escolha a guia Grupos, selecione o grupo que você criou anteriormente e escolha Avançar.

  10. 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; // 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; } } }

Inclua pacotes NuGet AWSSDK.SSO e AWSSDK.SSOOIDC, além de AWSSDK.IdentityManagement e AWSSDK.SecurityToken.

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:

  1. 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.

  2. 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
  3. Execute o aplicativo do Amazon S3. Uma exceção de tempo de execução é exibida.

  4. Execute o seguinte comando AWS CLI:

    aws sso login --profile my-sso-profile
  5. 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.

  6. Execute o aplicativo do Amazon S3 novamente. Agora, o aplicativo exibe a lista de buckets do S3.

  7. 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.