Concessione dell'accesso utilizzando un ruolo IAM - AWS SDK for .NET

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Concessione dell'accesso utilizzando un ruolo IAM

Questo tutorial mostra come utilizzare per AWS SDK for .NET abilitare i IAM ruoli sulle EC2 istanze Amazon.

Panoramica

Tutte le richieste AWS devono essere firmate crittograficamente utilizzando credenziali emesse da. AWS Pertanto, è necessaria una strategia per gestire le credenziali per le applicazioni eseguite su EC2 istanze Amazon. È necessario distribuire, archiviare e ruotare queste credenziali in modo sicuro, ma anche mantenerle accessibili alle applicazioni.

Con IAM i ruoli, puoi gestire efficacemente queste credenziali. Si crea un IAM ruolo e lo si configura con le autorizzazioni richieste da un'applicazione, quindi si associa quel ruolo a un'EC2istanza. Per ulteriori informazioni sui vantaggi dell'utilizzo dei IAM ruoli, consulta IAMi ruoli per Amazon EC2 nella Amazon EC2 User Guide. Consulta anche le informazioni sui IAMruoli nella Guida IAM per l'utente.

Per un'applicazione creata utilizzando AWS SDK for .NET, quando l'applicazione costruisce un oggetto client per un AWS servizio, l'oggetto cerca le credenziali da diverse fonti potenziali. L'ordine in cui esegue la ricerca è mostrato in. Risoluzione di credenziali e profili

Se l'oggetto client non trova credenziali da nessun'altra fonte, recupera credenziali temporanee con le stesse autorizzazioni di quelle che sono state configurate nel IAM ruolo e che si trovano nei metadati dell'istanza. EC2 Queste credenziali vengono utilizzate per effettuare chiamate dall'oggetto client. AWS

Informazioni sul tutorial

Mentre segui questo tutorial, usi AWS SDK for .NET (e altri strumenti) per avviare un'EC2istanza Amazon con un IAM ruolo associato, quindi vedi un'applicazione sull'istanza che utilizza le autorizzazioni del IAM ruolo.

Crea un'applicazione Amazon S3 di esempio

Questa applicazione di esempio recupera un oggetto da Amazon S3. Per eseguire l'applicazione, è necessario quanto segue:

  • Un bucket Amazon S3 che contiene un file di testo.

  • AWS credenziali sulla tua macchina di sviluppo che ti consentono di accedere al bucket.

Per informazioni sulla creazione di un bucket Amazon S3 e sul caricamento di un oggetto, consulta la Amazon Simple Storage Service User Guide. Per informazioni sulle AWS credenziali, consulta. Configura l'autenticazione SDK con AWS

Crea un. NETProgetto principale con il seguente codice. Quindi prova l'applicazione sulla tua macchina di sviluppo.

Nota

Sulla tua macchina di sviluppo, il. NETÈ installato Core Runtime, che consente di eseguire l'applicazione senza pubblicarla. Quando crei un'EC2istanza più avanti in questo tutorial, puoi scegliere di installare. NETCore Runtime sull'istanza. Questo ti offre un'esperienza simile e un trasferimento di file più piccolo.

Tuttavia, puoi anche scegliere di non installare. NETCore Runtime sull'istanza. Se scegli questa linea d'azione, devi pubblicare l'applicazione in modo che tutte le dipendenze siano incluse quando la trasferisci all'istanza.

NuGet pacchetti:

Elementi di programmazione:

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 lo desideri, puoi rimuovere temporaneamente le credenziali che usi sulla tua macchina di sviluppo per vedere come risponde l'applicazione. (Ma assicuratevi di ripristinare le credenziali quando avete finito.)

Creare un ruolo IAM.

Crea un IAM ruolo con le autorizzazioni appropriate per accedere ad Amazon S3.

  1. Apri la console. IAM

  2. Nel riquadro di navigazione, scegli Ruoli, quindi scegli Crea ruolo.

  3. Seleziona AWS servizio, trova e scegli EC2, quindi scegli Avanti: Autorizzazioni.

  4. In Allega politiche di autorizzazione, trova e seleziona AmazonS3. ReadOnlyAccess Se lo desideri, esamina la politica, quindi scegli Avanti: tag.

  5. Aggiungi i tag se lo desideri, quindi scegli Avanti: revisione.

  6. Digita un nome e una descrizione per il ruolo e quindi scegli Create role (Crea ruolo). Ricorda questo nome perché ti servirà all'avvio dell'EC2istanza.

Avvia un'EC2istanza e assegna il IAM ruolo

Avvia un'EC2istanza con il IAM ruolo creato in precedenza. Puoi farlo nei seguenti modi.

Per avviare un'EC2istanza a cui è associato un IAM ruolo, la configurazione di un IAM utente deve includere determinate autorizzazioni. Per ulteriori informazioni sulle autorizzazioni richieste, consulta Concedere l'autorizzazione a un utente per passare un IAM ruolo a un'istanza nella Amazon EC2 User Guide.

Connect all'EC2istanza

Connect all'EC2istanza in modo da potervi trasferire l'applicazione di esempio e quindi eseguire l'applicazione. Avrai bisogno del file che contiene la parte privata della key pair che hai usato per avviare l'istanza, ovvero il PEM file.

Per informazioni sulla connessione a un'istanza, consulta Connetti alla tua istanza Linux o Connetti alla tua istanza Windows nella Amazon EC2 User Guide. Quando ti connetti, fallo in modo da poter trasferire i file dalla macchina di sviluppo all'istanza.

Se usi Visual Studio su Windows, puoi anche connetterti all'istanza utilizzando Toolkit for Visual Studio. Per ulteriori informazioni, consulta Connessione a un'EC2istanza Amazon nella Guida AWS Toolkit for Visual Studio per l'utente.

Esegui l'applicazione di EC2 esempio sull'istanza

  1. Copia i file dell'applicazione dall'unità locale all'istanza.

    I file da trasferire dipendono da come è stata creata l'applicazione e dal fatto che l'istanza disponga di. NETCore Runtime installato. Per informazioni su come trasferire file sulla tua istanza, consulta Connect to your Linux (vedi la sottosezione appropriata) o Transfer files to Windows nella Amazon EC2 User Guide.

  2. Avvia l'applicazione e verifica che funzioni con gli stessi risultati della tua macchina di sviluppo.

  3. Verificate che l'applicazione utilizzi le credenziali fornite dal IAM ruolo.

    1. Apri la EC2console Amazon.

    2. Seleziona l'istanza e scollega il IAM ruolo tramite Actions, Instance Settings, IAMAttach/Replace Role.

    3. Esegui nuovamente l'applicazione e verifica che restituisca un errore di autorizzazione.

Eliminazione

Quando hai finito con questo tutorial e se non desideri più l'EC2istanza che hai creato, assicurati di terminare l'istanza per evitare costi indesiderati. Puoi farlo nella EC2console Amazon o a livello di codice, come descritto in. Chiusura di un'istanza Amazon EC2 Se lo desideri, puoi anche eliminare altre risorse che hai creato per questo tutorial. Queste potrebbero includere un IAM ruolo, una EC2 coppia di chiavi e un PEM file, un gruppo di sicurezza, ecc.