我们宣布
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 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 安全组。
-
创建和初始化 CreateSecurityGroupRequest 实例。使用 withGroupName 方法设置安全组名称,使用 withDescription 方法设置安全组的描述,如下所示:
CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest(); csgr.withGroupName("JavaSecurityGroup").withDescription("My security group");
在您初始化 Amazon EC2 客户端的 Amazon 区域内,安全组名称必须是唯一的。必须为安全组的名称和描述使用 US-ASCII 字符。
-
将请求对象作为参数传递给 createSecurityGroup 方法。该方法返回 CreateSecurityGroupResult 对象,如下所示:
CreateSecurityGroupResult createSecurityGroupResult = amazonEC2Client.createSecurityGroup(csgr);
如果您尝试创建与现有安全组具有相同名称的安全组,
createSecurityGroup
引发异常。
默认情况下,新安全组不允许 Amazon EC2 实例的任何入站流量。要允许入站流量,您必须对安全组传入明确地授权。您可以对单个 IP 地址、IP 地址范围、特定协议以及 TCP/UDP 端口的传入进行授权。
-
创建并初始化 IpPermission 实例。使用 withIpv4Ranges 方法可以设置授权传入的 IP 地址范围,使用 withIpProtocol 方法可以设置 IP 协议。使用 withFromPort 和 withToPort 方法可以指定授权传入的端口范围,如下所示:
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 时才能授权端口。
-
创建和初始化 AuthorizeSecurityGroupIngressRequest 实例。使用
withGroupName
方法指定安全组名称,并将之前初始化的IpPermission
对象传递给 withIpPermissions 方法,如下所示:AuthorizeSecurityGroupIngressRequest authorizeSecurityGroupIngressRequest = new AuthorizeSecurityGroupIngressRequest(); authorizeSecurityGroupIngressRequest.withGroupName("JavaSecurityGroup") .withIpPermissions(ipPermission);
-
将请求对象传递给 authorizeSecurityGroupIngress 方法,如下所示:
amazonEC2Client.authorizeSecurityGroupIngress(authorizeSecurityGroupIngressRequest);
如果您使用已授权传入的 IP 地址调用
authorizeSecurityGroupIngress
,该方法引发异常。创建和初始化新的IpPermission
对象,对不同 IP、端口和协议授权传入,然后调用AuthorizeSecurityGroupIngress
。
只要调用 authorizeSecurityGroupIngress 或 authorizeSecurityGroupEgress 方法,一条规则就会添加到安全组中。