自2024年7月31日起, AWS SDK for Java 1.x已进入维护模式,并将于2025年12月31日end-of-support
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
创建 Amazon EC2 安全组
警告
我们将于 2022 年 8 月 15 日退役 EC2 ——经典版。我们建议您从 EC2-Classic 迁移到。VPC欲了解更多信息,请参阅博客文章—— EC2Classic-Classic Networking 即将停用——以下是
创建安全组,该组充当虚拟防火墙,用于控制一个或多个EC2实例的网络流量。默认情况下, Amazon EC2 将您的实例与不允许入站流量的安全组关联。您可以创建一个允许您的EC2实例接受特定流量的安全组。例如,如果您需要连接到 Linux 实例,则必须将安全组配置为允许SSH流量。您可以使用 Amazon EC2 控制台或创建安全组 AWS SDK for Java。
您可以创建一个用于 EC2-Classic 或 EC2-VPC 的安全组。有关 EC2-Classic 和 EC2-的更多信息VPC,请参阅 Linux 实例 Amazon EC2 用户指南中的支持的平台。
有关使用 Amazon EC2 控制台创建安全组的更多信息,请参阅 Linux 实例 Amazon EC2 用户指南中的Amazon EC2 安全组。
-
创建并初始化CreateSecurityGroupRequest实例。使用withGroupName方法设置安全组名称,使用withDescription方法设置安全组描述,如下所示:
CreateSecurityGroupRequest csgr = new CreateSecurityGroupRequest(); csgr.withGroupName("JavaSecurityGroup").withDescription("My security group");
安全组名称在您初始化 Amazon EC2 客户端的 AWS 区域内必须是唯一的。安全组名称和描述必须使用美国字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
,该方法引发异常。在调AuthorizeSecurityGroupIngress
用之前,创建并初始化一个新IpPermission
对象以授权不同IPs端口和协议的入口。
每当您调用 authorizeSecurityGroupIngress 或 authorizeSecurityGroupEgres s 方法时,都会向您的安全组添加一条规则。