这里的动机是创建一种方法来查询我的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;
}
答案 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
是包含findOneSecurityGroupByName
和findsAllSecurityGroups
的类的实例。