这里的动机是创建一种方法来查询我的 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;
}
最佳答案
您可以通过 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()
IpPermission
的表示允许任何 IP 在端口 80 上联系服务器的规则如下:
{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
.
关于java - 如何使用 AWS java SDK 列出安全组的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11090734/