From 730a76c6c4dbab110c5012bbeea304a8fda0cbbc Mon Sep 17 00:00:00 2001 From: Prowler Bot Date: Thu, 9 Jan 2025 15:44:24 +0100 Subject: [PATCH] fix(iam): handle non existing MFA devices (#6406) Co-authored-by: Sergio Garcia --- .../providers/aws/services/iam/iam_service.py | 45 +++++++++++++------ 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/prowler/providers/aws/services/iam/iam_service.py b/prowler/providers/aws/services/iam/iam_service.py index a5b88f4ce8..acb0350c74 100644 --- a/prowler/providers/aws/services/iam/iam_service.py +++ b/prowler/providers/aws/services/iam/iam_service.py @@ -369,21 +369,38 @@ class IAM(AWSService): logger.info("IAM - List MFA Devices...") try: for user in self.users: - list_mfa_devices_paginator = self.client.get_paginator( - "list_mfa_devices" - ) - mfa_devices = [] - for page in list_mfa_devices_paginator.paginate(UserName=user.name): - for mfa_device in page["MFADevices"]: - mfa_serial_number = mfa_device["SerialNumber"] - try: - mfa_type = mfa_serial_number.split(":")[5].split("/")[0] - except IndexError: - mfa_type = "hardware" - mfa_devices.append( - MFADevice(serial_number=mfa_serial_number, type=mfa_type) + try: + list_mfa_devices_paginator = self.client.get_paginator( + "list_mfa_devices" + ) + mfa_devices = [] + for page in list_mfa_devices_paginator.paginate(UserName=user.name): + for mfa_device in page["MFADevices"]: + mfa_serial_number = mfa_device["SerialNumber"] + try: + mfa_type = mfa_serial_number.split(":")[5].split("/")[0] + except IndexError: + mfa_type = "hardware" + mfa_devices.append( + MFADevice( + serial_number=mfa_serial_number, type=mfa_type + ) + ) + user.mfa_devices = mfa_devices + except ClientError as error: + if error.response["Error"]["Code"] == "NoSuchEntity": + logger.warning( + f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" ) - user.mfa_devices = mfa_devices + else: + logger.error( + f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) + + except Exception as error: + logger.error( + f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}" + ) except Exception as error: logger.error( f"{self.region} -- {error.__class__.__name__}[{error.__traceback__.tb_lineno}]: {error}"