22from attr import frozen , define
33from fix_plugin_aws .resource .base import AwsAccount , AwsResource , GraphBuilder
44
5- from typing import List , Literal , Set , Optional , Tuple , Union , Pattern
5+ from typing import Dict , List , Literal , Set , Optional , Tuple , Union , Pattern
66
77from fixlib .baseresources import (
88 PermissionCondition ,
@@ -471,7 +471,15 @@ def is_service_linked_role(principal: AwsResource) -> bool:
471471 return False
472472
473473
474+ action_level_overrides = {
475+ "sts:AssumeRole" : PermissionLevel .can_become ,
476+ }
477+
478+
474479def get_action_level (action : str ) -> PermissionLevel :
480+ if override := action_level_overrides .get (action ):
481+ return override
482+
475483 service , action_name = action .split (":" )
476484 level = ""
477485 action_data = get_action_data (service , action_name )
@@ -491,7 +499,7 @@ def get_action_level(action: str) -> PermissionLevel:
491499 elif level == "Write" :
492500 return PermissionLevel .write
493501 elif level == "Permissions management" :
494- return PermissionLevel .permission_management
502+ return PermissionLevel .permission
495503 else :
496504 return PermissionLevel .unknown
497505
@@ -805,6 +813,11 @@ def add_access_edges(self) -> None:
805813 if not permissions :
806814 continue
807815
808- reported = to_json ({"permissions" : permissions }, strip_nulls = True )
816+ access : Dict [PermissionLevel , bool ] = {}
817+
818+ for permission in permissions :
819+ access [permission .level ] = True
820+
821+ reported = to_json ({"permissions" : permissions , "access" : access }, strip_nulls = True )
809822
810823 self .builder .add_edge (from_node = context .principal , edge_type = EdgeType .iam , reported = reported , node = node )
0 commit comments