0

这里的动机是创建一种方法来查询我的 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;
}
4

1 回答 1

1

您可以在客户端对象(在我的示例中调用其实例)describeSecurityGroup上获取安全组列表。AmazonEC2ec2

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

一旦你有了 a securityGroup,你就可以调用securityGroup.getIpPermissions(),这会给你一个List<IpPermission>

您可以查看Javadoc以获取详细信息,尤其是有关IpPermission的信息。

为了给你一个想法,允许任何 IP 在端口 80 上联系服务器toString()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");
}

wherefirewall是包含findOneSecurityGroupByName和的类的实例findsAllSecurityGroups

于 2012-12-11T23:00:17.227 回答