Conceder acesso utilizando um perfil do IAM - 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á.

Conceder acesso utilizando um perfil do IAM

Este tutorial mostra como usar o para AWS SDK for .NET habilitar funções do IAM em instâncias do Amazon EC2.

Visão geral

Todas as solicitações AWS devem ser assinadas criptograficamente usando credenciais emitidas por. AWS Portanto, é necessária uma estratégia para gerenciar credenciais para aplicações executadas nas instâncias do Amazon EC2. É necessário distribuir, armazenar e girar essas credenciais com segurança, mas também mantendo-as acessíveis à aplicação.

Com os perfis do IAM, você pode gerenciar essas credenciais com eficiência. Você cria um perfil do IAM e a configura com as permissões que uma aplicação exige e, em seguida, anexa esse perfil a uma instância do EC2. Leia mais sobre os benefícios do uso de perfis do IAM no Guia do usuário do Amazon EC2 para instâncias do Linux ou no Guia do usuário do Amazon EC2 para instâncias do Windows. Consulte também as informações sobre perfis do IAM no Guia do usuário do IAM.

Para um aplicativo criado usando o AWS SDK for .NET, quando o aplicativo constrói um objeto cliente para um AWS serviço, o objeto pesquisa credenciais de várias fontes potenciais. A ordem da pesquisa é mostrada em Resolução de perfil e credenciais.

Se o objeto cliente não encontrar as credenciais em nenhuma outra fonte, ele recuperará as credenciais temporárias com as mesmas permissões que as associadas ao perfil do IAM pelos metadados da instância EC2. Essas credenciais são usadas para fazer chamadas a AWS partir do objeto cliente.

Sobre este tutorial

Ao seguir este tutorial, você usa a AWS SDK for .NET (e outras ferramentas) para iniciar uma instância do Amazon EC2 com uma função do IAM anexada e, em seguida, vê um aplicativo na instância usando as permissões da função do IAM.

Criar uma amostra da aplicação no Amazon S3

Esta aplicação de exemplo recupera um objeto do Amazon S3. Para executar a aplicação, você precisa:

  • Um bucket do Amazon S3 que contém um arquivo de texto.

  • AWS credenciais em sua máquina de desenvolvimento que permitem acessar o bucket.

Para ter informações sobre como criar um bucket do Amazon S3 e fazer upload de um objeto, consulte o Guia do usuário do Amazon Simple Storage Service. Para obter informações sobre AWS credenciais, consulteConfigure a autenticação do SDK com AWS.

Criar um projeto .NET Core com o seguinte código. Em seguida, teste aplicação em sua máquina de desenvolvimento.

nota

Em sua máquina de desenvolvimento, o domínio .NET Core Runtime está instalado, o que permite que você execute a aplicação sem publicá-la. Ao criar uma instância do EC2 mais adiante neste tutorial, é possível instalar o. NET Core Runtime na instância. Isso proporciona uma experiência semelhante e uma transferência de arquivos menor.

No entanto, é possível optar por não instalar o.NET Core Runtime na instância. Se você escolher esse curso de ação, deverá publicar a aplicação para que todas as dependências sejam incluídas ao transferi-la para a instância.

NuGet pacotes:

Elementos de programação:

