2012-06-18 30 views
0

这里的动机是创建一种方法来查询我的AWS环境以获取配置转储,将其序列化,然后能够再次运行查询以查看任何相关的变化。如何使用AWS Java SDK列出安全组的规则

我这一组标识符从:

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

您可以将AmazonEC2客户端对象(其实例在我的例子被称为ec2)与describeSecurityGroup获得安全组列表。

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

一旦你一个securityGroup,你可以调用securityGroup.getIpPermissions(),它给你一个List<IpPermission>

您可以查看Javadoc了解详情,特别是关于IpPermission

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

{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类的一个实例。