2012-06-18 87 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類的一個實例。