using System; using System.Collections.Generic; using System.IO; using System.Threading.Tasks; using Amazon.S3; using Amazon.S3.Model; namespace S3GetTextItem { // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // Class to retrieve a text file from an S3 bucket and write it to a local file class Program { static async Task Main(string[] args) { // Parse the command line and show help if necessary var parsedArgs = CommandLine.Parse(args); if(parsedArgs.Count == 0) { PrintHelp(); return; } // Get the application arguments from the parsed list string bucket = CommandLine.GetArgument(parsedArgs, null, "-b", "--bucket-name"); string item = CommandLine.GetArgument(parsedArgs, null, "-t", "--text-object"); string outFile = CommandLine.GetArgument(parsedArgs, null, "-o", "--output-filename"); if( string.IsNullOrEmpty(bucket) || string.IsNullOrEmpty(item) || string.IsNullOrEmpty(outFile)) CommandLine.ErrorExit( "\nOne or more of the required arguments is missing or incorrect." + "\nRun the command with no arguments to see help."); // Create the S3 client object and get the file object from the bucket. var response = await GetObject(new AmazonS3Client(), bucket, item); // Write the contents of the file object to the given output file. var reader = new StreamReader(response.ResponseStream); string contents = reader.ReadToEnd(); using (var s = new FileStream(outFile, FileMode.Create)) using (var writer = new StreamWriter(s)) writer.WriteLine(contents); } // // Method to get an object from an S3 bucket. private static async Task<GetObjectResponse> GetObject( IAmazonS3 s3Client, string bucket, string item) { Console.WriteLine($"Retrieving {item} from bucket {bucket}."); return await s3Client.GetObjectAsync(bucket, item); } // // Command-line help private static void PrintHelp() { Console.WriteLine( "\nUsage: S3GetTextItem -b <bucket-name> -t <text-object> -o <output-filename>" + "\n -b, --bucket-name: The name of the S3 bucket." + "\n -t, --text-object: The name of the text object in the bucket." + "\n -o, --output-filename: The name of the file to write the text to."); } } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // Class that represents a command line on the console or terminal. // (This is the same for all examples. When you have seen it once, you can ignore it.) static class CommandLine { // // Method to parse a command line of the form: "--key value" or "-k value". // // Parameters: // - args: The command-line arguments passed into the application by the system. // // Returns: // A Dictionary with string Keys and Values. // // If a key is found without a matching value, Dictionary.Value is set to the key // (including the dashes). // If a value is found without a matching key, Dictionary.Key is set to "--NoKeyN", // where "N" represents sequential numbers. public static Dictionary<string,string> Parse(string[] args) { var parsedArgs = new Dictionary<string,string>(); int i = 0, n = 0; while(i < args.Length) { // If the first argument in this iteration starts with a dash it's an option. if(args[i].StartsWith("-")) { var key = args[i++]; var value = key; // Check to see if there's a value that goes with this option? if((i < args.Length) && (!args[i].StartsWith("-"))) value = args[i++]; parsedArgs.Add(key, value); } // If the first argument in this iteration doesn't start with a dash, it's a value else { parsedArgs.Add("--NoKey" + n.ToString(), args[i++]); n++; } } return parsedArgs; } // // Method to get an argument from the parsed command-line arguments // // Parameters: // - parsedArgs: The Dictionary object returned from the Parse() method (shown above). // - defaultValue: The default string to return if the specified key isn't in parsedArgs. // - keys: An array of keys to look for in parsedArgs. public static string GetArgument( Dictionary<string,string> parsedArgs, string defaultReturn, params string[] keys) { string retval = null; foreach(var key in keys) if(parsedArgs.TryGetValue(key, out retval)) break; return retval ?? defaultReturn; } // // Method to exit the application with an error. public static void ErrorExit(string msg, int code=1) { Console.WriteLine("\nError"); Console.WriteLine(msg); Environment.Exit(code); } } }

Se quiser, você pode remover temporariamente as credenciais usadas na máquina de desenvolvimento para ver como a aplicação responde. (Mas não se esqueça de restaurar as credenciais quando concluir).

Criar um perfil do IAM

Criar um perfil do IAM com as permissões apropriadas para acessar o Amazon S3.

  1. Abra o console do IAM.

  2. No painel de navegação, escolha Perfis e depois escolha Criar perfil.

  3. Selecionar serviço da AWS , escolher EC2 e depois Avançar: Permissões.

  4. Em Anexar políticas de permissões, encontre e selecione ReadOnlyAccessAmazonS3. Revise a política, se quiser, e escolha Avançar: Tags.

  5. Adicione tags, se quiser, e escolha Avançar: Revisão.

  6. Digite um nome e uma descrição para a função e, em seguida, escolha Criar função. Lembre-se desse nome, pois você precisará dele quando executar sua instância do EC2.

Iniciar uma instância do EC2 e anexar o perfil do IAM

Iniciar uma instância do EC2 com o perfil do IAM que foi criada. Você pode fazer isso das seguintes maneiras.

Para iniciar uma instância do EC2 com um perfil do IAM anexado, uma configuração de um usuário do IAM deve incluir determinadas permissões. Para obter mais informações sobre as permissões necessárias, consulte o Guia do usuário do Amazon EC2 para instâncias do Linux ou o Guia do usuário do Amazon EC2 para instâncias do Windows.

Conectar-se à instância EC2

Conecte-se à instância EC2 para que a aplicação de exemplo possa ser transferida a ela e execute a aplicação. Será preciso o arquivo que contém a parte privada do par de chaves usado para iniciar a instância, ou seja, o arquivo PEM.

Isso poderá ser feito seguindo o procedimento de conexão do Guia do usuário do Amazon EC2 para instâncias do Linux ou do Guia do usuário do Amazon EC2 para instâncias do Windows. Ao conectar-se, faça isso de maneira que possa transferir arquivos da sua máquina de desenvolvimento para sua instância.

Se estiver usando o Visual Studio no Windows, também poderá conectar-se à instância usando o Toolkit for Visual Studio. Para obter mais informações, consulte Conectando-se a uma instância do Amazon EC2 no Guia do AWS Toolkit for Visual Studio usuário.

Executar o exemplo da aplicação na instância do EC2

  1. Copiar as aplicações do aplicativo da sua unidade local para sua instância.

    Os arquivos transferidos dependem de como a aplicação foi criada e se sua instância tem o.NET Core Runtime instalado. Para obter informações sobre transferência de arquivos para sua instância, consulte o Guia do usuário do Amazon EC2 para instâncias do Linux ou o Guia do usuário do Amazon EC2 para instâncias do Windows.

  2. Iniciar a aplicação e verificar se é executada com os mesmos resultados da sua máquina de desenvolvimento.

  3. Verifique se a aplicação usa as credenciais fornecidas pelo perfil do IAM.

    1. Abra o console do Amazon EC2.

    2. Selecione a instância e desanexe o perfil do IAM por meio de Ações, Configurações da instância e Anexar/substituir perfil do IAM.

    3. Execute o aplicativo novamente e veja se retorna um erro de autorização.

Limpeza

Ao terminar este tutorial, se não desejar mais a instância do EC2 criada, certifique-se de encerrar a instância para evitar custos indesejados. Isso poderá ser feito no console do Amazon EC2 ou programaticamente, conforme descrito em Encerramento de uma instância Amazon EC2. Se desejar, você também pode excluir outros recursos que tenha criado para este tutorial. Isso pode incluir um perfil do IAM, um par de chaves do EC2 e um arquivo PEM, um grupo de segurança etc.