如何使用AWS java SDK列出安全组的规则

时间:2012-06-18 20:44:16

标签: java sdk amazon-web-services amazon

这里的动机是创建一种方法来查询我的AWS环境以获取配置转储,序列化它,然后再次运行查询以查看任何相关更改。

我有来自:

的群组标识符
    private List<String> getSecurityGroups(InstanceNetworkInterface netInt) {
    List<String> result = new Vector<String>();

    List<GroupIdentifier> groups = netInt.getGroups();
    for(GroupIdentifier gi : groups) {
        result.add(gi.getGroupName());
    }

    return result;
}

1 个答案:

答案 0 :(得分:1)

您可以在describeSecurityGroup客户端对象上获取AmazonEC2的安全组列表(在我的示例中,其实例名为ec2)。

public List<SecurityGroup> findAllSecurityGroups() {
    DescribeSecurityGroupsRequest securityRequest = new DescribeSecurityGroupsRequest();
    DescribeSecurityGroupsResult securityDescription = ec2.describeSecurityGroups(securityRequest);
    return securityDescription.getSecurityGroups();
}

在您securityGroup之后,您可以致电securityGroup.getIpPermissions(),这会为您提供List<IpPermission>

您可以查看Javadoc了解详情,尤其是IpPermission

为了给您一个想法,toString()表示允许通过任何IP在端口80上联系服务器的IpPermission规则如下:

{IpProtocol: tcp, FromPort: 80, ToPort: 80, IpRanges: [0.0.0.0/0], }

如果您只对特定安全组感兴趣,可以使用:

public SecurityGroup findOneSecurityGroupByName(String securityGroupName) {
    DescribeSecurityGroupsRequest securityRequest = new DescribeSecurityGroupsRequest();
    securityRequest.setGroupNames(Arrays.asList(securityGroupName));
    DescribeSecurityGroupsResult securityDescription = ec2.describeSecurityGroups(securityRequest);
    return securityDescription.getSecurityGroups().get(0);
}

一些基本的集成测试,应该适用于任何Amazon EC2帐户。

@Test
public void findsAllSecurityGroups() {
    assertThat(firewall.findAllSecurityGroups().size(), is(greaterThan(0)));
}

@Test
public void findsDefaultSecurityGroupByName() {
    SecurityGroup defaultGroup = firewall.findOneSecurityGroupByName("default");
    assertThat(defaultGroup.getGroupName(), is(equalTo("default")));
}

@Test(expected = AmazonServiceException.class)
public void throwsExceptionWhenfindingNonExistentSecurityGroup() {
    firewall.findOneSecurityGroupByName("inexistent");
}

其中firewall是包含findOneSecurityGroupByNamefindsAllSecurityGroups的类的实例。