mirror of
https://github.com/prowler-cloud/prowler.git
synced 2025-12-19 05:17:47 +00:00
99 lines
3.6 KiB
Python
99 lines
3.6 KiB
Python
import json
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
import boto3
|
|
|
|
# Logging config
|
|
logging.basicConfig(
|
|
stream=sys.stdout,
|
|
format="%(asctime)s [File: %(filename)s:%(lineno)d] \t[Module: %(module)s]\t %(levelname)s: %(message)s",
|
|
datefmt="%m/%d/%Y %I:%M:%S %p",
|
|
level=logging.INFO,
|
|
)
|
|
|
|
regions_by_service = {"services": {}}
|
|
|
|
logging.info("Recovering AWS Regions by Service")
|
|
client = boto3.client("ssm", region_name="us-east-1")
|
|
get_parameters_by_path_paginator = client.get_paginator("get_parameters_by_path")
|
|
# Get all AWS Available Services
|
|
for page in get_parameters_by_path_paginator.paginate(
|
|
Path="/aws/service/global-infrastructure/services"
|
|
):
|
|
for service in page["Parameters"]:
|
|
regions_by_service["services"][service["Value"]] = {}
|
|
# Get all AWS Regions for the specific service
|
|
regions = {"aws": [], "aws-cn": [], "aws-us-gov": []}
|
|
for page in get_parameters_by_path_paginator.paginate(
|
|
Path="/aws/service/global-infrastructure/services/"
|
|
+ service["Value"]
|
|
+ "/regions"
|
|
):
|
|
for region in page["Parameters"]:
|
|
if "cn" in region["Value"]:
|
|
regions["aws-cn"].append(region["Value"])
|
|
elif "gov" in region["Value"]:
|
|
regions["aws-us-gov"].append(region["Value"])
|
|
else:
|
|
regions["aws"].append(region["Value"])
|
|
# Sort regions per partition
|
|
regions["aws"] = sorted(regions["aws"])
|
|
regions["aws-cn"] = sorted(regions["aws-cn"])
|
|
regions["aws-us-gov"] = sorted(regions["aws-us-gov"])
|
|
regions_by_service["services"][service["Value"]]["regions"] = regions
|
|
|
|
# Include the regions for the subservices and the services not present
|
|
logging.info("Updating subservices and the services not present in the original matrix")
|
|
# macie2 --> macie
|
|
regions_by_service["services"]["macie2"] = regions_by_service["services"]["macie"]
|
|
# bedrock-agent is not in SSM, and has different availability than bedrock
|
|
# See: https://docs.aws.amazon.com/bedrock/latest/userguide/agents-supported.html
|
|
regions_by_service["services"]["bedrock-agent"] = {
|
|
"regions": {
|
|
"aws": [
|
|
"ap-northeast-1",
|
|
"ap-northeast-2",
|
|
"ap-south-1",
|
|
"ap-southeast-1",
|
|
"ap-southeast-2",
|
|
"ca-central-1",
|
|
"eu-central-1",
|
|
"eu-central-2",
|
|
"eu-west-1",
|
|
"eu-west-2",
|
|
"eu-west-3",
|
|
"sa-east-1",
|
|
"us-east-1",
|
|
"us-west-2",
|
|
],
|
|
"aws-cn": [],
|
|
"aws-us-gov": [
|
|
"us-gov-west-1",
|
|
],
|
|
}
|
|
}
|
|
# cognito --> cognito-idp
|
|
regions_by_service["services"]["cognito"] = regions_by_service["services"][
|
|
"cognito-idp"
|
|
]
|
|
# opensearch --> es
|
|
regions_by_service["services"]["opensearch"] = regions_by_service["services"]["es"]
|
|
# elbv2 --> elb
|
|
regions_by_service["services"]["elbv2"] = regions_by_service["services"]["elb"]
|
|
# wafv2 --> waf
|
|
regions_by_service["services"]["wafv2"] = regions_by_service["services"]["waf"]
|
|
# wellarchitected --> wellarchitectedtool
|
|
regions_by_service["services"]["wellarchitected"] = regions_by_service["services"][
|
|
"wellarchitectedtool"
|
|
]
|
|
# sesv2 --> ses
|
|
regions_by_service["services"]["sesv2"] = regions_by_service["services"]["ses"]
|
|
|
|
# Write to file
|
|
parsed_matrix_regions_aws = f"{os.path.dirname(os.path.realpath(__name__))}/prowler/providers/aws/aws_regions_by_service.json"
|
|
logging.info(f"Writing {parsed_matrix_regions_aws}")
|
|
with open(parsed_matrix_regions_aws, "w") as outfile:
|
|
json.dump(regions_by_service, outfile, indent=2, sort_keys=True)
|