创建 Amazon EC2 安全组 - Amazon SDK for Java 1.x
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

我们宣布了即将推出 end-of-support 的 Amazon SDK for Java (v1)。建议您迁移到 Amazon SDK for Java v2。有关日期、其他详细信息以及如何迁移的信息,请参阅链接的公告。

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

创建 Amazon EC2 安全组

警告

我们将于 2022 年 8 月 15 日停用 EC2-Classic。我们建议您从 EC2-Classic 迁移到 VPC。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南适用于 Windows 实例的 Amazon EC2 用户指南中的从 EC2-Classic 迁移到 VPC。另请参阅博客文章 EC2-Classic Networking is Retiring – Here's How to Prepare

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

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

有关使用 Amazon EC2 控制台创建安全组的更多信息,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的 Amazon EC2 安全组

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

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

    在您初始化 Amazon EC2 客户端的 Amazon 区域内,安全组名称必须是唯一的。必须为安全组的名称和描述使用 US-ASCII 字符。

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

    CreateSecurityGroupResult createSecurityGroupResult = amazonEC2Client.createSecurityGroup(csgr);

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

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

  1. 创建并初始化 IpPermission 实例。使用 withIpv4Ranges 方法可以设置授权传入的 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

只要调用 authorizeSecurityGroupIngressauthorizeSecurityGroupEgress 方法,一条规则就会添加到安全组中。