Otorgar acceso mediante un IAM rol - AWS SDK for .NET

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Otorgar acceso mediante un IAM rol

En este tutorial, se muestra cómo utilizarlos AWS SDK for .NET para habilitar IAM roles en las EC2 instancias de Amazon.

Información general

Todas las solicitudes AWS deben estar firmadas criptográficamente con las credenciales emitidas por AWS. Por lo tanto, necesita una estrategia para administrar las credenciales de las aplicaciones que se ejecutan en EC2 instancias de Amazon. Debe distribuir, almacenar y rotar estas credenciales de forma segura, pero también mantenerlas accesibles en las aplicaciones.

Con IAM los roles, puede gestionar estas credenciales de forma eficaz. Puede crear un IAM rol y configurarlo con los permisos que requiere una aplicación y, a continuación, asociar ese rol a una EC2 instancia. Para obtener más información sobre las ventajas de usar IAM roles, consulta IAMlos roles de Amazon EC2 en la Guía del EC2 usuario de Amazon. Consulte también la información sobre IAMlos roles en la guía IAM del usuario.

En el caso de una aplicación creada con el AWS SDK for .NET, cuando la aplicación crea un objeto de cliente para un AWS servicio, el objeto busca credenciales de varias fuentes posibles. En Resolución de credencial y perfil se muestra el orden de la búsqueda.

Si el objeto cliente no encuentra credenciales de ninguna otra fuente, recupera las credenciales temporales que tienen los mismos permisos que las configuradas en el IAM rol y que se encuentran en los metadatos de la EC2 instancia. Estas credenciales se utilizan para realizar llamadas AWS desde el objeto cliente.

Acerca de este tutorial

Al seguir este tutorial, utilizarás la AWS SDK for .NET (y otras herramientas) para lanzar una EC2 instancia de Amazon con un IAM rol asociado y, a continuación, verás una aplicación en la instancia con los permisos del IAM rol.

Creación de una aplicación de Amazon S3 de ejemplo

Esta aplicación de ejemplo recupera un objeto de Amazon S3. Para ejecutar la aplicación de ejemplo, necesita lo siguiente:

  • Un bucket de Amazon S3 que contiene un archivo de texto

  • AWS credenciales en tu máquina de desarrollo que te permiten acceder al bucket.

Para obtener información acerca de cómo crear un bucket de Amazon S3 y cómo cargar un archivo, consulte Guía del usuario de Amazon Simple Storage Service. Para obtener información sobre AWS las credenciales, consulteConfiguración de la autenticación de SDK con AWS.

Cree un. NETProyecto principal con el siguiente código. A continuación, pruebe la aplicación en el equipo de desarrollo.

nota

En su máquina de desarrollo, el. NETCore Runtime está instalado, lo que le permite ejecutar la aplicación sin publicarla. Al crear una EC2 instancia más adelante en este tutorial, puede optar por instalar la. NETCore Runtime en la instancia. Esto le proporciona una experiencia similar, y la transferencia de archivos es más pequeña.

Sin embargo, también puede optar por no instalar el. NETCore Runtime en la instancia. Si se decanta por esta opción, debe publicar la aplicación de forma que se incluya todas las dependencias al transferirla a la instancia.

NuGet paquetes:

Elementos de programación:

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

Si lo desea, puede eliminar temporalmente las credenciales que use en el equipo de desarrollo para ver cómo responde la aplicación (no se olvide de restaurarlas cuando acabe).

Crea un IAM rol

Cree un IAM rol que tenga los permisos adecuados para acceder a Amazon S3.

  1. Abra la IAMconsola.

  2. En el panel de navegación, seleccione Roles y luego seleccione Crear rol.

  3. Seleccione el AWS servicio, busque y elija EC2y elija Siguiente: permisos.

  4. En Adjuntar políticas de permisos, busca y selecciona AmazonS3 ReadOnlyAccess. Revise la política si lo desea y, a continuación, seleccione Siguiente: Etiquetas.

  5. Agregue etiquetas si lo desea y, a continuación, seleccione Siguiente: Revisar.

  6. Escriba un nombre y una descripción para el rol y, a continuación, elija Crear rol. Recuerde este nombre porque lo necesitará cuando lance la EC2 instancia.

Lanza una EC2 instancia y adjunta el IAM rol

Lanza una EC2 instancia con el IAM rol que creaste anteriormente. Puede hacerlo de las siguientes maneras:

Para lanzar una EC2 instancia que tenga un IAM rol asociado, la configuración de un IAM usuario debe incluir ciertos permisos. Para obtener más información sobre los permisos necesarios, consulta Conceder un permiso a un usuario para transferir un IAM rol a una instancia en la Guía del EC2 usuario de Amazon.

Conectarse a la EC2 instancia

Conéctese a la EC2 instancia para poder transferirle la aplicación de muestra y, a continuación, ejecutar la aplicación. Necesitarás el archivo que contiene la parte privada del key pair que usaste para lanzar la instancia, es decir, el PEM archivo.

Para obtener información sobre cómo conectarse a una instancia, consulte Conectarse a su instancia de Linux o Conectarse a su instancia de Windows en la Guía del EC2 usuario de Amazon. Cuando se conecte, hágalo de forma que pueda transferir archivos desde el equipo de desarrollo a la instancia.

Si usa Visual Studio en Windows, también se puede conectar a la instancia mediante el Kit de herramientas para Visual Studio. Para obtener más información, consulte Conexión a una EC2 instancia de Amazon en la Guía del AWS Toolkit for Visual Studio usuario.

Ejecute la aplicación de muestra en la EC2 instancia

  1. Copie los archivos de la aplicación de la unidad local en la instancia.

    Los archivos que transfieras dependen de cómo hayas creado la aplicación y de si tu instancia tiene la. NETCore Runtime instalado. Para obtener información sobre cómo transferir archivos a tu instancia, consulta Conectarte a tu instancia de Linux (consulta la subsección correspondiente) o Transferir archivos a instancias de Windows en la Guía del EC2 usuario de Amazon.

  2. Inicie la aplicación y compruebe que se ejecuta con los mismos resultados que en el equipo de desarrollo.

  3. Comprueba que la aplicación utilice las credenciales proporcionadas por el IAM rol.

    1. Abre la EC2consola de Amazon.

    2. Seleccione la instancia y separe el IAM rol mediante Acciones, Configuración de la instancia y IAMAdjuntar/reemplazar el rol.

    3. Vuelva a ejecutar la aplicación y vea que devuelve un error de autorización.

Limpieza

Cuando haya terminado con este tutorial, y si ya no desea la EC2 instancia que creó, asegúrese de finalizarla para evitar costes no deseados. Puede hacerlo en la EC2consola de Amazon o mediante programación, tal y como se describe en. Finalización de una instancia de Amazon EC2 Si lo desea, también puede eliminar otros recursos que haya creado durante este tutorial. Estos pueden incluir un IAM rol, un EC2 par de claves y un PEM archivo, un grupo de seguridad, etc.