创建 Amazon EC2 安全组 - 适用于 Java 的 AWS 开发工具包
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

创建 Amazon EC2 安全组

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

您可以创建在 EC2-Classic 或 EC2-VPC 中使用的安全组。有关 EC2-Classic 和 EC2-VPC 的更多信息,请参阅 Amazon EC2 User Guide for Linux Instances中的支持的平台

有关使用 Amazon EC2 控制台创建安全组的更多信息,请参阅 Amazon EC2 User Guide for Linux Instances 中的 Amazon EC2 安全组

创建安全组

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

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

    在您初始化 Amazon EC2 客户端的 AWS 区域内,安全组名称必须是唯一的。必须为安全组的名称和描述使用 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 对象以授权不同 IPs、端口和协议的传入,然后再调用 AuthorizeSecurityGroupIngress

每当您调用 authorizeSecurityGroupIngress 或 authorizeSecurityGroupEgress 方法时,系统会向您的安全组添加一个规则。