

A versão 4 (V4) do AWS SDK para .NET foi lançada\$1

Para obter informações sobre mudanças significativas e migrar seus aplicativos, consulte o [tópico de migração](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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
<a name="sso-tutorial-cli-and-app"></a>

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](sso-tutorial-app-only.md).

Este tutorial mostra uma pequena parte da funcionalidade de SSO no AWS SDK para .NET. Para obter detalhes completos sobre o uso do IAM Identity Center com o AWS SDK para .NET, consulte o tópico com [informações básicas](sso.md). Nesse tópico, consulte especialmente a descrição de alto nível desse cenário na subseção chamada [AWS CLI e aplicativo.NET](sso.md#sso-generate-use-token-cli-and-app-summary).

**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](#sso-tutorial-cli-and-app-code).

## Pré-requisitos
<a name="sso-tutorial-cli-and-app-prereq"></a>
+ Configure seu ambiente de desenvolvimento, caso ainda não tenha feito isso. Isso é descrito em seções como [Instalando e configurando seu conjunto de ferramentas para o AWS SDK para .NET](net-dg-dev-env.md) e [Conceitos básicos](net-dg-config.md).
+ 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](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) no computador do usuário do SSO. Você pode verificar isso executando `aws --version` em um prompt de comando ou terminal.

## Configurar AWS
<a name="sso-tutorial-cli-and-app-setup-aws"></a>

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
<a name="w2aac15b7c41c15b3b5"></a>

Acesse o [console do Amazon S3](https://console.aws.amazon.com/s3/home) e adicione alguns buckets inócuos. Posteriormente neste tutorial, o usuário do SSO recuperará uma lista desses buckets.

### AWS IAM
<a name="w2aac15b7c41c15b3b7"></a>

Acesse o [console do IAM](https://console.aws.amazon.com/iam/home#/users) 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
<a name="w2aac15b7c41c15b3b9"></a>

Acesse o [console do AWS Organizations](https://console.aws.amazon.com/organizations/) e ative o Organizations. Para obter mais informações, consulte [ Criar uma organização ](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_org_create.html) no [Guia do usuário do AWS Organizations](https://docs.aws.amazon.com/organizations/latest/userguide/).

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
<a name="w2aac15b7c41c15b3c11"></a>

Acesse o [console do Centro de Identidade do IAM](https://console.aws.amazon.com/singlesignon/) 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](https://docs.aws.amazon.com/singlesignon/latest/userguide/step1.html) no [Guia do usuário do Centro de Identidade do IAM](https://docs.aws.amazon.com/singlesignon/latest/userguide/).

Depois, execute a configuração a seguir.

#### Configure o Centro de Identidade do IAM
<a name="w2aac15b7c41c15b3c11b7b1"></a>

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

1. No banner do Console de gerenciamento da AWS, 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 a `us-east-1`.

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

   1. Acesse a página **Usuários**.

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

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

1. Crie um grupo da seguinte forma:

   1. Acesse a página **Grupos**.

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

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

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

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

   1. Abra a **política em linha** e insira a seguinte política:

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": [
                      "s3:ListAllMyBuckets",
                      "iam:ListUsers"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. Para este tutorial, insira `SSOReadOnlyRole` como o **nome do conjunto de permissões**. Adicione uma **descrição**, se quiser, e escolha **Avançar**.

   1. Revise as informações e escolha **Criar**.

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

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

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

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

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

1. 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
<a name="sso-tutorial-cli-and-app-code"></a>

Crie os aplicativos a seguir. Eles serão executados no computador do usuário do SSO.

### Listar buckets do Amazon S3
<a name="sso-tutorial-cli-and-app-code-s3"></a>

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;
        }
    }
}
```

### Listar usuários do IAM
<a name="sso-tutorial-cli-and-app-code-iam"></a>

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
<a name="sso-tutorial-cli-and-app-user"></a>

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

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

1. Execute o aplicativo do Amazon S3. Uma exceção de tempo de execução é exibida.

1. Execute o seguinte AWS CLI comando:

   ```
   aws sso login --profile my-sso-profile
   ```

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

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

1. 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
<a name="sso-tutorial-cli-and-app-cleanup"></a>

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.