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 usando uma função IAM
Este tutorial mostra como usar o para AWS SDK for .NET habilitar IAM funções em EC2 instâncias da Amazon.
Visão geral
Todas as solicitações AWS devem ser assinadas criptograficamente usando credenciais emitidas por. AWS Portanto, você precisa de uma estratégia para gerenciar credenciais para aplicativos executados em EC2 instâncias da Amazon. É necessário distribuir, armazenar e girar essas credenciais com segurança, mas também mantendo-as acessíveis à aplicação.
Com IAM funções, você pode gerenciar essas credenciais de forma eficaz. Você cria uma IAM função e a configura com as permissões que um aplicativo exige e, em seguida, anexa essa função a uma EC2 instância. Para ler mais sobre os benefícios do uso de IAM funções, consulte as IAMfunções da Amazon EC2 no Guia EC2 do usuário da Amazon. Consulte também as informações sobre IAMfunções no Guia do IAM usuário.
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 credenciais de nenhuma outra fonte, ele recuperará credenciais temporárias que têm as mesmas permissões que aquelas que foram configuradas na IAM função e estão nos 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 EC2 instância da Amazon com uma IAM função anexada e, em seguida, vê um aplicativo na instância usando as permissões da IAM função.
Tópicos
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 SDK autenticação com AWS.
Crie um. NETProjeto principal com o código a seguir. Em seguida, teste aplicação em sua máquina de desenvolvimento.
nota
Em sua máquina de desenvolvimento, a. NETO Core Runtime está instalado, o que permite que você execute o aplicativo sem publicá-lo. Ao criar uma EC2 instância posteriormente neste tutorial, você pode optar por instalar o. NETCore Runtime na instância. Isso proporciona uma experiência semelhante e uma transferência de arquivos menor.
No entanto, você também pode optar por não instalar o. NETCore 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:
-
Namespace Amazon.S3
Classe AmazonS3Client
-
Namespace Amazon.S3.Model
Classe GetObjectResponse
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).
Crie uma IAM função
Crie uma IAM função que tenha as permissões apropriadas para acessar o Amazon S3.
-
Abra o IAMconsole
. -
No painel de navegação, escolha Perfis e depois escolha Criar perfil.
-
Selecione o AWS serviço, encontre e escolha EC2e escolha Avançar: Permissões.
-
Em Anexar políticas de permissões, encontre e selecione ReadOnlyAccessAmazonS3. Revise a política, se quiser, e escolha Avançar: Tags.
-
Adicione tags, se quiser, e escolha Avançar: Revisão.
-
Digite um nome e uma descrição para a função e, em seguida, escolha Criar função. Lembre-se desse nome porque você precisará dele ao executar sua EC2 instância.
Execute uma EC2 instância e anexe a IAM função
Execute uma EC2 instância com a IAM função que você criou anteriormente. Você pode fazer isso das seguintes maneiras.
-
Usando o EC2 console
Para iniciar uma instância usando o EC2 console, consulte Iniciar uma instância usando o novo assistente de inicialização de instância no Guia EC2 do usuário da Amazon.
Ao examinar a página de lançamento, você deve pelo menos expandir o painel de detalhes avançados para poder especificar a IAM função que você criou anteriormente no perfil da IAM instância.
-
Usando o AWS SDK for .NET
Para obter informações sobre isso, consulte Lançamento de uma EC2 instância da Amazon, incluindo o Considerações adicionais próximo ao final desse tópico.
Para iniciar uma EC2 instância que tenha uma IAM função anexada, a configuração do IAM usuário deve incluir determinadas permissões. Para obter mais informações sobre as permissões necessárias, consulte Conceder permissão a um usuário para passar uma IAM função para uma instância no Guia EC2 do usuário da Amazon.
Conecte-se à EC2 instância
Conecte-se à EC2 instância para poder transferir o aplicativo de amostra para ela e, em seguida, executar o aplicativo. Você precisará do arquivo que contém a parte privada do par de chaves usado para iniciar a instância, ou seja, o PEM arquivo.
Para obter informações sobre como se conectar a uma instância, consulte Conecte-se à sua instância Linux ou Conecte-se à sua instância do Windows no Guia EC2 do usuário da Amazon. 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 EC2 instância da Amazon no Guia AWS Toolkit for Visual Studio do usuário.
Execute o aplicativo de amostra na EC2 instância
-
Copiar as aplicações do aplicativo da sua unidade local para sua instância.
Os arquivos que você transfere dependem de como você criou o aplicativo e se sua instância tem o. NETCore Runtime instalado. Para obter informações sobre como transferir arquivos para sua instância, consulte Conecte-se à sua instância Linux (consulte a subseção apropriada) ou Transferir arquivos para instâncias do Windows no Guia EC2 do usuário da Amazon.
-
Iniciar a aplicação e verificar se é executada com os mesmos resultados da sua máquina de desenvolvimento.
-
Verifique se o aplicativo usa as credenciais fornecidas pela IAM função.
-
Abra o EC2console da Amazon
. -
Selecione a instância e desanexe a IAM função por meio de Ações, Configurações da instância, Anexar/substituir IAM função.
-
Execute o aplicativo novamente e veja se retorna um erro de autorização.
-
Limpeza
Ao concluir este tutorial e se não quiser mais a EC2 instância criada, encerre a instância para evitar custos indesejados. Você pode fazer isso no EC2console da Amazon