reverse-diagrams 0.2.1__py3-none-any.whl → 0.2.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,14 +1,13 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: reverse_diagrams
3
- Version: 0.2.1
4
- Summary: Continuous Documentation Tool - Documentation as Code Tool -
5
- This package create reverse diagrams based on your current state in your cloud environment
3
+ Version: 0.2.6
4
+ Summary: Continuous Documentation Tool - Documentation as Code Tool - This package create reverse diagrams based on your current state in your cloud environment
6
5
  Project-URL: Homepage, https://github.com/velez94/reverse_diagrams
7
6
  Project-URL: Bug Tracker, https://github.com/velez94/reverse_diagrams/issues
8
- Author-email: Alejandro Velez <wilmar.velezl@sophossolutions.com>
7
+ Author-email: Alejandro Velez <avelez@labvel.io>
9
8
  License: MIT License
10
9
 
11
- Copyright (c) [2022] [Alejandro Velez]
10
+ Copyright (c) [2023] [Alejandro Velez]
12
11
 
13
12
  Permission is hereby granted, free of charge, to any person obtaining a copy
14
13
  of this software and associated documentation files (the "Software"), to deal
@@ -73,8 +72,7 @@ The following are the available options
73
72
 
74
73
  ```commandline
75
74
  $ reverse_diagrams -h
76
-
77
- usage: reverse_diagrams [-h] [-c CLOUD] [-p PROFILE] [-o] [-i] [-v]
75
+ usage: reverse_diagrams [-h] [-c CLOUD] [-p PROFILE] [-od OUTPUT_DIR_PATH] [-r REGION] [-o] [-i] [-v] [-d]
78
76
 
79
77
  options:
80
78
  -h, --help show this help message and exit
@@ -82,10 +80,15 @@ options:
82
80
  Cloud Provider, aws, gcp, azure
83
81
  -p PROFILE, --profile PROFILE
84
82
  AWS cli profile for Access Analyzer Api
83
+ -od OUTPUT_DIR_PATH, --output_dir_path OUTPUT_DIR_PATH
84
+ Name of folder to save the diagrams python code files
85
+ -r REGION, --region REGION
86
+ AWS cli profile for Access Analyzer Api
85
87
  -o, --graph_organization
86
88
  Set if you want to create graph for your organization
87
89
  -i, --graph_identity Set if you want to create graph for your IAM Center
88
90
  -v, --version Show version
91
+ -d, --debug Debug Mode
89
92
 
90
93
  ```
91
94
  For example:
@@ -0,0 +1,17 @@
1
+ src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
+ src/reverse_diagrams.py,sha256=FIWMS9anHgfDkDJIUUtb6mnZZ11q3nX8Tlu5OgeFMys,8654
3
+ src/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ src/aws/describe_identity_store.py,sha256=5LRtm1IwMKMRX6vRqxIUzna3VqZkHAWD2HylUHdeB1Y,7246
5
+ src/aws/describe_organization.py,sha256=ki0o3VhtH6mMV6EmZzlKPRfL5SKKVZGweK3NEiChXfY,3053
6
+ src/aws/describe_sso.py,sha256=AOob-7fQk6paWjBT3dBx0Fizb5IhjWp1IIrOIv6s-yQ,1720
7
+ src/banner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
+ src/banner/banner.py,sha256=D4XgGeWINUEpaQeMNIyuU1gY54bgv4UhantsDRj7TBQ,901
9
+ src/dgms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ src/dgms/graph_mapper.py,sha256=1YWY4eQPZzDlqahjmgBIQSmvmiCrmAdwZoOdggnI6zE,6259
11
+ src/dgms/graph_template.py,sha256=4twiySM5MFl3oRpLkjTGgdswIwi2ee3lTjPmTx5SmG4,1170
12
+ src/export_report/export_csv.py,sha256=6A3ZpoBnk6l1GVVmpH-_id6vKdd6JGipNCUwURtyIUs,88
13
+ reverse_diagrams-0.2.6.dist-info/METADATA,sha256=FTOqse6qfcxYMrKjh4vIseE3a4QpojRe3jIcZ99Ohik,5395
14
+ reverse_diagrams-0.2.6.dist-info/WHEEL,sha256=TJPnKdtrSue7xZ_AVGkp9YXcvDrobsjBds1du3Nx6dc,87
15
+ reverse_diagrams-0.2.6.dist-info/entry_points.txt,sha256=VZNkrc7qUDbddTCH3pGd83EhUT3PHTx9MzpAk6bb6qc,63
16
+ reverse_diagrams-0.2.6.dist-info/licenses/LICENSE,sha256=IaXsSIrH5zPkhwGm3_eitFhOsUeh8vnvs_ZazfXa4fM,1095
17
+ reverse_diagrams-0.2.6.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.12.2
2
+ Generator: hatchling 1.21.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) [2022] [Alejandro Velez]
3
+ Copyright (c) [2023] [Alejandro Velez]
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -4,13 +4,40 @@ from colorama import Fore
4
4
  import logging
5
5
 
6
6
 
