Example usage for com.amazonaws.services.ec2 AmazonEC2Client describeRouteTables

List of usage examples for com.amazonaws.services.ec2 AmazonEC2Client describeRouteTables

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2 AmazonEC2Client describeRouteTables.

Prototype

@Override
public DescribeRouteTablesResult describeRouteTables(DescribeRouteTablesRequest request) 

Source Link

Document

Describes one or more of your route tables.

Usage

From source file:org.zalando.stups.fullstop.plugin.SubnetPlugin.java

License:Apache License

@Override
public void processEvent(final CloudTrailEvent event) {
    List<String> subnetIds = newArrayList();
    List<Filter> SubnetIdFilters = newArrayList();
    DescribeInstancesRequest describeInstancesRequest = new DescribeInstancesRequest();
    List<String> instanceIds = getInstanceIds(event);
    AmazonEC2Client amazonEC2Client = cachingClientProvider.getClient(AmazonEC2Client.class,
            event.getEventData().getAccountId(),
            Region.getRegion(Regions.fromName(event.getEventData().getAwsRegion())));

    DescribeInstancesResult describeInstancesResult = null;
    try {/*  w  w w.  j  av a 2  s  .  c om*/
        describeInstancesResult = amazonEC2Client
                .describeInstances(describeInstancesRequest.withInstanceIds(instanceIds));
    } catch (AmazonServiceException e) {
        violationStore.save(new ViolationBuilder(e.getMessage()).withEvent(event).build());
        return;
    }

    List<Reservation> reservations = describeInstancesResult.getReservations();
    for (Reservation reservation : reservations) {
        List<Instance> instances = reservation.getInstances();
        subnetIds.addAll(instances.stream().map(Instance::getSubnetId).collect(Collectors.toList()));

    }

    SubnetIdFilters.add(new Filter().withName("association.subnet-id").withValues(subnetIds)); // filter by subnetId
    DescribeRouteTablesRequest describeRouteTablesRequest = new DescribeRouteTablesRequest()
            .withFilters(SubnetIdFilters);
    DescribeRouteTablesResult describeRouteTablesResult = amazonEC2Client
            .describeRouteTables(describeRouteTablesRequest);
    List<RouteTable> routeTables = describeRouteTablesResult.getRouteTables();
    if (routeTables == null || routeTables.size() == 0) {
        violationStore.save(new ViolationBuilder(
                format("Instances %s have no routing information associated", instanceIds.toString()))
                        .withEvent(event).build());
        return;
    }
    for (RouteTable routeTable : routeTables) {
        List<Route> routes = routeTable.getRoutes();
        routes.stream()
                .filter(route -> route.getState().equals("active") && route.getNetworkInterfaceId() != null
                        && !route.getNetworkInterfaceId().startsWith("eni"))
                .forEach(route -> violationStore.save(

                        new ViolationBuilder(format("ROUTES: instance %s is running in a public subnet %s",
                                route.getInstanceId(), route.getNetworkInterfaceId())).withEvent(event)
                                        .build()));
    }

}