创建 Amazon EC2 安全组 - AWS SDK for Java

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建 Amazon EC2 安全组

警告

我们将于 2022 年 8 月 15 日停用 EC2-Classic。我们建议您从 EC2-Classic 迁移到 VPC。有关更多信息,请参阅 。从 EC2-Classic 迁移到 VPC中的适用于 Linux 实例的Amazon EC2 用户指南或者Windows 实例的 Amazon EC2 用户指南. 另请参阅博客帖子EC2-Classic Retworking is Retere's Retwore's.

创建一个安全组作为虚拟防火墙,控制一个或多个 EC2 实例的网络流量。默认情况下,Amazon EC2 将您的实例与不允许入站流量的安全组关联。可以创建允许您的 EC2 实例接受特定流量的安全组。例如,如果需要连接到 Linux 实例,就必须将安全组配置为允许 SSH 流量。您可以使用 Amazon EC2 控制台或AWS SDK for Java创建安全组。

您可以创建在 EC2-Classic 或 EC2-VPC 中使用的安全组。有关 EC2-Classic 和 EC2-VPC 的更多信息,请参阅支持的平台中的Amazon EC2用户指南(适用于 Linux 实例)。

有关使用Amazon EC2控制台,请参阅Amazon EC2个安全组中的Amazon EC2用户指南(适用于 Linux 实例)。

  1. 创建并初始化CreateSecurityGroupRequest实例。使用withGroupName方法来设置安全组名称,withDescription方法设置安全组的描述,如下所示:

    CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest(); csgr.withGroupName("JavaSecurityGroup").withDescription("My security group");

    安全组名称在AWS在其中初始化Amazon EC2客户端。必须为安全组的名称和描述使用 US-ASCII 字符。

  2. 将请求对象作为参数传递给createSecurityGroup方法。则该方法返回CreateSecurityGroupResult对象,如下所示:

    CreateSecurityGroupResult createSecurityGroupResult = amazonEC2Client.createSecurityGroup(csgr);

    如果您尝试创建与现有安全组具有相同名称的安全组,createSecurityGroup 引发异常。

默认情况下,新安全组不允许 Amazon EC2 实例的任何入站流量。要允许入站流量,您必须对安全组传入明确地授权。您可以对单个 IP 地址、IP 地址范围、特定协议以及 TCP/UDP 端口的传入进行授权。

  1. 创建并初始化IpPermission实例。使用使用 IPv4 范围方法设置授权传入的 IP 地址范围,使用withIpProtocol方法来设置 IP 协议。使用withFromPortwithToPort方法可以指定授权传入的端口范围,如下所示:

    IpPermission ipPermission = new IpPermission(); IpRange ipRange1 = new IpRange().withCidrIp("111.111.111.111/32"); IpRange ipRange2 = new IpRange().withCidrIp("150.150.150.150/32"); ipPermission.withIpv4Ranges(Arrays.asList(new IpRange[] {ipRange1, ipRange2})) .withIpProtocol("tcp") .withFromPort(22) .withToPort(22);

    必须满足在 IpPermission 对象中指定的所有条件,才能允许传入。

    使用 CIDR 表示法指定 IP 地址。如果指定 TCP/UDP 协议,必须提供源端口和目标端口。仅在指定 TCP 或 UDP 时才能授权端口。

  2. 创建并初始化AuthorizeSecurityGroupIngressRequest实例。使用withGroupName方法指定安全组名称,并传递IpPermission你之前初始化为withIpPermissions方法,如下所示:

    AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest = new AuthorizeSecurityGroupIngressRequest(); authorizeSecurityGroupIngressRequest.withGroupName("JavaSecurityGroup") .withIpPermissions(ipPermission);
  3. 将请求对象传递给authorizeSecurityGroupIngress方法,如下所示:

    amazonEC2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);

    如果您使用已授权传入的 IP 地址调用 authorizeSecurityGroupIngress,该方法引发异常。创建和初始化新的 IpPermission 对象,对不同 IP、端口和协议授权传入,然后调用 AuthorizeSecurityGroupIngress

每当你打电话给authorizeSecurityGroupIngress要么authorizeSecurityGroupEgress方法,一条规则就会添加到安全组中。