0799bfbae8
Sanitized version of red team infrastructure automation platform. Operational content (implant pipelines, lures, credential capture) replaced with documented stubs. Architecture and infrastructure automation code intact.
89 lines
2.7 KiB
Python
89 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
AWS provider utilities for C2ingRed deployment system
|
|
"""
|
|
|
|
import os
|
|
import subprocess
|
|
import logging
|
|
from .common import COLORS, load_vars_file
|
|
|
|
def get_aws_credentials(provider_vars=None):
|
|
"""Get AWS credentials — Infisical first, vars.yaml fallback, then prompt."""
|
|
key = ''
|
|
secret = ''
|
|
|
|
try:
|
|
key = subprocess.check_output(
|
|
[os.path.expanduser('~/.local/bin/creds'), 'get', 'AWS_ACCESS_KEY_ID', 'homelab'],
|
|
text=True, stderr=subprocess.DEVNULL,
|
|
).strip()
|
|
secret = subprocess.check_output(
|
|
[os.path.expanduser('~/.local/bin/creds'), 'get', 'AWS_SECRET_ACCESS_KEY', 'homelab'],
|
|
text=True, stderr=subprocess.DEVNULL,
|
|
).strip()
|
|
except Exception:
|
|
pass
|
|
|
|
if not key:
|
|
if not provider_vars:
|
|
provider_vars = load_vars_file('aws')
|
|
key = provider_vars.get('aws_access_key', '')
|
|
secret = provider_vars.get('aws_secret_key', '')
|
|
if key and 'YOUR_AWS' in key:
|
|
key = ''
|
|
secret = ''
|
|
|
|
print(f"\n{COLORS['BLUE']}AWS Configuration{COLORS['RESET']}")
|
|
if key:
|
|
print(f" AWS credentials loaded")
|
|
else:
|
|
key = input("AWS Access Key: ").strip()
|
|
secret = input("AWS Secret Key: ").strip()
|
|
|
|
return {'aws_access_key': key, 'aws_secret_key': secret}
|
|
|
|
def select_aws_regions(provider_vars=None) -> list[str]:
|
|
"""Return region list — single entry if user specified one, all regions if blank (random per-node)."""
|
|
if not provider_vars:
|
|
provider_vars = load_vars_file('aws')
|
|
|
|
regions = provider_vars.get('aws_region_choices', ['us-east-1'])
|
|
|
|
print(f"\nAvailable AWS regions:")
|
|
for i, region in enumerate(regions, 1):
|
|
print(f" {i:2}. {region}")
|
|
|
|
region_input = input("\nSelect region (number or leave blank for random per-node): ").strip()
|
|
|
|
if not region_input:
|
|
return regions
|
|
|
|
try:
|
|
idx = int(region_input)
|
|
if 1 <= idx <= len(regions):
|
|
return [regions[idx - 1]]
|
|
except ValueError:
|
|
pass
|
|
|
|
print(f"{COLORS['RED']}Invalid input, using random per-node regions{COLORS['RESET']}")
|
|
return regions
|
|
|
|
def gather_aws_config():
|
|
"""Gather all AWS-specific configuration"""
|
|
provider_vars = load_vars_file('aws')
|
|
config = {}
|
|
|
|
aws_creds = get_aws_credentials(provider_vars)
|
|
config.update(aws_creds)
|
|
|
|
aws_regions = select_aws_regions(provider_vars)
|
|
config['aws_regions'] = aws_regions
|
|
config['aws_region'] = aws_regions[0]
|
|
|
|
config['ami_map'] = provider_vars.get('ami_map', {})
|
|
config['aws_instance_type'] = provider_vars.get('aws_instance_type', 't3.micro')
|
|
config['aws_volume_size'] = provider_vars.get('aws_volume_size', 20)
|
|
|
|
return config
|