From c61b810bbc878fa8e1f2cf541002518d278e4b29 Mon Sep 17 00:00:00 2001 From: n0mad1k Date: Thu, 8 May 2025 16:34:49 -0400 Subject: [PATCH] working on aws again --- AWS/cleanup.yml | 81 ++++++++++++++++++++++++++++++++++++++++----- AWS/process_vpc.yml | 72 +++++++++++++++++++++++++++++++--------- AWS/redirector.yml | 8 ++++- 3 files changed, 135 insertions(+), 26 deletions(-) diff --git a/AWS/cleanup.yml b/AWS/cleanup.yml index 34274e4..d6dddd8 100644 --- a/AWS/cleanup.yml +++ b/AWS/cleanup.yml @@ -10,6 +10,7 @@ vars: delete_results: {} vpc_cleanup_list: [] + aws_detailed_logging: true tasks: # Confirmation prompts @@ -25,6 +26,12 @@ fail_msg: "Cleanup cancelled by user" when: confirm_cleanup | default(true) | bool + # Display AWS region being used for cleanup + - name: Display AWS region being used for cleanup + debug: + msg: "Cleaning up resources in region: {{ aws_region }}" + when: aws_detailed_logging | bool + # Check for and load shared infrastructure file - name: Check for shared infrastructure state stat: @@ -101,8 +108,23 @@ (cleanup_redirector | default(true) | bool and redirector_instances_result.changed | default(false)) or (cleanup_tracker | default(true) | bool and track_deployment | default(false) | bool and tracker_instances_result.changed | default(false)) - # Key pair cleanup - - name: Delete C2 EC2 key pair + # List all key pairs to handle different naming patterns + - name: List available EC2 key pairs + amazon.aws.ec2_key_info: + region: "{{ aws_region }}" + register: all_key_pairs + + # Delete C2 deployment key with deployment_id pattern + - name: Delete C2 deployment key (deployment_id pattern) + amazon.aws.ec2_key: + name: "c2deploy_{{ deployment_id }}" + region: "{{ aws_region }}" + state: absent + register: c2_deploy_key_result + when: cleanup_c2 | default(true) | bool + + # Delete C2 EC2 key pair (original pattern) + - name: Delete C2 EC2 key pair (original pattern) amazon.aws.ec2_key: name: "{{ c2_name }}" region: "{{ aws_region }}" @@ -110,11 +132,16 @@ register: c2_key_result when: cleanup_c2 | default(true) | bool + # Update cleaned key pairs list for C2 - name: Update cleaned key pairs list for C2 set_fact: - cleaned_resources: "{{ cleaned_resources | combine({'key_pairs': cleaned_resources.key_pairs + [c2_name]}, recursive=true) }}" - when: cleanup_c2 | default(true) | bool and c2_key_result.changed | default(false) + cleaned_resources: "{{ cleaned_resources | combine({'key_pairs': cleaned_resources.key_pairs + [item]}, recursive=true) }}" + with_items: + - "c2deploy_{{ deployment_id }}" + - "{{ c2_name }}" + when: cleanup_c2 | default(true) | bool and (c2_key_result.changed or c2_deploy_key_result.changed) + # Delete redirector EC2 key pair - name: Delete redirector EC2 key pair amazon.aws.ec2_key: name: "{{ redirector_name }}" @@ -141,7 +168,7 @@ cleaned_resources: "{{ cleaned_resources | combine({'key_pairs': cleaned_resources.key_pairs + [tracker_name | default('t-' + deployment_id)]}, recursive=true) }}" when: cleanup_tracker | default(true) | bool and track_deployment | default(false) | bool and tracker_key_result.changed | default(false) - # Security group cleanup + # Security group cleanup - name: Delete C2 security group amazon.aws.ec2_security_group: name: "{{ c2_name }}-sg" @@ -184,7 +211,7 @@ cleaned_resources: "{{ cleaned_resources | combine({'security_groups': cleaned_resources.security_groups + [tracker_sg_result.group_id | default('')]}, recursive=true) }}" when: cleanup_tracker | default(true) | bool and track_deployment | default(false) | bool and tracker_sg_result.changed | default(false) and tracker_sg_result.group_id is defined - # Identify VPCs to clean up + # Identify VPCs to clean up (by tag and by name pattern) - name: Get VPCs by deployment tag amazon.aws.ec2_vpc_net_info: region: "{{ aws_region }}" @@ -198,6 +225,36 @@ with_items: "{{ tagged_vpcs.vpcs }}" when: tagged_vpcs.vpcs | length > 0 + # Find VPCs by name pattern + - name: Find VPCs by naming pattern for C2 + amazon.aws.ec2_vpc_net_info: + region: "{{ aws_region }}" + filters: + "tag:Name": "{{ c2_name }}-vpc" + register: c2_named_vpcs + when: cleanup_c2 | default(true) | bool + + - name: Add C2-named VPCs to cleanup list + set_fact: + vpc_cleanup_list: "{{ vpc_cleanup_list + [item.vpc_id] }}" + with_items: "{{ c2_named_vpcs.vpcs }}" + when: cleanup_c2 | default(true) | bool and c2_named_vpcs.vpcs | length > 0 + + - name: Find VPCs by naming pattern for redirector + amazon.aws.ec2_vpc_net_info: + region: "{{ aws_region }}" + filters: + "tag:Name": "{{ redirector_name }}-vpc" + register: redirector_named_vpcs + when: cleanup_redirector | default(true) | bool + + - name: Add redirector-named VPCs to cleanup list + set_fact: + vpc_cleanup_list: "{{ vpc_cleanup_list + [item.vpc_id] }}" + with_items: "{{ redirector_named_vpcs.vpcs }}" + when: cleanup_redirector | default(true) | bool and redirector_named_vpcs.vpcs | length > 0 + + # Handle shared infrastructure - name: Add shared VPC to cleanup if both C2 and redirector being cleaned set_fact: vpc_cleanup_list: "{{ vpc_cleanup_list + [shared_infra.vpc_id] }}" @@ -213,11 +270,17 @@ vpc_cleanup_list: "{{ vpc_cleanup_list | unique }}" when: vpc_cleanup_list | length > 0 - # Process each VPC - direct inline implementation instead of temporary files + # Display VPCs to be cleaned up + - name: Display VPCs to be cleaned + debug: + msg: "VPCs to be cleaned: {{ vpc_cleanup_list }}" + when: aws_detailed_logging | bool and vpc_cleanup_list | length > 0 + + # Process each VPC - name: Process VPCs for cleanup block: - name: Process each VPC - include_tasks: "../tasks/process_vpc.yml" + include_tasks: "process_vpc.yml" vars: vpc_id: "{{ item }}" with_items: "{{ vpc_cleanup_list | unique }}" @@ -245,7 +308,7 @@ redirector: "{{ redirector_instances_result.instance_ids | default([]) }}" tracker: "{{ tracker_instances_result.instance_ids | default([]) }}" key_pairs: - c2: "{{ c2_key_result.key.name | default('') | ternary([c2_key_result.key.name], []) }}" + c2: "{{ cleaned_resources.key_pairs | default([]) | select('search', 'c2deploy_' + deployment_id) | list + cleaned_resources.key_pairs | default([]) | select('search', c2_name) | list }}" redirector: "{{ redirector_key_result.key.name | default('') | ternary([redirector_key_result.key.name], []) }}" tracker: "{{ tracker_key_result.key.name | default('') | ternary([tracker_key_result.key.name], []) }}" security_groups: diff --git a/AWS/process_vpc.yml b/AWS/process_vpc.yml index d71186d..a7e6959 100644 --- a/AWS/process_vpc.yml +++ b/AWS/process_vpc.yml @@ -1,5 +1,5 @@ --- -# VPC Cleanup Process +# VPC Cleanup Process with enhanced dependency handling # Step 1: Network Interfaces - name: Find network interfaces in VPC {{ vpc_id }} amazon.aws.ec2_eni_info: @@ -21,10 +21,9 @@ ignore_errors: yes when: eni_info.network_interfaces | length > 0 -- name: Update cleaned network interfaces - set_fact: - cleaned_resources: "{{ cleaned_resources | combine({'network_interfaces': cleaned_resources.network_interfaces + [item.id]}, recursive=True) }}" - with_items: "{{ eni_info.network_interfaces }}" +- name: Wait after deleting network interfaces + pause: + seconds: 10 when: eni_info.network_interfaces | length > 0 # Step 2: Route Tables @@ -57,6 +56,11 @@ with_items: "{{ rt_info.route_tables }}" when: not item.associations or not item.associations[0].main | default(false) +- name: Wait after deleting route tables + pause: + seconds: 10 + when: rt_info.route_tables | length > 0 + # Step 3: Internet Gateways - name: Find internet gateways for VPC {{ vpc_id }} amazon.aws.ec2_vpc_igw_info: @@ -78,6 +82,11 @@ register: igw_detached ignore_errors: yes + - name: Wait after detaching IGW + pause: + seconds: 15 + when: igw_detached is changed + - name: Delete internet gateways amazon.aws.ec2_vpc_igw: region: "{{ aws_region }}" @@ -119,6 +128,11 @@ with_items: "{{ subnet_info.subnets }}" when: subnet_info.subnets | length > 0 +- name: Wait after deleting subnets + pause: + seconds: 15 + when: subnet_info.subnets | length > 0 + # Step 5: Security Groups (except default) - name: Find non-default security groups for VPC {{ vpc_id }} amazon.aws.ec2_security_group_info: @@ -145,20 +159,46 @@ with_items: "{{ sg_info.security_groups }}" when: item.group_name != 'default' -# Step 6: Wait a bit and delete VPC -- name: Wait before trying to delete VPC +- name: Wait after deleting security groups pause: - seconds: 10 + seconds: 15 + when: sg_info.security_groups | length > 0 -- name: Delete VPC {{ vpc_id }} - amazon.aws.ec2_vpc_net: - region: "{{ aws_region }}" - vpc_id: "{{ vpc_id }}" - state: absent - register: deleted_vpc - ignore_errors: true +# Step 6: Delete VPC with proper dependencies and retries +- name: Wait longer before trying to delete VPC + pause: + seconds: 30 + +- name: Delete VPC with retries + block: + - name: Delete VPC {{ vpc_id }} + amazon.aws.ec2_vpc_net: + region: "{{ aws_region }}" + vpc_id: "{{ vpc_id }}" + state: absent + register: vpc_delete_result + retries: 5 + delay: 15 + until: vpc_delete_result is success + rescue: + - name: Force check dependencies again if VPC deletion failed + amazon.aws.ec2_vpc_net_info: + region: "{{ aws_region }}" + vpc_ids: + - "{{ vpc_id }}" + register: vpc_check + + - name: Final attempt to delete VPC if it still exists + amazon.aws.ec2_vpc_net: + region: "{{ aws_region }}" + vpc_id: "{{ vpc_id }}" + state: absent + when: vpc_check.vpcs | length > 0 + ignore_errors: true + register: final_vpc_delete - name: Update cleaned VPCs set_fact: cleaned_resources: "{{ cleaned_resources | combine({'vpcs': cleaned_resources.vpcs + [vpc_id]}, recursive=True) }}" - when: deleted_vpc is success \ No newline at end of file + when: (vpc_delete_result is defined and vpc_delete_result is success) or + (final_vpc_delete is defined and final_vpc_delete is success) \ No newline at end of file diff --git a/AWS/redirector.yml b/AWS/redirector.yml index 3cef292..49bd25e 100644 --- a/AWS/redirector.yml +++ b/AWS/redirector.yml @@ -148,6 +148,12 @@ redirector_vpc_id: "{{ vpc_result.vpc.id }}" # Store for cleanup reference when: not (use_shared_infra | bool and infra_state_file.stat.exists | default(false)) + # Set a random shell handler port if not defined + - name: Set random shell handler port if not defined + set_fact: + shell_handler_port: "{{ 4000 + 59000 | random }}" + when: shell_handler_port is not defined + # Create security group - name: Create security group amazon.aws.ec2_security_group: @@ -161,7 +167,7 @@ - 22 - 80 - 443 - - "{{ shell_handler_port | default(4444) }}" + - "{{ shell_handler_port }}" cidr_ip: 0.0.0.0/0 rules_egress: - proto: -1