Sicherheitsgruppen werden aktualisiert - 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.

Sicherheitsgruppen werden aktualisiert

Dieses Beispiel zeigt Ihnen, wie Sie AWS SDK for .NET mit dem einer Sicherheitsgruppe eine Regel hinzufügen können. Insbesondere fügt das Beispiel eine Regel hinzu, die eingehenden Datenverkehr an einem bestimmten TCP-Port zulässt, was beispielsweise für Remoteverbindungen zu einer EC2-Instance verwendet werden kann. Die Anwendung verwendet die ID einer vorhandenen Sicherheitsgruppe, eine IP-Adresse (oder einen Adressbereich) im CIDR-Format und optional eine TCP-Portnummer. Anschließend fügt sie der angegebenen Sicherheitsgruppe eine Regel für eingehenden Datenverkehr hinzu.

Anmerkung

Um dieses Beispiel verwenden zu können, benötigen Sie eine IP-Adresse (oder einen Adressbereich) im CIDR-Format. Methoden zum Abrufen der IP-Adresse Ihres lokalen Computers finden Sie unter Zusätzliche Überlegungen am Ende dieses Themas.

Die folgenden Abschnitte enthalten Auszüge aus diesem Beispiel. Der vollständige Code für das Beispiel wird danach angezeigt und kann unverändert erstellt und ausgeführt werden.

Fügen Sie eine Regel für eingehenden Datenverkehr hinzu

Das folgende Snippet fügt einer Sicherheitsgruppe eine Regel für eingehenden Datenverkehr für eine bestimmte IP-Adresse (oder einen bestimmten Bereich) und einen bestimmten TCP-Port hinzu.

Das Beispiel am Ende dieses Themas zeigt, wie dieser Codeausschnitt verwendet wird.

// // Method that adds a TCP ingress rule to a security group private static async Task AddIngressRule( IAmazonEC2 eC2Client, string groupID, string ipAddress, int port) { // Create an object to hold the request information for the rule. // It uses an IpPermission object to hold the IP information for the rule. var ingressRequest = new AuthorizeSecurityGroupIngressRequest{ GroupId = groupID}; ingressRequest.IpPermissions.Add(new IpPermission{ IpProtocol = "tcp", FromPort = port, ToPort = port, Ipv4Ranges = new List<IpRange>() { new IpRange { CidrIp = ipAddress } } }); // Create the inbound rule for the security group AuthorizeSecurityGroupIngressResponse responseIngress = await eC2Client.AuthorizeSecurityGroupIngressAsync(ingressRequest); Console.WriteLine($"\nNew RDP rule was written in {groupID} for {ipAddress}."); Console.WriteLine($"Result: {responseIngress.HttpStatusCode}"); }

Vollständiger Code

Dieser Abschnitt enthält relevante Referenzen und den vollständigen Code für dieses Beispiel.

