List of usage examples for com.amazonaws.services.ec2 AmazonEC2Client describeRouteTables
@Override
public DescribeRouteTablesResult describeRouteTables(DescribeRouteTablesRequest request)
Describes one or more of your route tables.
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())); } }