Zugriff mithilfe einer IAM Rolle gewähren - AWS SDK for .NET

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Zugriff mithilfe einer IAM Rolle gewähren

In diesem Tutorial erfahren Sie, wie Sie IAM Rollen auf EC2 Amazon-Instances aktivieren. AWS SDK for .NET

Übersicht

Alle Anfragen an AWS müssen kryptografisch signiert werden, wobei die Anmeldeinformationen verwendet werden müssen, die von ausgestellt wurden. AWS Daher benötigen Sie eine Strategie zur Verwaltung von Anmeldeinformationen für Anwendungen, die auf EC2 Amazon-Instances ausgeführt werden. Sie müssen diese Anmeldeinformationen sicher verteilen, speichern und rotieren, aber auch dafür sorgen, dass sie für die Anwendungen zugänglich sind.

Mithilfe von IAM Rollen können Sie diese Anmeldeinformationen effektiv verwalten. Sie erstellen eine IAM Rolle und konfigurieren sie mit den Berechtigungen, die eine Anwendung benötigt, und fügen diese Rolle dann einer EC2 Instanz hinzu. Weitere Informationen zu den Vorteilen der Verwendung von IAM Rollen finden Sie unter IAMRollen für Amazon EC2 im EC2Amazon-Benutzerhandbuch. Lesen Sie auch die Informationen zu IAMRollen im IAM Benutzerhandbuch.

Bei einer Anwendung, die mit dem erstellt wurde AWS SDK for .NET, sucht das Objekt, wenn die Anwendung ein Client-Objekt für einen AWS Dienst erstellt, nach Anmeldeinformationen aus verschiedenen möglichen Quellen. Die Reihenfolge, in der gesucht wird, wird in Auflösung von Anmeldeinformationen und Profilen angezeigt.

Wenn das Client-Objekt keine Anmeldeinformationen aus einer anderen Quelle findet, ruft es temporäre Anmeldeinformationen ab, die dieselben Berechtigungen haben wie die, die für die IAM Rolle konfiguriert wurden und sich in den Metadaten der EC2 Instanz befinden. Diese Anmeldeinformationen werden verwendet, um vom Client-Objekt AWS aus Aufrufe zu tätigen.

Über dieses Tutorial

Wenn Sie diesem Tutorial folgen, verwenden Sie die AWS SDK for .NET (und andere Tools), um eine EC2 Amazon-Instance mit einer angehängten IAM Rolle zu starten, und sehen dann eine Anwendung auf der Instance, die die Berechtigungen der IAM Rolle verwendet.

Erstellen Sie eine Amazon S3 S3-Beispielanwendung

Diese Beispielanwendung ruft ein Objekt von Amazon S3 ab. Um die Anwendung auszuführen, benötigen Sie Folgendes:

  • Ein Amazon S3 S3-Bucket, der eine Textdatei enthält.

  • AWS Anmeldeinformationen auf Ihrem Entwicklungscomputer, die Ihnen den Zugriff auf den Bucket ermöglichen.

Informationen zum Erstellen eines Amazon S3 S3-Buckets und zum Hochladen eines Objekts finden Sie im Amazon Simple Storage Service-Benutzerhandbuch. Informationen zu AWS Anmeldeinformationen finden Sie unterKonfigurieren Sie die SDK-Authentifizierung mit AWS.

Erstellen Sie eine. NETKernprojekt mit dem folgenden Code. Testen Sie dann die Anwendung auf Ihrem Entwicklungscomputer.

Anmerkung

Auf Ihrem Entwicklungscomputer, der. NETCore Runtime ist installiert, sodass Sie die Anwendung ausführen können, ohne sie zu veröffentlichen. Wenn Sie später in diesem Tutorial eine EC2 Instanz erstellen, können Sie wählen, ob Sie die installieren möchten. NETCore Runtime auf der Instanz. Dies bietet Ihnen eine ähnliche Erfahrung und eine geringere Dateiübertragung.

Sie können sich jedoch auch dafür entscheiden, das nicht zu installieren. NETCore Runtime auf der Instanz. Wenn Sie sich für diese Vorgehensweise entscheiden, müssen Sie die Anwendung so veröffentlichen, dass alle Abhängigkeiten berücksichtigt werden, wenn Sie sie auf die Instanz übertragen.

NuGet Pakete:

Elemente der Programmierung:

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

Wenn Sie möchten, können Sie die Anmeldeinformationen, die Sie auf Ihrem Entwicklungscomputer verwenden, vorübergehend entfernen, um zu sehen, wie die Anwendung reagiert. (Stellen Sie jedoch sicher, dass Sie die Anmeldeinformationen wiederherstellen, wenn Sie fertig sind.)

Erstellen Sie eine IAM-Rolle