using System; using System.Threading.Tasks; using System.Collections.Generic; using Amazon.EC2; using Amazon.EC2.Model; namespace EC2AddRuleForRDP { // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // Class to add a rule that allows inbound traffic on TCP a port class Program { private const int DefaultPort = 3389; 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 var groupID = CommandLine.GetArgument(parsedArgs, null, "-g", "--group-id"); var ipAddress = CommandLine.GetArgument(parsedArgs, null, "-i", "--ip-address"); var portStr = CommandLine.GetArgument(parsedArgs, DefaultPort.ToString(), "-p", "--port"); if(string.IsNullOrEmpty(ipAddress)) CommandLine.ErrorExit("\nYou must supply an IP address in CIDR format."); if(string.IsNullOrEmpty(groupID) || !groupID.StartsWith("sg-")) CommandLine.ErrorExit("\nThe ID for a security group is missing or incorrect."); if(int.Parse(portStr) == 0) CommandLine.ErrorExit($"\nThe given TCP port number, {portStr}, isn't allowed."); // Add a rule to the given security group that allows // inbound traffic on a TCP port await AddIngressRule( new AmazonEC2Client(), groupID, ipAddress, int.Parse(portStr)); } // // Method that adds a TCP ingress rule to a security group private static async Task AddIngressRule( IAmazonEC2 eC2Client, string groupID, string ipAddress, int port) { // Create an object to hold the request information for the rule. // It uses an IpPermission object to hold the IP information for the rule. var ingressRequest = new AuthorizeSecurityGroupIngressRequest{ GroupId = groupID}; ingressRequest.IpPermissions.Add(new IpPermission{ IpProtocol = "tcp", FromPort = port, ToPort = port, Ipv4Ranges = new List<IpRange>() { new IpRange { CidrIp = ipAddress } } }); // Create the inbound rule for the security group AuthorizeSecurityGroupIngressResponse responseIngress = await eC2Client.AuthorizeSecurityGroupIngressAsync(ingressRequest); Console.WriteLine($"\nNew RDP rule was written in {groupID} for {ipAddress}."); Console.WriteLine($"Result: {responseIngress.HttpStatusCode}"); } // // Command-line help private static void PrintHelp() { Console.WriteLine( "\nUsage: EC2AddRuleForRDP -g <group-id> -i <ip-address> [-p <port>]" + "\n -g, --group-id: The ID of the security group to which you want to add the inbound rule." + "\n -i, --ip-address: An IP address or address range in CIDR format." + "\n -p, --port: The TCP port number. Defaults to 3389."); } } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // 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); } } }

Weitere Überlegungen

  • Wenn Sie keine Portnummer angeben, verwendet die Anwendung standardmäßig Port 3389. Dies ist der Port für Windows RDP, über den Sie eine Verbindung zu einer EC2-Instance herstellen können, auf der Windows ausgeführt wird. Wenn Sie eine EC2-Instance starten, auf der Linux ausgeführt wird, können Sie stattdessen TCP-Port 22 (SSH) verwenden.

  • Beachten Sie, dass das Beispiel IpProtocol auf „tcp“ gesetzt ist. Die Werte für IpProtocol finden Sie in der Beschreibung der IpProtocol Eigenschaft der IpPermissionKlasse.

  • Wenn Sie dieses Beispiel verwenden, benötigen Sie möglicherweise die IP-Adresse Ihres lokalen Computers. Im Folgenden sind einige Möglichkeiten aufgeführt, wie Sie die Adresse abrufen können.

    • Wenn Ihr lokaler Computer (von dem aus Sie eine Verbindung zu Ihrer EC2-Instance herstellen) über eine statische öffentliche IP-Adresse verfügt, können Sie einen Dienst verwenden, um diese Adresse abzurufen. Ein solcher Dienst ist http://checkip.amazonaws.com/. Weitere Informationen zur Autorisierung von eingehendem Datenverkehr finden Sie unter Hinzufügen von Regeln zu einer Sicherheitsgruppe und Sicherheitsgruppenregeln für verschiedene Anwendungsfälle im Amazon EC2 EC2-Benutzerhandbuch.

    • Eine andere Möglichkeit, die IP-Adresse Ihres lokalen Computers zu erhalten, ist die Verwendung der Amazon EC2 EC2-Konsole.

      Wählen Sie eine Ihrer Sicherheitsgruppen aus, klicken Sie auf die Registerkarte Regeln für eingehenden Datenverkehr und dann auf Regeln für eingehenden Datenverkehr bearbeiten. Öffnen Sie in einer Regel für eingehenden Datenverkehr das Dropdownmenü in der Spalte Quelle und wählen Sie Meine IP aus, um die IP-Adresse Ihres lokalen Computers im CIDR-Format anzuzeigen. Achten Sie darauf, den Vorgang abzubrechen.

  • Sie können die Ergebnisse dieses Beispiels überprüfen, indem Sie die Liste der Sicherheitsgruppen in der Amazon EC2 EC2-Konsole überprüfen.