如何使用AWS java SDK列出安全组的规则

p5fdfcr1  于 2023-02-28  发布在  Java
关注(0)|答案(1)|浏览(184)

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

xwbd5t1u1#

您可以在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()表示允许任何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);
}

一些基本的集成测试,应该在任何亚马逊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的类的示例。

相关问题