7
- def list_groups(identity_store_id, client=boto3.client('identitystore', region_name="us-east-2"), ):
8
- response = client.list_groups(
7
+ def list_groups_pag(identity_store_id, client=boto3.client('identitystore', region_name="us-east-2"),
8
+ next_token: str = None):
9
+ paginator = client.get_paginator('list_groups')
10
+ response_iterator = paginator.paginate(
9
11
  IdentityStoreId=identity_store_id,
12
+ PaginationConfig={
13
+ 'MaxItems': 1000,
14
+ 'PageSize': 4,
15
+ 'StartingToken': next_token
16
+ }
17
+ )
18
+ response = response_iterator.build_full_result()
19
+ logging.info(response_iterator.build_full_result())
20
+ return response["Groups"]
21
+
10
22
 
23
+ def list_groups(identity_store_id, client=boto3.client('identitystore', region_name="us-east-2"), ):
24
+ groups = client.list_groups(
25
+ IdentityStoreId=identity_store_id,
26
+ MaxResults=20
11
27
  )
12
28
 
13
- return response["Groups"]
29
+ logging.info(groups)
30
+ l_groups = groups["Groups"]
31
+ logging.info(len(groups["Groups"]))
32
+
33
+ if len(groups["Groups"]) >= 20:
34
+ logging.info("Paginating ...")
35
+ ad_groups = list_groups_pag(identity_store_id=identity_store_id, client=client, next_token=groups["NextToken"])
36
+ for ad in ad_groups:
37
+ l_groups.append(ad)
38
+ logging.info(f"You have {len(l_groups)} Groups")
39
+
40
+ return l_groups
14
41
 
15
42
 
16
43
  def list_users(identity_store_id, client=boto3.client('identitystore', region_name="us-east-2"), ):
@@ -22,24 +49,82 @@ def list_users(identity_store_id, client=boto3.client('identitystore', region_na
22
49
  return response["Users"]
23
50
 
24
51
 
52
+ def get_members_pag(identity_store_id, client=boto3.client('identitystore', region_name="us-east-2"),
53
+ next_token: str = None):
54
+ paginator = client.get_paginator('list_group_memberships')
55
+ response_iterator = paginator.paginate(
56
+ IdentityStoreId=identity_store_id,
57
+ PaginationConfig={
58
+ 'MaxItems': 1000,
59
+ 'PageSize': 4,
60
+ 'StartingToken': next_token
61
+ }
62
+ )
63
+ response = response_iterator.build_full_result()
64
+ logging.info(response_iterator.build_full_result())
65
+ return response["GroupMemberships"]
66
+
67
+
25
68
  def get_members(identity_store_id, groups, client=boto3.client('identitystore', region_name="us-east-2")):
26
69
  group_members = []
27
70
  for g in groups:
28
71
  response = client.list_group_memberships(
29
72
  IdentityStoreId=identity_store_id,
30
73
  GroupId=g["GroupId"],
74
+ MaxResults=20,
31
75
 
32
76
  )
77
+ members = response["GroupMemberships"]
78
+ logging.info(members)
79
+
80
+ logging.info(len(members))
81
+
82
+ if len(members) >= 20:
83
+ logging.info("Paginating ...")
84
+ ad_members = get_members_pag(identity_store_id=identity_store_id, client=client,
85
+ next_token=response["NextToken"])
86
+ for ad in ad_members:
87
+ members.append(ad)
88
+ logging.info(f"You have {len(ad_members)} Members")
89
+ print(f"You have {len(ad_members)} Members")
90
+
33
91
  group_members.append(
34
92
  {"group_id": g["GroupId"],
35
93
  "group_name": g["DisplayName"],
36
- "members": response["GroupMemberships"]
94
+ "members": members
37
95
  }
38
96
  )
39
97
 
40
98
  return group_members
41
99
 
42
100
 
101
+ def list_group_memberships(identitystore_client, group_name, pagination=True):
102
+ """
103
+ Lists memberships for a group in an AWS SSO identity store.
104
+
105
+ Args:
106
+ identitystore_client (boto3.client): Boto3 SSO identity store client
107
+ group_name (str): Name of the group to list memberships for
108
+ pagination (bool): Whether to enable result pagination (default: True)
109
+
110
+ Returns:
111
+ list: List of member objects
112
+ """
113
+
114
+ params = {'GroupName': group_name}
115
+ members = []
116
+
117
+ if pagination:
118
+ paginator = identitystore_client.get_paginator('list_group_memberships')
119
+ for page in paginator.paginate(**params):
120
+ members.extend(page['Members'])
121
+ else:
122
+ response = identitystore_client.list_group_memberships(**params)
123
+ members.extend(response['Members'])
124
+
125
+ return members
126
+
127
+
43
128
  def complete_group_members(group_members, users_list):
44
129
  for m in group_members:
45
130
  for u in m["members"]:
@@ -65,6 +150,7 @@ def l_groups_to_d_groups(l_groups: list = None):
65
150
  logging.info(d_user_groups)
66
151
  return d_user_groups
67
152
 
153
+
68
154
  def extend_account_assignments(accounts_list, permissions_sets, store_arn,
69
155
  client_sso=boto3.client('identitystore', region_name="us-east-2")):
70
156
  account_assignments = []
@@ -84,15 +170,15 @@ def add_users_and_groups_assign(account_assignments_list, user_and_group_list, u
84
170
  for a in account_assignments_list:
85
171
  for g in user_and_group_list:
86
172
  if len(a) > 0 and a['PrincipalType'] == 'GROUP' and g["group_id"] == a['PrincipalId']:
87
- print( Fore.YELLOW +
88
- f"Account {a['AccountId']} assign to {a['PrincipalType']} {g['group_name']} with permission set {list_permissions_set_arn_name[a['PermissionSetArn']]} or {a['PermissionSetArn']}" + Fore.RESET)
173
+ print(Fore.YELLOW +
174
+ f"Account {a['AccountId']} assign to {a['PrincipalType']} {g['group_name']} with permission set {list_permissions_set_arn_name[a['PermissionSetArn']]} or {a['PermissionSetArn']}" + Fore.RESET)
89
175
 
90
176
  a["GroupName"] = g['group_name']
91
177
  a["PermissionSetName"] = list_permissions_set_arn_name[a['PermissionSetArn']]
92
178
  for u in user_list:
93
179
  if len(a) > 0 and a['PrincipalType'] == 'USER' and u["UserId"] == a['PrincipalId']:
94
180
  print(Fore.YELLOW +
95
- f"Account {a['AccountId']} assign to {a['PrincipalType']} {u['UserName']} with permission set {a['PermissionSetArn']} or {list_permissions_set_arn_name[a['PermissionSetArn']]}"+ Fore.RESET)
181
+ f"Account {a['AccountId']} assign to {a['PrincipalType']} {u['UserName']} with permission set {a['PermissionSetArn']} or {list_permissions_set_arn_name[a['PermissionSetArn']]}" + Fore.RESET)
96
182
  a["UserName"] = u['UserName']
97
183
  a["PermissionSetName"] = list_permissions_set_arn_name[a['PermissionSetArn']]
98
184
  logging.debug(f"Account Assignments --> {account_assignments_list}")
src/banner/banner.py CHANGED
@@ -1,53 +1,22 @@
1
1
  from colorama import Fore
2
2
 
3
3
 
4
- banner = """
5
- \t \t \t \t Reverse Diagrams
6
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
7
- ░░░▒▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▒░░░░░░░░░░
8
- ░▓███████████████████████████████████████████████████████████████████████████▓░░░░░░░░░░░░
9
- ▓████▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
10
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
11
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓
12
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██▓
13
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
14
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
15
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
16
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
17
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
18
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
19
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
20
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▓
21
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░█████
22
- ███▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▓██████████████████▓▓▓██████████▓░░░░█████
23
- ▓▓▓█▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████████████████▓▓██████████████▒░░░█████
24
- █▓██▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒█████████████████████████████████▓▒░░░░█████
25
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
26
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
27
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
28
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
29
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
30
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
31
- ████▓░░░░░░░░░░░░░░░░░░░░░░░▒▓▓▓░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
32
- ████▓░░░░░░░░░░░░░░░░░░▒▒▓████▓░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
33
- ████▓░░░░░░░░░░░░░▒▒▓████████▓░░░░░░░░░░░░░░░▓██████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
34
- ████▓░░░░░░░░▒▒▓█████████████████████████▓█▓▓▓██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
35
- ████▓░░░░░▓▓████████████████████████████▓▓▓▓███████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
36
- ███▓▓░░░░░░░▒▓▓█████████████████████████▓▓███████▓▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▓
37
- ███▓▓░░░░░░░░░░░░▒▓▓█████████▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
38
- ████▓░░░░░░░░░░░░░░░░░▒▓▓█████▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
39
- ████▓░░░░░░░░░░░░░░░░░░░░░░▒▓▓█▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
40
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
41
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
42
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
43
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
44
- ████▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▓
45
- ██▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
46
- ▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
47
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
48
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████
49
- ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒████▓
50
- ░░░░░░░░░▓█▓▓▓███████████████████████████████████████████████████████████▓█▓▓▓██████████▓░
4
+ banner = """Reverse Diagrams
5
+
6
+ ##### ###### # # ###### ##### #### ######
7
+ # # # # # # # # # #
8
+ # # ##### # # ##### # # #### #####
9
+ ##### # # # # ##### # #
10
+ # # # # # # # # # # #
11
+ # # ###### ## ###### # # #### ######
12
+
13
+
14
+ ##### # ## #### ##### ## # # ####
15
+ # # # # # # # # # # # ## ## #
16
+ # # # # # # # # # # # ## # ####
17
+ # # # ###### # ### ##### ###### # # #
18
+ # # # # # # # # # # # # # # #
19
+ ##### # # # #### # # # # # # ####
51
20
  """
52
21
 
53
22
 
src/dgms/graph_mapper.py CHANGED
@@ -1,4 +1,5 @@
1
1
  import logging
2
+ import os.path
2
3
  import re
3
4
 
4
5
 
@@ -20,14 +21,14 @@ def format_name_string(a_string, action=None):
20
21
 
21
22
 
22
23
  def create_sso_mapper_complete(template_file, acc_assignments, d_groups):
23
- print(acc_assignments)
24
+
24
25
  with open(template_file, 'a') as f:
25
26
  ident = " "
26
27
 
27
28
  for key, value in acc_assignments.items():
28
- print(f"\n with Cluster('Account: {key}'):", file=f)
29
- if len(value) > 0:
30
29
 
30
+ if len(value) > 0:
31
+ print(f"\n with Cluster('Account: {key}'):", file=f)
31
32
  for m in value:
32
33
  logging.debug(m)
33
34
 
@@ -57,8 +58,16 @@ def create_sso_mapper_complete(template_file, acc_assignments, d_groups):
57
58
  f.close()
58
59
 
59
60
 
60
- def create_file(template_content, file_name):
61
- with open(file_name, 'w') as f:
61
+ def create_file(template_content, file_name, directory_path="."):
62
+ """
63
+
64
+ :param template_content:
65
+ :param file_name:
66
+ :param directory_path:
67
+ :return:
68
+ """
69
+ f_path=os.path.join(directory_path, file_name)
70
+ with open(f_path, 'w') as f:
62
71
  f.write(template_content)
63
72
  f.close()
64
73
 
src/reverse_diagrams.py CHANGED
@@ -1,3 +1,5 @@
1
+ import os
2
+
1
3
  import boto3
2
4
  import argparse
3
5
  import logging
@@ -13,7 +15,7 @@ from .dgms.graph_mapper import create_mapper, create_sso_mapper_complete, create
13
15
  from .dgms.graph_template import graph_template, graph_template_sso, graph_template_sso_complete
14
16
  from .banner.banner import get_version
15
17
 
16
- __version__ = "0.2.1"
18
+ __version__ = "0.2.4"
17
19
 
18
20
 
19
21
  def main() -> int:
@@ -21,7 +23,6 @@ def main() -> int:
21
23
  Crete architecture diagram from your current state
22
24
  :return:
23
25
  """
24
- print('Date:', datetime.now())
25
26
 
26
27
  # Initialize parser
27
28
  parser = argparse.ArgumentParser()
@@ -29,12 +30,15 @@ def main() -> int:
29
30
  help="Cloud Provider, aws, gcp, azure", default="aws")
30
31
  parser.add_argument("-p", "--profile",
31
32
  help="AWS cli profile for Access Analyzer Api", default=None)
33
+ parser.add_argument("-od", "--output_dir_path",
34
+ help="Name of folder to save the diagrams python code files", default=None)
32
35
  parser.add_argument("-r", "--region",
33
36
  help="AWS cli profile for Access Analyzer Api", default="us-east-2")
34
37
  parser.add_argument("-o", "--graph_organization",
35
38
  help="Set if you want to create graph for your organization", action='store_true')
36
39
  parser.add_argument("-i", "--graph_identity",
37
40
  help="Set if you want to create graph for your IAM Center", action='store_true')
41
+
38
42
  parser.add_argument("-v", "--version",
39
43
  help="Show version", action='store_true')
40
44
  parser.add_argument("-d", "--debug",
@@ -46,6 +50,11 @@ def main() -> int:
46
50
  if args.debug:
47
51
  logging.basicConfig(level=logging.DEBUG)
48
52
 
53
+ if args.output_dir_path:
54
+ diagrams_path = args.output_dir_path
55
+ else:
56
+ diagrams_path = "."
57
+
49
58
  if args.cloud == "aws":
50
59
  if args.profile:
51
60
  profile = args.profile
@@ -57,7 +66,7 @@ def main() -> int:
57
66
  region = args.region
58
67
 
59
68
  if args.graph_organization:
60
- create_file(template_content=graph_template, file_name="graph_org.py")
69
+ create_file(template_content=graph_template, file_name="graph_org.py", directory_path=diagrams_path)
61
70
 
62
71
  client_org = boto3.client('organizations')
63
72
  organization = describe_organization(client_org)
@@ -78,18 +87,20 @@ def main() -> int:
78
87
  logging.debug(l_accounts)
79
88
  logging.debug("The Account list with parents info")
80
89
  print(Fore.YELLOW + emoji.emojize(
81
- f":information: There are {len(l_accounts)} in your organization" + Fore.RESET))
90
+ f":information: There are {len(l_accounts)} Accounts in your organization" + Fore.RESET))
82
91
  i_accounts = index_accounts(l_accounts)
83
92
  logging.debug(i_accounts)
84
93
 
85
94
  create_mapper(template_file="graph_org.py", org=organization, root_id=roots[0]["Id"], list_ous=ous,
86
95
  list_accounts=i_accounts)
87
96
 
88
- print(Fore.YELLOW + emoji.emojize(":sparkles: Run -> python3 graph_org.py " + Fore.RESET))
97
+ print(
98
+ Fore.YELLOW + emoji.emojize(f":sparkles: Run -> python3 {diagrams_path}/graph_org.py " + Fore.RESET))
89
99
 
90
100
  if args.graph_identity:
91
- create_file(template_content=graph_template_sso, file_name="graph_sso.py")
92
- create_file(template_content=graph_template_sso_complete, file_name="graph_sso_complete.py")
101
+ create_file(template_content=graph_template_sso, file_name="graph_sso.py", directory_path=diagrams_path)
102
+ create_file(template_content=graph_template_sso_complete, file_name="graph_sso_complete.py",
103
+ directory_path=diagrams_path)
93
104
 
94
105
  client_identity = boto3.client('identitystore', region_name=region)
95
106
  client_sso = boto3.client('sso-admin', region_name=region)
@@ -99,9 +110,11 @@ def main() -> int:
99
110
  logging.debug(store_instances)
100
111
  store_id = store_instances[0]["IdentityStoreId"]
101
112
  store_arn = store_instances[0]["InstanceArn"]
102
- print(Fore.BLUE + "List groups" + Fore.RESET)
113
+ print(Fore.BLUE + emoji.emojize(":sparkle: List groups" + Fore.RESET))
103
114
  l_groups = list_groups(store_id, client=client_identity)
104
115
  logging.debug(l_groups)
116
+ print(Fore.YELLOW + emoji.emojize(
117
+ f":information: There are {len(l_groups)} Groups in your Identity Store" + Fore.RESET))
105
118
 
106
119
  print(Fore.BLUE + emoji.emojize(":sparkle: Get groups and Users info" + Fore.RESET))
107
120
 
@@ -135,12 +148,15 @@ def main() -> int:
135
148
  print(Fore.BLUE + emoji.emojize(":sparkle: Getting account assignments, users and groups" + Fore.RESET))
136
149
  f_accounts = order_accounts_assignments_list(accounts_dict=l_accounts,
137
150
  account_assignments=account_assignments)
138
-
139
- create_sso_mapper_complete(template_file="graph_sso_complete.py",
151
+ f_path= os.path.join(diagrams_path, "graph_sso_complete.py")
152
+ create_sso_mapper_complete(template_file=f_path,
140
153
  acc_assignments=f_accounts,
141
154
  d_groups=d_groups)
142
- create_sso_mapper(template_file="graph_sso.py", group_and_members=c_users_and_groups)
143
- print(Fore.YELLOW + emoji.emojize(":sparkles: Run -> python3 graph_sso_complete.py " + Fore.RESET))
155
+
156
+ f_path = os.path.join(diagrams_path, "graph_sso.py")
157
+ create_sso_mapper(template_file=f_path, group_and_members=c_users_and_groups)
158
+ print(Fore.YELLOW + emoji.emojize(
159
+ f":sparkles: Run -> python3 {diagrams_path}/graph_sso_complete.py " + Fore.RESET))
144
160
  else:
145
161
  print(Fore.RED + emoji.emojize(":warning: " + f"The cloud provider {args.cloud} is no available" + Fore.RESET))
146
162
  if args.version:
__init__.py DELETED
File without changes
graph_org.py DELETED
@@ -1,84 +0,0 @@
1
-
2
- from diagrams import Diagram, Cluster
3
-
4
- from diagrams.aws.management import Organizations, OrganizationsAccount, OrganizationsOrganizationalUnit
5
-
6
- with Diagram("Organizations-State", show=False, direction="TB"):
7
- ou = OrganizationsOrganizationalUnit("OU")
8
- oa = OrganizationsAccount("Account")
9
-
10
- with Cluster('Organizations'):
11
-
12
- oo = Organizations('o-9tlhkjyoii\n029921763173\nr-w3ow')
13
-
14
- ou_Sandbox= OrganizationsOrganizationalUnit("ou-w3ow-1sumtdvp\nSandbox")
15
-
16
- oo>> ou_Sandbox
17
-
18
- ou_Security= OrganizationsOrganizationalUnit("ou-w3ow-oqvta8tc\nSecurity")
19
-
20
- oo>> ou_Security
21
-
22
- ou_Workloads= OrganizationsOrganizationalUnit("ou-w3ow-1lpmyfug\nWorkloads")
23
-
24
- oo>> ou_Workloads
25
-
26
- ou_Dev= OrganizationsOrganizationalUnit("ou-w3ow-k24p2opx\nDev")
27
-
28
- oo>> ou_Dev
29
-
30
- ou_DevSecOps= OrganizationsOrganizationalUnit("ou-w3ow-b334bby6\nDevSecOps")
31
-
32
- oo>> ou_DevSecOps
33
-
34
- ou_Core= OrganizationsOrganizationalUnit("ou-w3ow-93hiq3zr\nCore")
35
-
36
- oo>> ou_Core
37
-
38
- ou_PolicyStaging= OrganizationsOrganizationalUnit("ou-w3ow-18verpsm\nPolicy Staging")
39
-
40
- oo>> ou_PolicyStaging
41
-
42
- ou_Suspended= OrganizationsOrganizationalUnit("ou-w3ow-7vunsbkd\nSuspended")
43
-
44
- oo>> ou_Suspended
45
-
46
- ou_Shared= OrganizationsOrganizationalUnit("ou-w3ow-w7dzhzcz\nShared")
47
-
48
- oo>> ou_Shared
49
-
50
- ou_Infrastructure= OrganizationsOrganizationalUnit("ou-w3ow-9q06w8rz\nInfrastructure")
51
-
52
- oo>> ou_Infrastructure
53
-
54
- ou_BULab= OrganizationsOrganizationalUnit("ou-w3ow-qa633svy\nBU-Lab")
55
-
56
- ou_Workloads>> ou_BULab
57
-
58
- ou_Prod= OrganizationsOrganizationalUnit("ou-w3ow-4sdr4ejy\nProd")
59
-
60
- ou_BULab>> ou_Prod
61
-
62
- ou_SDLC= OrganizationsOrganizationalUnit("ou-w3ow-vop5vccd\nSDLC")
63
-
64
- ou_BULab>> ou_SDLC
65
-
66
- ou_Core>> OrganizationsAccount("884478634998\nLog archive")
67
-
68
- ou_Security>> OrganizationsAccount("835863553119\nSecOps")
69
-
70
- ou_Prod>> OrganizationsAccount("582441254763\nProd")
71
-
72
- ou_Core>> OrganizationsAccount("895882538541\nSecurityTooling")
73
-
74
- ou_DevSecOps>> OrganizationsAccount("105171185823\nDevSecOps")
75
-
76
- ou_Infrastructure>> OrganizationsAccount("994261317734\nOps")
77
-
78
- ou_Infrastructure>> OrganizationsAccount("155794986228\nSharedServices")
79
-
80
- oo >> OrganizationsAccount("029921763173\nLabVel")
81
-
82
- ou_Security>> OrganizationsAccount("837696987585\nOrganizationMana\nger")
83
-
84
- ou_SDLC>> OrganizationsAccount("571340586587\nDev")
graph_sso.py DELETED
@@ -1,39 +0,0 @@
1
-
2
- from diagrams import Diagram, Cluster
3
-
4
- from diagrams.aws.management import Organizations, OrganizationsAccount, OrganizationsOrganizationalUnit
5
- from diagrams.aws.general import Users, User
6
-
7
- with Diagram("SSO-State", show=False, direction="TB"):
8
- gg = Users("Group")
9
- uu= User("User")
10
-
11
- with Cluster('Groups'):
12
-
13
- gg_0= Users("AWSSecurityAudit\nors")
14
-
15
- gg_1= Users("AWSServiceCatalo\ngAdmins")
16
-
17
- gg_2= Users("AWSAuditAccountA\ndmins")
18
-
19
- with Cluster("SecOps_Adms"):
20
-
21
- gg_3= [User("w.alejovl+secops\n-labs@gmail.com"),]
22
-
23
- gg_4= Users("AWSLogArchiveAdm\nins")
24
-
25
- gg_5= Users("AWSSecurityAudit\nPowerUsers")
26
-
27
- with Cluster("AWSControlTowerAdmins"):
28
-
29
- gg_6= [User("velez94@protonma\nil.com"),]
30
-
31
- with Cluster("AWSAccountFactory"):
32
-
33
- gg_7= [User("velez94@protonma\nil.com"),]
34
-
35
- gg_8= Users("AWSLogArchiveVie\nwers")
36
-
37
- with Cluster("DevSecOps_Admins"):
38
-
39
- gg_9= [User("DevSecOpsAdm"),]
graph_sso_complete.py DELETED
@@ -1,596 +0,0 @@
1
-
2
- from diagrams import Diagram, Cluster, Edge
3
-
4
- from diagrams.aws.management import Organizations, OrganizationsAccount, OrganizationsOrganizationalUnit
5
- from diagrams.aws.general import Users, User
6
- from diagrams.aws.security import IAMPermissions
7
- with Diagram("IAM Identity Center", show=False, direction="LR"):
8
- gg = Users("Group")
9
- uu = User("User")
10
- pp= IAMPermissions("PermissionsSet")
11
- ou = OrganizationsOrganizationalUnit("PermissionsAssignments")
12
-
13
- with Cluster('Account: Log archive'):
14
-
15
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
16
-
17
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
18
- gg_AWSSecurityAuditPowerUsers \
19
- - Edge(color="brown", style="dotted", label="Permissions Set") \
20
- - IAMPermissions("AWSPowerUserAcce\nss")
21
- mm_AWSSecurityAuditPowerUsers=[]
22
- gg_AWSSecurityAuditPowerUsers \
23
- - Edge(color="darkgreen", style="dotted", label="Member") \
24
- - mm_AWSSecurityAuditPowerUsers
25
-
26
-
27
- with Cluster('Group: AWSControlTowerAdmins'):
28
-
29
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
30
- gg_AWSControlTowerAdmins \
31
- - Edge(color="brown", style="dotted", label="Permissions Set") \
32
- - IAMPermissions("AWSAdministrator\nAccess")
33
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
34
- gg_AWSControlTowerAdmins \
35
- - Edge(color="darkgreen", style="dotted", label="Member") \
36
- - mm_AWSControlTowerAdmins
37
-
38
-
39
- with Cluster('Group: AWSLogArchiveAdmins'):
40
-
41
- gg_AWSLogArchiveAdmins=Users("AWSLogArchiveAdm\nins")
42
- gg_AWSLogArchiveAdmins \
43
- - Edge(color="brown", style="dotted", label="Permissions Set") \
44
- - IAMPermissions("AWSAdministrator\nAccess")
45
- mm_AWSLogArchiveAdmins=[]
46
- gg_AWSLogArchiveAdmins \
47
- - Edge(color="darkgreen", style="dotted", label="Member") \
48
- - mm_AWSLogArchiveAdmins
49
-
50
-
51
- with Cluster('Group: AWSSecurityAuditors'):
52
-
53
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
54
- gg_AWSSecurityAuditors \
55
- - Edge(color="brown", style="dotted", label="Permissions Set") \
56
- - IAMPermissions("AWSReadOnlyAccess")
57
- mm_AWSSecurityAuditors=[]
58
- gg_AWSSecurityAuditors \
59
- - Edge(color="darkgreen", style="dotted", label="Member") \
60
- - mm_AWSSecurityAuditors
61
-
62
-
63
- with Cluster('Group: AWSLogArchiveViewers'):
64
-
65
- gg_AWSLogArchiveViewers=Users("AWSLogArchiveVie\nwers")
66
- gg_AWSLogArchiveViewers \
67
- - Edge(color="brown", style="dotted", label="Permissions Set") \
68
- - IAMPermissions("AWSReadOnlyAccess")
69
- mm_AWSLogArchiveViewers=[]
70
- gg_AWSLogArchiveViewers \
71
- - Edge(color="darkgreen", style="dotted", label="Member") \
72
- - mm_AWSLogArchiveViewers
73
-
74
-
75
- with Cluster('Account: SecOps'):
76
-
77
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
78
-
79
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
80
- gg_AWSSecurityAuditPowerUsers \
81
- - Edge(color="brown", style="dotted", label="Permissions Set") \
82
- - IAMPermissions("AWSPowerUserAcce\nss")
83
- mm_AWSSecurityAuditPowerUsers=[]
84
- gg_AWSSecurityAuditPowerUsers \
85
- - Edge(color="darkgreen", style="dotted", label="Member") \
86
- - mm_AWSSecurityAuditPowerUsers
87
-
88
-
89
- with Cluster('User: w.alejovl+secops-labs@gmail.com'):
90
-
91
- uu_walejovlsecopslabsgmailcom=User("w.alejovl+secops\n-labs@gmail.com")
92
- uu_walejovlsecopslabsgmailcom \
93
- - Edge(color="brown", style="dotted") \
94
- - IAMPermissions("AWSAdministrator\nAccess")
95
-
96
- with Cluster('Group: AWSSecurityAuditors'):
97
-
98
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
99
- gg_AWSSecurityAuditors \
100
- - Edge(color="brown", style="dotted", label="Permissions Set") \
101
- - IAMPermissions("AWSReadOnlyAccess")
102
- mm_AWSSecurityAuditors=[]
103
- gg_AWSSecurityAuditors \
104
- - Edge(color="darkgreen", style="dotted", label="Member") \
105
- - mm_AWSSecurityAuditors
106
-
107
-
108
- with Cluster('Group: AWSControlTowerAdmins'):
109
-
110
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
111
- gg_AWSControlTowerAdmins \
112
- - Edge(color="brown", style="dotted", label="Permissions Set") \
113
- - IAMPermissions("AWSOrganizations\nFullAccess")
114
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
115
- gg_AWSControlTowerAdmins \
116
- - Edge(color="darkgreen", style="dotted", label="Member") \
117
- - mm_AWSControlTowerAdmins
118
-
119
-
120
- with Cluster('Account: Prod'):
121
-
122
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
123
-
124
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
125
- gg_AWSSecurityAuditPowerUsers \
126
- - Edge(color="brown", style="dotted", label="Permissions Set") \
127
- - IAMPermissions("AWSPowerUserAcce\nss")
128
- mm_AWSSecurityAuditPowerUsers=[]
129
- gg_AWSSecurityAuditPowerUsers \
130
- - Edge(color="darkgreen", style="dotted", label="Member") \
131
- - mm_AWSSecurityAuditPowerUsers
132
-
133
-
134
- with Cluster('Group: DevSecOps_Admins'):
135
-
136
- gg_DevSecOps_Admins=Users("DevSecOps_Admins")
137
- gg_DevSecOps_Admins \
138
- - Edge(color="brown", style="dotted", label="Permissions Set") \
139
- - IAMPermissions("AWSAdministrator\nAccess")
140
- mm_DevSecOps_Admins=[User("DevSecOpsAdm"),]
141
- gg_DevSecOps_Admins \
142
- - Edge(color="darkgreen", style="dotted", label="Member") \
143
- - mm_DevSecOps_Admins
144
-
145
-
146
- with Cluster('User: w.alejovl+prod-labs@gmail.com'):
147
-
148
- uu_walejovlprodlabsgmailcom=User("w.alejovl+prod-l\nabs@gmail.com")
149
- uu_walejovlprodlabsgmailcom \
150
- - Edge(color="brown", style="dotted") \
151
- - IAMPermissions("AWSAdministrator\nAccess")
152
-
153
- with Cluster('Group: AWSSecurityAuditors'):
154
-
155
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
156
- gg_AWSSecurityAuditors \
157
- - Edge(color="brown", style="dotted", label="Permissions Set") \
158
- - IAMPermissions("AWSReadOnlyAccess")
159
- mm_AWSSecurityAuditors=[]
160
- gg_AWSSecurityAuditors \
161
- - Edge(color="darkgreen", style="dotted", label="Member") \
162
- - mm_AWSSecurityAuditors
163
-
164
-
165
- with Cluster('Group: AWSControlTowerAdmins'):
166
-
167
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
168
- gg_AWSControlTowerAdmins \
169
- - Edge(color="brown", style="dotted", label="Permissions Set") \
170
- - IAMPermissions("AWSOrganizations\nFullAccess")
171
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
172
- gg_AWSControlTowerAdmins \
173
- - Edge(color="darkgreen", style="dotted", label="Member") \
174
- - mm_AWSControlTowerAdmins
175
-
176
-
177
- with Cluster('Account: SecurityTooling'):
178
-
179
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
180
-
181
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
182
- gg_AWSSecurityAuditPowerUsers \
183
- - Edge(color="brown", style="dotted", label="Permissions Set") \
184
- - IAMPermissions("AWSPowerUserAcce\nss")
185
- mm_AWSSecurityAuditPowerUsers=[]
186
- gg_AWSSecurityAuditPowerUsers \
187
- - Edge(color="darkgreen", style="dotted", label="Member") \
188
- - mm_AWSSecurityAuditPowerUsers
189
-
190
-
191
- with Cluster('Group: SecOps_Adms'):
192
-
193
- gg_SecOps_Adms=Users("SecOps_Adms")
194
- gg_SecOps_Adms \
195
- - Edge(color="brown", style="dotted", label="Permissions Set") \
196
- - IAMPermissions("LabvelSecOpsAdms")
197
- mm_SecOps_Adms=[User("w.alejovl+secops\n-labs@gmail.com"),]
198
- gg_SecOps_Adms \
199
- - Edge(color="darkgreen", style="dotted", label="Member") \
200
- - mm_SecOps_Adms
201
-
202
-
203
- with Cluster('Group: AWSControlTowerAdmins'):
204
-
205
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
206
- gg_AWSControlTowerAdmins \
207
- - Edge(color="brown", style="dotted", label="Permissions Set") \
208
- - IAMPermissions("AWSAdministrator\nAccess")
209
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
210
- gg_AWSControlTowerAdmins \
211
- - Edge(color="darkgreen", style="dotted", label="Member") \
212
- - mm_AWSControlTowerAdmins
213
-
214
-
215
- with Cluster('Group: AWSAuditAccountAdmins'):
216
-
217
- gg_AWSAuditAccountAdmins=Users("AWSAuditAccountA\ndmins")
218
- gg_AWSAuditAccountAdmins \
219
- - Edge(color="brown", style="dotted", label="Permissions Set") \
220
- - IAMPermissions("AWSAdministrator\nAccess")
221
- mm_AWSAuditAccountAdmins=[]
222
- gg_AWSAuditAccountAdmins \
223
- - Edge(color="darkgreen", style="dotted", label="Member") \
224
- - mm_AWSAuditAccountAdmins
225
-
226
-
227
- with Cluster('Group: AWSSecurityAuditors'):
228
-
229
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
230
- gg_AWSSecurityAuditors \
231
- - Edge(color="brown", style="dotted", label="Permissions Set") \
232
- - IAMPermissions("AWSReadOnlyAccess")
233
- mm_AWSSecurityAuditors=[]
234
- gg_AWSSecurityAuditors \
235
- - Edge(color="darkgreen", style="dotted", label="Member") \
236
- - mm_AWSSecurityAuditors
237
-
238
-
239
- with Cluster('Account: DevSecOps'):
240
-
241
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
242
-
243
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
244
- gg_AWSSecurityAuditPowerUsers \
245
- - Edge(color="brown", style="dotted", label="Permissions Set") \
246
- - IAMPermissions("AWSPowerUserAcce\nss")
247
- mm_AWSSecurityAuditPowerUsers=[]
248
- gg_AWSSecurityAuditPowerUsers \
249
- - Edge(color="darkgreen", style="dotted", label="Member") \
250
- - mm_AWSSecurityAuditPowerUsers
251
-
252
-
253
- with Cluster('Group: DevSecOps_Admins'):
254
-
255
- gg_DevSecOps_Admins=Users("DevSecOps_Admins")
256
- gg_DevSecOps_Admins \
257
- - Edge(color="brown", style="dotted", label="Permissions Set") \
258
- - IAMPermissions("LabvelDevSecOpsU\nsers")
259
- mm_DevSecOps_Admins=[User("DevSecOpsAdm"),]
260
- gg_DevSecOps_Admins \
261
- - Edge(color="darkgreen", style="dotted", label="Member") \
262
- - mm_DevSecOps_Admins
263
-
264
-
265
- with Cluster('Group: DevSecOps_Admins'):
266
-
267
- gg_DevSecOps_Admins=Users("DevSecOps_Admins")
268
- gg_DevSecOps_Admins \
269
- - Edge(color="brown", style="dotted", label="Permissions Set") \
270
- - IAMPermissions("AWSAdministrator\nAccess")
271
- mm_DevSecOps_Admins=[User("DevSecOpsAdm"),]
272
- gg_DevSecOps_Admins \
273
- - Edge(color="darkgreen", style="dotted", label="Member") \
274
- - mm_DevSecOps_Admins
275
-
276
-
277
- with Cluster('User: w.alejovl+devsecops-labs@gmail.com'):
278
-
279
- uu_walejovldevsecopslabsgmailcom=User("w.alejovl+devsec\nops-labs@gmail.com")
280
- uu_walejovldevsecopslabsgmailcom \
281
- - Edge(color="brown", style="dotted") \
282
- - IAMPermissions("AWSAdministrator\nAccess")
283
-
284
- with Cluster('Group: DevSecOps_Admins'):
285
-
286
- gg_DevSecOps_Admins=Users("DevSecOps_Admins")
287
- gg_DevSecOps_Admins \
288
- - Edge(color="brown", style="dotted", label="Permissions Set") \
289
- - IAMPermissions("LabvelDevSecOpsRW")
290
- mm_DevSecOps_Admins=[User("DevSecOpsAdm"),]
291
- gg_DevSecOps_Admins \
292
- - Edge(color="darkgreen", style="dotted", label="Member") \
293
- - mm_DevSecOps_Admins
294
-
295
-
296
- with Cluster('Group: AWSSecurityAuditors'):
297
-
298
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
299
- gg_AWSSecurityAuditors \
300
- - Edge(color="brown", style="dotted", label="Permissions Set") \
301
- - IAMPermissions("AWSReadOnlyAccess")
302
- mm_AWSSecurityAuditors=[]
303
- gg_AWSSecurityAuditors \
304
- - Edge(color="darkgreen", style="dotted", label="Member") \
305
- - mm_AWSSecurityAuditors
306
-
307
-
308
- with Cluster('Group: AWSControlTowerAdmins'):
309
-
310
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
311
- gg_AWSControlTowerAdmins \
312
- - Edge(color="brown", style="dotted", label="Permissions Set") \
313
- - IAMPermissions("AWSOrganizations\nFullAccess")
314
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
315
- gg_AWSControlTowerAdmins \
316
- - Edge(color="darkgreen", style="dotted", label="Member") \
317
- - mm_AWSControlTowerAdmins
318
-
319
-
320
- with Cluster('Account: Ops'):
321
-
322
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
323
-
324
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
325
- gg_AWSSecurityAuditPowerUsers \
326
- - Edge(color="brown", style="dotted", label="Permissions Set") \
327
- - IAMPermissions("AWSPowerUserAcce\nss")
328
- mm_AWSSecurityAuditPowerUsers=[]
329
- gg_AWSSecurityAuditPowerUsers \
330
- - Edge(color="darkgreen", style="dotted", label="Member") \
331
- - mm_AWSSecurityAuditPowerUsers
332
-
333
-
334
- with Cluster('User: w.alejovl+ct-labs@gmail.com'):
335
-
336
- uu_walejovlctlabsgmailcom=User("w.alejovl+ct-lab\ns@gmail.com")
337
- uu_walejovlctlabsgmailcom \
338
- - Edge(color="brown", style="dotted") \
339
- - IAMPermissions("AWSAdministrator\nAccess")
340
-
341
- with Cluster('Group: AWSSecurityAuditors'):
342
-
343
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
344
- gg_AWSSecurityAuditors \
345
- - Edge(color="brown", style="dotted", label="Permissions Set") \
346
- - IAMPermissions("AWSReadOnlyAccess")
347
- mm_AWSSecurityAuditors=[]
348
- gg_AWSSecurityAuditors \
349
- - Edge(color="darkgreen", style="dotted", label="Member") \
350
- - mm_AWSSecurityAuditors
351
-
352
-
353
- with Cluster('Group: AWSControlTowerAdmins'):
354
-
355
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
356
- gg_AWSControlTowerAdmins \
357
- - Edge(color="brown", style="dotted", label="Permissions Set") \
358
- - IAMPermissions("AWSOrganizations\nFullAccess")
359
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
360
- gg_AWSControlTowerAdmins \
361
- - Edge(color="darkgreen", style="dotted", label="Member") \
362
- - mm_AWSControlTowerAdmins
363
-
364
-
365
- with Cluster('Account: SharedServices'):
366
-
367
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
368
-
369
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
370
- gg_AWSSecurityAuditPowerUsers \
371
- - Edge(color="brown", style="dotted", label="Permissions Set") \
372
- - IAMPermissions("AWSPowerUserAcce\nss")
373
- mm_AWSSecurityAuditPowerUsers=[]
374
- gg_AWSSecurityAuditPowerUsers \
375
- - Edge(color="darkgreen", style="dotted", label="Member") \
376
- - mm_AWSSecurityAuditPowerUsers
377
-
378
-
379
- with Cluster('Group: DevSecOps_Admins'):
380
-
381
- gg_DevSecOps_Admins=Users("DevSecOps_Admins")
382
- gg_DevSecOps_Admins \
383
- - Edge(color="brown", style="dotted", label="Permissions Set") \
384
- - IAMPermissions("AWSAdministrator\nAccess")
385
- mm_DevSecOps_Admins=[User("DevSecOpsAdm"),]
386
- gg_DevSecOps_Admins \
387
- - Edge(color="darkgreen", style="dotted", label="Member") \
388
- - mm_DevSecOps_Admins
389
-
390
-
391
- with Cluster('User: w.alejovl+shared-labs@gmail.com'):
392
-
393
- uu_walejovlsharedlabsgmailcom=User("w.alejovl+shared\n-labs@gmail.com")
394
- uu_walejovlsharedlabsgmailcom \
395
- - Edge(color="brown", style="dotted") \
396
- - IAMPermissions("AWSAdministrator\nAccess")
397
-
398
- with Cluster('Group: AWSSecurityAuditors'):
399
-
400
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
401
- gg_AWSSecurityAuditors \
402
- - Edge(color="brown", style="dotted", label="Permissions Set") \
403
- - IAMPermissions("AWSReadOnlyAccess")
404
- mm_AWSSecurityAuditors=[]
405
- gg_AWSSecurityAuditors \
406
- - Edge(color="darkgreen", style="dotted", label="Member") \
407
- - mm_AWSSecurityAuditors
408
-
409
-
410
- with Cluster('Group: AWSControlTowerAdmins'):
411
-
412
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
413
- gg_AWSControlTowerAdmins \
414
- - Edge(color="brown", style="dotted", label="Permissions Set") \
415
- - IAMPermissions("AWSOrganizations\nFullAccess")
416
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
417
- gg_AWSControlTowerAdmins \
418
- - Edge(color="darkgreen", style="dotted", label="Member") \
419
- - mm_AWSControlTowerAdmins
420
-
421
-
422
- with Cluster('Account: LabVel'):
423
-
424
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
425
-
426
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
427
- gg_AWSSecurityAuditPowerUsers \
428
- - Edge(color="brown", style="dotted", label="Permissions Set") \
429
- - IAMPermissions("AWSPowerUserAcce\nss")
430
- mm_AWSSecurityAuditPowerUsers=[]
431
- gg_AWSSecurityAuditPowerUsers \
432
- - Edge(color="darkgreen", style="dotted", label="Member") \
433
- - mm_AWSSecurityAuditPowerUsers
434
-
435
-
436
- with Cluster('Group: AWSAccountFactory'):
437
-
438
- gg_AWSAccountFactory=Users("AWSAccountFactory")
439
- gg_AWSAccountFactory \
440
- - Edge(color="brown", style="dotted", label="Permissions Set") \
441
- - IAMPermissions("AWSServiceCatalo\ngEndUserAccess")
442
- mm_AWSAccountFactory=[User("velez94@protonma\nil.com"),]
443
- gg_AWSAccountFactory \
444
- - Edge(color="darkgreen", style="dotted", label="Member") \
445
- - mm_AWSAccountFactory
446
-
447
-
448
- with Cluster('Group: AWSControlTowerAdmins'):
449
-
450
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
451
- gg_AWSControlTowerAdmins \
452
- - Edge(color="brown", style="dotted", label="Permissions Set") \
453
- - IAMPermissions("AWSAdministrator\nAccess")
454
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
455
- gg_AWSControlTowerAdmins \
456
- - Edge(color="darkgreen", style="dotted", label="Member") \
457
- - mm_AWSControlTowerAdmins
458
-
459
-
460
- with Cluster('Group: AWSSecurityAuditors'):
461
-
462
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
463
- gg_AWSSecurityAuditors \
464
- - Edge(color="brown", style="dotted", label="Permissions Set") \
465
- - IAMPermissions("AWSReadOnlyAccess")
466
- mm_AWSSecurityAuditors=[]
467
- gg_AWSSecurityAuditors \
468
- - Edge(color="darkgreen", style="dotted", label="Member") \
469
- - mm_AWSSecurityAuditors
470
-
471
-
472
- with Cluster('Group: AWSServiceCatalogAdmins'):
473
-
474
- gg_AWSServiceCatalogAdmins=Users("AWSServiceCatalo\ngAdmins")
475
- gg_AWSServiceCatalogAdmins \
476
- - Edge(color="brown", style="dotted", label="Permissions Set") \
477
- - IAMPermissions("AWSServiceCatalo\ngAdminFullAccess")
478
- mm_AWSServiceCatalogAdmins=[]
479
- gg_AWSServiceCatalogAdmins \
480
- - Edge(color="darkgreen", style="dotted", label="Member") \
481
- - mm_AWSServiceCatalogAdmins
482
-
483
-
484
- with Cluster('Account: OrganizationManager'):
485
-
486
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
487
-
488
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
489
- gg_AWSSecurityAuditPowerUsers \
490
- - Edge(color="brown", style="dotted", label="Permissions Set") \
491
- - IAMPermissions("AWSPowerUserAcce\nss")
492
- mm_AWSSecurityAuditPowerUsers=[]
493
- gg_AWSSecurityAuditPowerUsers \
494
- - Edge(color="darkgreen", style="dotted", label="Member") \
495
- - mm_AWSSecurityAuditPowerUsers
496
-
497
-
498
- with Cluster('Group: SecOps_Adms'):
499
-
500
- gg_SecOps_Adms=Users("SecOps_Adms")
501
- gg_SecOps_Adms \
502
- - Edge(color="brown", style="dotted", label="Permissions Set") \
503
- - IAMPermissions("LabvelSecOpsAdms")
504
- mm_SecOps_Adms=[User("w.alejovl+secops\n-labs@gmail.com"),]
505
- gg_SecOps_Adms \
506
- - Edge(color="darkgreen", style="dotted", label="Member") \
507
- - mm_SecOps_Adms
508
-
509
-
510
- with Cluster('User: w.alejovl+orgman-labs@gmail.com'):
511
-
512
- uu_walejovlorgmanlabsgmailcom=User("w.alejovl+orgman\n-labs@gmail.com")
513
- uu_walejovlorgmanlabsgmailcom \
514
- - Edge(color="brown", style="dotted") \
515
- - IAMPermissions("AWSAdministrator\nAccess")
516
-
517
- with Cluster('Group: AWSSecurityAuditors'):
518
-
519
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
520
- gg_AWSSecurityAuditors \
521
- - Edge(color="brown", style="dotted", label="Permissions Set") \
522
- - IAMPermissions("AWSReadOnlyAccess")
523
- mm_AWSSecurityAuditors=[]
524
- gg_AWSSecurityAuditors \
525
- - Edge(color="darkgreen", style="dotted", label="Member") \
526
- - mm_AWSSecurityAuditors
527
-
528
-
529
- with Cluster('Group: AWSControlTowerAdmins'):
530
-
531
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
532
- gg_AWSControlTowerAdmins \
533
- - Edge(color="brown", style="dotted", label="Permissions Set") \
534
- - IAMPermissions("AWSOrganizations\nFullAccess")
535
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
536
- gg_AWSControlTowerAdmins \
537
- - Edge(color="darkgreen", style="dotted", label="Member") \
538
- - mm_AWSControlTowerAdmins
539
-
540
-
541
- with Cluster('Account: Dev'):
542
-
543
- with Cluster('Group: AWSSecurityAuditPowerUsers'):
544
-
545
- gg_AWSSecurityAuditPowerUsers=Users("AWSSecurityAudit\nPowerUsers")
546
- gg_AWSSecurityAuditPowerUsers \
547
- - Edge(color="brown", style="dotted", label="Permissions Set") \
548
- - IAMPermissions("AWSPowerUserAcce\nss")
549
- mm_AWSSecurityAuditPowerUsers=[]
550
- gg_AWSSecurityAuditPowerUsers \
551
- - Edge(color="darkgreen", style="dotted", label="Member") \
552
- - mm_AWSSecurityAuditPowerUsers
553
-
554
-
555
- with Cluster('Group: DevSecOps_Admins'):
556
-
557
- gg_DevSecOps_Admins=Users("DevSecOps_Admins")
558
- gg_DevSecOps_Admins \
559
- - Edge(color="brown", style="dotted", label="Permissions Set") \
560
- - IAMPermissions("AWSAdministrator\nAccess")
561
- mm_DevSecOps_Admins=[User("DevSecOpsAdm"),]
562
- gg_DevSecOps_Admins \
563
- - Edge(color="darkgreen", style="dotted", label="Member") \
564
- - mm_DevSecOps_Admins
565
-
566
-
567
- with Cluster('User: w.alejovl+dev-labs@gmail.com'):
568
-
569
- uu_walejovldevlabsgmailcom=User("w.alejovl+dev-la\nbs@gmail.com")
570
- uu_walejovldevlabsgmailcom \
571
- - Edge(color="brown", style="dotted") \
572
- - IAMPermissions("AWSAdministrator\nAccess")
573
-
574
- with Cluster('Group: AWSSecurityAuditors'):
575
-
576
- gg_AWSSecurityAuditors=Users("AWSSecurityAudit\nors")
577
- gg_AWSSecurityAuditors \
578
- - Edge(color="brown", style="dotted", label="Permissions Set") \
579
- - IAMPermissions("AWSReadOnlyAccess")
580
- mm_AWSSecurityAuditors=[]
581
- gg_AWSSecurityAuditors \
582
- - Edge(color="darkgreen", style="dotted", label="Member") \
583
- - mm_AWSSecurityAuditors
584
-
585
-
586
- with Cluster('Group: AWSControlTowerAdmins'):
587
-
588
- gg_AWSControlTowerAdmins=Users("AWSControlTowerA\ndmins")
589
- gg_AWSControlTowerAdmins \
590
- - Edge(color="brown", style="dotted", label="Permissions Set") \
591
- - IAMPermissions("AWSOrganizations\nFullAccess")
592
- mm_AWSControlTowerAdmins=[User("velez94@protonma\nil.com"),]
593
- gg_AWSControlTowerAdmins \
594
- - Edge(color="darkgreen", style="dotted", label="Member") \
595
- - mm_AWSControlTowerAdmins
596
-
@@ -1,21 +0,0 @@
1
- __init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- graph_org.py,sha256=pKRj8UT59SdjLYoZZO4t1bcv6_k45yfMQ1sWeJD0-JQ,2529
3
- graph_sso.py,sha256=mi6TW_EbQ1W2UyWhItH8WkGj67LwOy_hk2B1tCn1yR0,1016
4
- graph_sso_complete.py,sha256=lEuaOzroPL7aOnhpif1Junn2wCor8iRLDcpQy9-CePE,27380
5
- src/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
- src/reverse_diagrams.py,sha256=ByZ7Qxr3HV-qTF_05IBfU3e0ZjR8qoU4bQ130Xq2Ae8,7914
7
- src/aws/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
- src/aws/describe_identity_store.py,sha256=QT5tqqFViRU2XQ0dq2VM0kxX4UvGKbgGmvVz9jllHBs,4180
9
- src/aws/describe_organization.py,sha256=ki0o3VhtH6mMV6EmZzlKPRfL5SKKVZGweK3NEiChXfY,3053
10
- src/aws/describe_sso.py,sha256=AOob-7fQk6paWjBT3dBx0Fizb5IhjWp1IIrOIv6s-yQ,1720
11
- src/banner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
- src/banner/banner.py,sha256=b2YVfSa7ZhuxCT6G_NFl5a7yC6T9cWB4XG_T9aHiwIY,12441
13
- src/dgms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- src/dgms/graph_mapper.py,sha256=JNCFfpS-yp7kJSzEAJoUTxF-epomCMorrsHuPLq8NL4,6081
15
- src/dgms/graph_template.py,sha256=4twiySM5MFl3oRpLkjTGgdswIwi2ee3lTjPmTx5SmG4,1170
16
- src/export_report/export_csv.py,sha256=6A3ZpoBnk6l1GVVmpH-_id6vKdd6JGipNCUwURtyIUs,88
17
- reverse_diagrams-0.2.1.dist-info/METADATA,sha256=aBwKpd-Kr6A1rqFX298NgtIFBwzymEva8RvuyIULGV8,5111
18
- reverse_diagrams-0.2.1.dist-info/WHEEL,sha256=hKi7AIIx6qfnsRbr087vpeJnrVUuDokDHZacPPMW7-Y,87
19
- reverse_diagrams-0.2.1.dist-info/entry_points.txt,sha256=VZNkrc7qUDbddTCH3pGd83EhUT3PHTx9MzpAk6bb6qc,63
20
- reverse_diagrams-0.2.1.dist-info/licenses/LICENSE,sha256=MM9PkfvzhAUao9B4KNX1DhHSKAhDf_-raLPgZPldwhw,1095
21
- reverse_diagrams-0.2.1.dist-info/RECORD,,