64
64
raise ValueError ("Unexpected error executing Lambda function. Review CloudWatch logs for details." ) from None
65
65
66
66
67
- def assume_role (role : str , role_session_name : str , region : str , account : str = None , session : boto3 .Session = None ) -> boto3 .Session :
67
+ def assume_role (role : str , role_session_name : str , account : str = None , session : boto3 .Session = None ) -> boto3 .Session :
68
68
"""Assumes the provided role in the given account and returns a session.
69
69
70
70
Args:
@@ -76,9 +76,12 @@ def assume_role(role: str, role_session_name: str, region: str, account: str = N
76
76
Returns:
77
77
Session object for the specified AWS account
78
78
"""
79
+ # set regional endpoint environment variable to account for potential opt-in regions
80
+ os .environ ["AWS_STS_REGIONAL_ENDPOINTS" ] = "regional"
81
+
79
82
if not session :
80
83
session = boto3 .Session ()
81
- sts_client : STSClient = session .client ("sts" , endpoint_url = f"https://sts. { region } .amazonaws.com" , region_name = region , config = BOTO3_CONFIG )
84
+ sts_client : STSClient = session .client ("sts" , config = BOTO3_CONFIG )
82
85
sts_arn = sts_client .get_caller_identity ()["Arn" ]
83
86
LOGGER .info (f"USER: { sts_arn } " )
84
87
if not account :
@@ -200,7 +203,7 @@ def get_organization_resource_tags(resource_id: str) -> List[TagTypeDef]:
200
203
return tags
201
204
202
205
203
- def process_enable_ebs_encryption_by_default (configuration_role_name : str , session_role_name : str , account_id : str , regions : list ) -> None :
206
+ def process_enable_ebs_encryption_by_default (account_session : boto3 . Session , account_id : str , regions : list ) -> None :
204
207
"""Process enable ec2 default EBS encryption.
205
208
206
209
Args:
@@ -209,7 +212,6 @@ def process_enable_ebs_encryption_by_default(configuration_role_name: str, sessi
209
212
regions: regions to process
210
213
"""
211
214
for region in regions :
212
- account_session = assume_role (configuration_role_name , session_role_name , region , account_id )
213
215
ec2_client : EC2Client = account_session .client ("ec2" , region , config = BOTO3_CONFIG )
214
216
215
217
response : GetEbsEncryptionByDefaultResultTypeDef = ec2_client .get_ebs_encryption_by_default ()
@@ -290,10 +292,9 @@ def local_testing(aws_account: AccountTypeDef, params: dict) -> None:
290
292
aws_account: AWS account to update
291
293
params: solution parameters
292
294
"""
293
-
295
+ account_session = assume_role ( params [ "CONFIGURATION_ROLE_NAME" ], params [ "ROLE_SESSION_NAME" ], aws_account [ "Id" ])
294
296
regions = get_enabled_regions (params ["ENABLED_REGIONS" ], params ["CONTROL_TOWER_REGIONS_ONLY" ])
295
-
296
- process_enable_ebs_encryption_by_default (params ["CONFIGURATION_ROLE_NAME" ], params ["ROLE_SESSION_NAME" ], aws_account ["Id" ], regions )
297
+ process_enable_ebs_encryption_by_default (account_session , aws_account ["Id" ], regions )
297
298
298
299
299
300
def process_accounts (event : Union [CloudFormationCustomResourceEvent , dict ], params : dict ) -> None :
@@ -366,10 +367,10 @@ def process_event_sns(event: dict) -> None:
366
367
LOGGER .info ({"SNS Record" : record })
367
368
message = record ["Sns" ]["Message" ]
368
369
params ["action" ] = message ["Action" ]
369
-
370
+
370
371
aws_account = get_account_info (account_id = message ["AccountId" ])
371
-
372
- process_enable_ebs_encryption_by_default (params [ "CONFIGURATION_ROLE_NAME" ], params [ "ROLE_SESSION_NAME" ] , aws_account ["Id" ], regions )
372
+ account_session = assume_role ( params [ "CONFIGURATION_ROLE_NAME" ], params [ "ROLE_SESSION_NAME" ], aws_account [ "Id" ])
373
+ process_enable_ebs_encryption_by_default (account_session , aws_account ["Id" ], regions )
373
374
374
375
375
376
def process_event_organizations (event : dict ) -> None :
0 commit comments