def get_detector(cls: Type["DetectorResourceSpec"], client: BaseClient, detector_id: str, region: str) -> Dict[str, Any]: detector_resp = client.get_detector(DetectorId=detector_id) detector = { key: detector_resp[key] for key in ( "CreatedAt", "FindingPublishingFrequency", "ServiceRole", "Status", "UpdatedAt", ) } detector["Members"] = cls.get_detector_members(client, detector_id, region) master_account_resp = client.get_master_account(DetectorId=detector_id) master_account_dict = master_account_resp.get("Master") if master_account_dict: detector["Master"] = { # key: master_account_dict[key] key: master_account_dict.get(key) for key in ( "AccountId", "RelationshipStatus", "InvitedAt", ) } return detector
def list_from_aws(cls: Type["DetectorResourceSpec"], client: BaseClient, account_id: str, region: str) -> ListFromAWSResult: """Return a dict of dicts of the format: {'detector_1_arn': {detector_1_dict}, 'detector_2_arn': {detector_2_dict}, ...} Where the dicts represent results from list_detectors and list_members, get_detector for each listed detector.""" list_detectors_paginator = client.get_paginator("list_detectors") detectors = {} for list_detectors_resp in list_detectors_paginator.paginate(): detector_ids = list_detectors_resp["DetectorIds"] for detector_id in detector_ids: detector_resp = client.get_detector(DetectorId=detector_id) detector = { key: detector_resp[key] for key in ( "CreatedAt", "FindingPublishingFrequency", "ServiceRole", "Status", "UpdatedAt", ) } list_members_paginator = client.get_paginator("list_members") member_resps: List[Dict[str, Any]] = [] for list_members_resp in list_members_paginator.paginate( DetectorId=detector_id): member_resps += list_members_resp.get("Members", []) members = [] if member_resps: for member_resp in member_resps: member_account_id = member_resp["AccountId"] member_detector_id = member_resp["DetectorId"] member_email = member_resp["Email"] member_relationship_status = member_resp[ "RelationshipStatus"] member_invited_at = member_resp["InvitedAt"] member_updated_at = member_resp["UpdatedAt"] member_detector_arn = cls.generate_arn( account_id=member_account_id, region=region, resource_id=member_detector_id, ) member = { "DetectorArn": member_detector_arn, "Email": member_email, "RelationshipStatus": member_relationship_status, "InvitedAt": member_invited_at, "UpdatedAt": member_updated_at, } members.append(member) detector["Members"] = members master_account_resp = client.get_master_account( DetectorId=detector_id) master_account_dict = master_account_resp.get("Master") if master_account_dict: detector["Master"] = { key: master_account_dict[key] for key in ( "AccountId", "RelationshipStatus", "InvitedAt", ) } resource_arn = cls.generate_arn(account_id=account_id, region=region, resource_id=detector_id) detectors[resource_arn] = detector return ListFromAWSResult(resources=detectors)