Erstellen Sie eine IAM Rolle, die über die entsprechenden Berechtigungen für den Zugriff auf Amazon S3 verfügt.

  1. Öffnen Sie die IAMKonsole.

  2. Wählen Sie im Navigationsbereich Rollen und dann Rolle erstellen aus.

  3. Wählen Sie AWS Dienst aus, suchen und wählen EC2Sie dann Weiter: Berechtigungen aus.

  4. Suchen Sie unter Richtlinien zum Anhängen von Berechtigungen nach AmazonS3 und wählen Sie es aus. ReadOnlyAccess Überprüfen Sie die Richtlinie, falls Sie möchten, und wählen Sie dann Weiter: Tags aus.

  5. Fügen Sie bei Bedarf Stichwörter hinzu und wählen Sie dann Weiter: Überprüfen aus.

  6. Geben Sie einen Namen und eine Beschreibung für die Rolle ein und wählen Sie dann Create role aus. Merken Sie sich diesen Namen, da Sie ihn benötigen, wenn Sie Ihre EC2 Instance starten.

Starten Sie eine EC2 Instance und fügen Sie die IAM Rolle hinzu

Starten Sie eine EC2 Instanz mit der IAM Rolle, die Sie zuvor erstellt haben. Sie können dies auf folgende Weise tun.

Um eine EC2 Instance zu starten, der eine IAM Rolle zugewiesen ist, muss die Konfiguration eines IAM Benutzers bestimmte Berechtigungen beinhalten. Weitere Informationen zu den erforderlichen Berechtigungen finden Sie im EC2Amazon-Benutzerhandbuch unter Erteilen einer Benutzerberechtigung zur Übergabe einer IAM Rolle an eine Instance.

Connect zur EC2 Instanz her

Stellen Sie eine Verbindung mit der EC2 Instanz her, sodass Sie die Beispielanwendung auf sie übertragen und die Anwendung dann ausführen können. Sie benötigen die Datei, die den privaten Teil des key pair enthält, das Sie zum Starten der Instance verwendet haben, also die PEM Datei.

Informationen zum Herstellen einer Verbindung mit einer Instance finden Sie unter Connect to your Linux Instance oder Connect to your Windows Instance im EC2Amazon-Benutzerhandbuch. Wenn Sie eine Verbindung herstellen, tun Sie dies so, dass Sie Dateien von Ihrem Entwicklungscomputer auf Ihre Instance übertragen können.

Wenn Sie Visual Studio unter Windows verwenden, können Sie auch mithilfe des Toolkit for Visual Studio eine Verbindung mit der Instanz herstellen. Weitere Informationen finden Sie unter Verbindung zu einer EC2 Amazon-Instance herstellen im AWS Toolkit for Visual Studio Benutzerhandbuch.

Führen Sie die Beispielanwendung auf der EC2 Instance aus

  1. Kopieren Sie die Anwendungsdateien von Ihrem lokalen Laufwerk auf Ihre Instanz.

    Welche Dateien Sie übertragen, hängt davon ab, wie Sie die Anwendung erstellt haben und ob Ihre Instanz über die verfügt. NETCore Runtime ist installiert. Informationen zum Übertragen von Dateien auf Ihre Instance finden Sie unter Connect zu Ihrer Linux-Instance herstellen (siehe den entsprechenden Unterabschnitt) oder Dateien auf Windows-Instances übertragen im EC2Amazon-Benutzerhandbuch.

  2. Starten Sie die Anwendung und stellen Sie sicher, dass sie mit den gleichen Ergebnissen wie auf Ihrem Entwicklungscomputer ausgeführt wird.

  3. Stellen Sie sicher, dass die Anwendung die von der IAM Rolle bereitgestellten Anmeldeinformationen verwendet.

    1. Öffnen Sie die EC2Amazon-Konsole.

    2. Wählen Sie die Instance aus und trennen Sie die IAM Rolle über Aktionen, Instance-Einstellungen, Rolle anfügen/ersetzen IAM.

    3. Führen Sie die Anwendung erneut aus und stellen Sie fest, dass sie einen Autorisierungsfehler zurückgibt.

Bereinigen

Wenn Sie mit diesem Tutorial fertig sind und die von Ihnen erstellte EC2 Instanz nicht mehr benötigen, sollten Sie die Instanz unbedingt beenden, um unerwünschte Kosten zu vermeiden. Sie können dies in der EC2Amazon-Konsole oder programmgesteuert tun, wie unter beschrieben. Beenden einer Amazon-Instance EC2 Wenn Sie möchten, können Sie auch andere Ressourcen löschen, die Sie für dieses Tutorial erstellt haben. Dazu können eine IAM Rolle, ein EC2 Schlüsselpaar und eine PEM Datei, eine Sicherheitsgruppe usw. gehören.