still working on aws

This commit is contained in:
n0mad1k
2025-05-02 12:06:09 -04:00
parent a86f9a9d25
commit f6d08e84eb
5 changed files with 510 additions and 239 deletions
+88 -125
View File
@@ -1,6 +1,5 @@
---
# AWS Cleanup Playbook
# Used to tear down AWS infrastructure
# AWS Cleanup Playbook (Fixed)
- name: Clean up AWS infrastructure
hosts: localhost
@@ -13,6 +12,16 @@
cleanup_redirector: "{{ (redirector_name is defined and redirector_name != '') | ternary(true, false) }}"
cleanup_c2: "{{ (c2_name is defined and c2_name != '') | ternary(true, false) }}"
confirm_cleanup: "{{ confirm_cleanup | default(true) }}"
delay_seconds: 30
# Initialize cleaned resources list
cleaned_resources:
instances: []
security_groups: []
key_pairs: []
internet_gateways: []
subnets: []
route_tables: []
vpcs: []
tasks:
- name: Validate required AWS credentials
@@ -32,7 +41,7 @@
meta: end_play
when: confirm_cleanup and confirmation.user_input != 'yes'
# Find instance IDs for cleanup
# Find EC2 instances
- name: Find redirector instance ID
command: >
aws ec2 describe-instances
@@ -66,125 +75,24 @@
- name: Set instance IDs as facts
set_fact:
redirector_instance_id: "{{ redirector_id_result.stdout | trim }}"
cleaned_resources: "{{ cleaned_resources | combine({'instances': cleaned_resources.instances + [redirector_id_result.stdout | trim]}, recursive=True) }}"
when: cleanup_redirector and redirector_id_result.stdout is defined and redirector_id_result.stdout | trim != ""
- name: Set C2 instance ID as fact
set_fact:
c2_instance_id: "{{ c2_id_result.stdout | trim }}"
cleaned_resources: "{{ cleaned_resources | combine({'instances': cleaned_resources.instances + [c2_id_result.stdout | trim]}, recursive=True) }}"
when: cleanup_c2 and c2_id_result.stdout is defined and c2_id_result.stdout | trim != ""
# Find VPCs with specific redirector tag
- name: Find VPCs with specific redirector tag
amazon.aws.ec2_vpc_net_info:
region: "{{ aws_region }}"
filters:
"tag:redirector_name": "{{ redirector_name }}"
register: tagged_vpcs_info
when: cleanup_redirector | default(false) | bool
- name: Display matched VPCs for cleanup
debug:
msg: "Found {{ tagged_vpcs_info.vpcs | default([]) | length }} VPCs with tag redirector_name={{ redirector_name }} to clean up"
when: cleanup_redirector | default(false) | bool and tagged_vpcs_info is defined
- name: Clean up each VPC and its dependencies
block:
- name: Get all subnets for target VPC
amazon.aws.ec2_vpc_subnet_info:
filters:
vpc-id: "{{ item.id }}"
"tag:redirector_name": "{{ redirector_name }}"
region: "{{ aws_region }}"
register: vpc_subnets
with_items: "{{ tagged_vpcs_info.vpcs }}"
- name: Get all internet gateways for target VPC
amazon.aws.ec2_vpc_igw_info:
filters:
attachment.vpc-id: "{{ item.id }}"
region: "{{ aws_region }}"
register: vpc_igws
with_items: "{{ tagged_vpcs_info.vpcs }}"
- name: Get all route tables for target VPC
amazon.aws.ec2_vpc_route_table_info:
filters:
vpc-id: "{{ item.id }}"
"tag:redirector_name": "{{ redirector_name }}"
region: "{{ aws_region }}"
register: vpc_route_tables
with_items: "{{ tagged_vpcs_info.vpcs }}"
- name: Get security groups for target VPC
amazon.aws.ec2_security_group_info:
filters:
vpc-id: "{{ item.id }}"
group-name: "{{ redirector_name }}-sg"
region: "{{ aws_region }}"
register: vpc_security_groups
with_items: "{{ tagged_vpcs_info.vpcs }}"
# Start deleting resources in proper dependency order
- name: Delete non-main route tables
amazon.aws.ec2_vpc_route_table:
route_table_id: "{{ item.route_table_id }}"
region: "{{ aws_region }}"
state: absent
loop: "{{ vpc_route_tables.results | map(attribute='route_tables') | flatten | selectattr('associations', 'defined') | list }}"
ignore_errors: yes
- name: Detach internet gateways
shell: >
aws ec2 detach-internet-gateway
--region {{ aws_region }}
--internet-gateway-id {{ item.internet_gateway_id }}
--vpc-id {{ item.attachments[0].vpc_id }}
environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
loop: "{{ vpc_igws.results | map(attribute='internet_gateways') | flatten | selectattr('attachments', 'defined') | list }}"
ignore_errors: yes
- name: Delete internet gateways
amazon.aws.ec2_vpc_igw:
igw_id: "{{ item.internet_gateway_id }}"
region: "{{ aws_region }}"
state: absent
loop: "{{ vpc_igws.results | map(attribute='internet_gateways') | flatten | list }}"
ignore_errors: yes
- name: Delete subnets
amazon.aws.ec2_vpc_subnet:
subnet_id: "{{ item.subnet_id }}"
region: "{{ aws_region }}"
state: absent
loop: "{{ vpc_subnets.results | map(attribute='subnets') | flatten | list }}"
ignore_errors: yes
- name: Delete security groups
amazon.aws.ec2_security_group:
group_id: "{{ item.group_id }}"
region: "{{ aws_region }}"
state: absent
loop: "{{ vpc_security_groups.results | map(attribute='security_groups') | flatten | list }}"
ignore_errors: yes
- name: Delete VPCs
amazon.aws.ec2_vpc_net:
vpc_id: "{{ item.id }}"
region: "{{ aws_region }}"
state: absent
loop: "{{ tagged_vpcs_info.vpcs }}"
ignore_errors: yes
when: cleanup_redirector | bool and tagged_vpcs_info is defined and tagged_vpcs_info.vpcs | default([]) | length > 0
# Instance, security group, and key pair cleanup
# Terminate EC2 instances
- name: Terminate redirector instance
amazon.aws.ec2_instance:
state: absent
instance_ids:
- "{{ redirector_instance_id }}"
region: "{{ aws_region }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
when: cleanup_redirector and redirector_instance_id is defined and redirector_instance_id != ""
register: redirector_termination
@@ -194,6 +102,8 @@
instance_ids:
- "{{ c2_instance_id }}"
region: "{{ aws_region }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
when: cleanup_c2 and c2_instance_id is defined and c2_instance_id != ""
register: c2_termination
@@ -204,36 +114,83 @@
- (redirector_termination is defined and redirector_termination.changed) or
(c2_termination is defined and c2_termination.changed)
- name: Delete redirector security group
amazon.aws.ec2_group:
name: "{{ redirector_name }}-sg"
state: absent
region: "{{ aws_region }}"
ignore_errors: yes
when: cleanup_redirector and redirector_name is defined and redirector_name != ""
# Find VPCs
- name: Find VPCs by redirector name
command: >
aws ec2 describe-vpcs
--filters "Name=tag:Name,Values=*{{ redirector_name }}*"
--query "Vpcs[].VpcId"
--output text
--region {{ aws_region }}
environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
register: redirector_vpcs
failed_when: false
changed_when: false
when: cleanup_redirector
- name: Delete C2 security group
amazon.aws.ec2_group:
name: "{{ c2_name }}-sg"
state: absent
region: "{{ aws_region }}"
ignore_errors: yes
when: cleanup_c2 and c2_name is defined and c2_name != ""
- name: Find VPCs by C2 name
command: >
aws ec2 describe-vpcs
--filters "Name=tag:Name,Values=*{{ c2_name }}*"
--query "Vpcs[].VpcId"
--output text
--region {{ aws_region }}
environment:
AWS_ACCESS_KEY_ID: "{{ aws_access_key }}"
AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}"
register: c2_vpcs
failed_when: false
changed_when: false
when: cleanup_c2
- name: Combine VPC IDs into a list
set_fact:
vpc_ids: "{{ ((redirector_vpcs.stdout | default('') | trim | split('\n') | select('string') | list) +
(c2_vpcs.stdout | default('') | trim | split('\n') | select('string') | list)) | unique }}"
when: (redirector_vpcs.stdout | default('') | trim != '') or (c2_vpcs.stdout | default('') | trim != '')
# Process each VPC
- name: Process each VPC
include_tasks: process_vpc.yml
loop: "{{ vpc_ids | default([]) }}"
loop_control:
loop_var: vpc_id
when: vpc_ids is defined and vpc_ids | length > 0
# Delete key pairs
- name: Delete redirector key pair
amazon.aws.ec2_key:
name: "{{ redirector_name }}"
state: absent
region: "{{ aws_region }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
when: cleanup_redirector and redirector_name is defined and redirector_name != ""
register: redirector_key_deleted
- name: Delete C2 key pair
amazon.aws.ec2_key:
name: "{{ c2_name }}"
state: absent
region: "{{ aws_region }}"
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
when: cleanup_c2 and c2_name is defined and c2_name != ""
register: c2_key_deleted
- name: Track deleted key pairs for redirector
set_fact:
cleaned_resources: "{{ cleaned_resources | combine({'key_pairs': cleaned_resources.key_pairs + [redirector_name]}, recursive=True) }}"
when: redirector_key_deleted is defined and redirector_key_deleted.changed
- name: Track deleted key pairs for C2
set_fact:
cleaned_resources: "{{ cleaned_resources | combine({'key_pairs': cleaned_resources.key_pairs + [c2_name]}, recursive=True) }}"
when: c2_key_deleted is defined and c2_key_deleted.changed
# Remove local key files
- name: Remove redirector SSH key file
file:
path: "~/.ssh/{{ redirector_name }}.pem"
@@ -246,10 +203,16 @@
state: absent
when: cleanup_c2 and c2_name is defined and c2_name != ""
# Summary of cleanup
- name: Cleanup complete message
debug:
msg:
- "AWS infrastructure cleanup complete!"
- "Resources that were cleaned up:"
- "{{ cleanup_redirector | ternary('- Redirector instance: ' + redirector_name, '') }}"
- "{{ cleanup_c2 | ternary('- C2 instance: ' + c2_name, '') }}"
- "- Instances: {{ cleaned_resources.instances | length }} {{ cleaned_resources.instances | join(', ') }}"
- "- Security Groups: {{ cleaned_resources.security_groups | length }} {{ cleaned_resources.security_groups | join(', ') }}"
- "- Internet Gateways: {{ cleaned_resources.internet_gateways | length }} {{ cleaned_resources.internet_gateways | join(', ') }}"
- "- Subnets: {{ cleaned_resources.subnets | length }} {{ cleaned_resources.subnets | join(', ') }}"
- "- Route Tables: {{ cleaned_resources.route_tables | length }} {{ cleaned_resources.route_tables | join(', ') }}"
- "- VPCs: {{ cleaned_resources.vpcs | length }} {{ cleaned_resources.vpcs | join(', ') }}"
- "- Key Pairs: {{ cleaned_resources.key_pairs | length }} {{ cleaned_resources.key_pairs | join(', ') }}"