|
1 | 1 | # diagrams as code vía https://diagrams.mingrammer.com
|
2 | 2 | from diagrams import Cluster, Diagram, Edge, Node
|
3 |
| -from diagrams.aws.compute import ElasticContainerServiceService |
| 3 | +from diagrams.aws.compute import ElasticContainerServiceService, ECR |
4 | 4 | from diagrams.aws.devtools import Codebuild
|
5 | 5 | from diagrams.aws.general import General
|
6 | 6 | from diagrams.aws.integration import SNS, SQS
|
|
14 | 14 | }
|
15 | 15 |
|
16 | 16 | role_attr = {
|
17 |
| - "height":"1", |
18 |
| - "width":"0.8", |
| 17 | + "imagescale":"false", |
| 18 | + "height":"1.5", |
| 19 | + "width":"3", |
19 | 20 | "fontsize":"9",
|
20 | 21 | }
|
21 | 22 |
|
22 |
| -event_color="firebrick" |
| 23 | +color_event="firebrick" |
| 24 | +color_scanning = "dark-green" |
| 25 | +color_permission="red" |
| 26 | +color_non_important="gray" |
| 27 | +color_sysdig="lightblue" |
23 | 28 |
|
24 |
| -with Diagram("Sysdig Secure for Cloud\n(organizational usecase)", graph_attr=diagram_attr, filename="diagram-org", show=True): |
25 | 29 |
|
26 |
| - with Cluster("AWS organization"): |
27 |
| - |
28 |
| - with Cluster("member accounts (main targets)", graph_attr={"bgcolor":"lightblue"}): |
29 |
| - member_accounts = [General("account-1"), General("account-2"), General("..."), General("account-n")] |
30 | 30 |
|
31 |
| - org_member_role = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. member accounts)", **role_attr) |
| 31 | +with Diagram("Sysdig Secure for Cloud\n(organizational)", graph_attr=diagram_attr, filename="diagram-org", show=True, direction="LR"): |
32 | 32 |
|
| 33 | + with Cluster("AWS organization"): |
33 | 34 |
|
34 |
| - with Cluster("master account"): |
35 | 35 |
|
| 36 | + with Cluster("management account"): |
36 | 37 |
|
37 | 38 | cloudtrail = Cloudtrail("cloudtrail", shape="plaintext")
|
38 |
| - cloudtrail_legend = ("for clarity purpose events received from 'secure for cloud' member account\n\ |
39 |
| - and master account have been removed from diagram, but will be processed too ") |
40 | 39 |
|
41 |
| - Node(label=cloudtrail_legend, width="5",shape="plaintext", labelloc="t", fontsize="10") |
42 | 40 |
|
43 |
| - master_credentials = IAM("credentials \npermissions: cloudtrail, role creation,...", fontsize="10") |
44 |
| - secure_for_cloud_role = IAMRole("SysdigSecureForCloudRole", **role_attr) |
| 41 | + management_credentials = IAM("credentials \npermissions: cloudtrail, role creation,...", fontsize="10") |
| 42 | + secure_for_cloud_role = IAMRole("SysdigSecureForCloudRole\n\(enabled to assumeRole on `OrganizationAccountAccessRole`)", **role_attr) |
45 | 43 | cloudtrail_s3 = S3("cloudtrail-s3-events")
|
46 | 44 | sns = SNS("cloudtrail-sns-events", comment="i'm a graph")
|
47 | 45 |
|
48 |
| - cloudtrail >> Edge(color=event_color, style="dashed") >> cloudtrail_s3 >> Edge(color=event_color, style="dashed") >> sns |
| 46 | + cloudtrail >> Edge(color=color_event, style="dashed") >> cloudtrail_s3 >> Edge(color=color_event, style="dashed") >> sns |
49 | 47 |
|
| 48 | + with Cluster("member accounts (main targets)", graph_attr={"bgcolor":"lightblue"}): |
| 49 | + member_accounts = General("account-1..n") |
| 50 | + org_member_role_1 = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. member accounts)", **role_attr) |
| 51 | + ecr = ECR("container-registry\n *within any account") |
50 | 52 |
|
51 | 53 |
|
52 | 54 | with Cluster("member account (secure for cloud)", graph_attr={"bgcolor":"seashell2"}):
|
53 | 55 |
|
54 |
| - org_member_role = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. member accounts)", **role_attr) |
55 |
| - |
56 |
| - with Cluster("ecs-cluster"): |
57 |
| - cloud_connector = ElasticContainerServiceService("cloud-connector") |
58 |
| - cloud_scanning = ElasticContainerServiceService("cloud-scanning") |
| 56 | + org_member_role_2 = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. member accounts)", **role_attr) |
59 | 57 |
|
60 | 58 | sqs = SQS("cloudtrail-sqs")
|
61 | 59 | s3_config = S3("cloud-connector-config")
|
62 | 60 | cloudwatch = Cloudwatch("cloudwatch\nlogs and alarms")
|
63 |
| - codebuild = Codebuild("codebuild project") |
| 61 | + codebuild = Codebuild("codebuild project") |
64 | 62 |
|
65 |
| - sqs << Edge(color=event_color) << cloud_connector |
66 |
| - sqs << Edge(color=event_color) << cloud_scanning |
67 |
| - cloud_connector - s3_config |
68 |
| - cloud_connector >> cloudwatch |
| 63 | + with Cluster("ecs-cluster"): |
| 64 | + cloud_connector = ElasticContainerServiceService("cloud-connector") |
| 65 | + cloud_scanning = ElasticContainerServiceService("cloud-scanning") |
| 66 | + |
| 67 | + sqs << Edge(color=color_event) << cloud_connector |
| 68 | + sqs << Edge(color=color_event) << cloud_scanning |
| 69 | + cloud_connector - Edge(color=color_non_important) - s3_config |
| 70 | + cloud_connector >> Edge(color=color_non_important) >> cloudwatch |
| 71 | + cloud_scanning >> Edge(color=color_non_important) >> cloudwatch |
69 | 72 | cloud_scanning >> codebuild
|
| 73 | + codebuild >> Edge(color=color_non_important) >> ecr |
| 74 | + |
| 75 | + |
| 76 | + member_accounts >> Edge(color=color_event, style="dashed") >> cloudtrail |
| 77 | + sns >> Edge(color=color_event, style="dashed") >> sqs |
| 78 | +# cloudtrail_s3 << Edge(color=color_non_important) << cloud_connector |
| 79 | +# cloudtrail_s3 << Edge(color=color_non_important) << cloud_scanning |
| 80 | +# secure_for_cloud_role << Edge(color=color_permission, fontcolor=color_permission, xlabel="assumeRole") << cloud_connector |
| 81 | +# (cloudtrail_s3 << Edge(color=color_event) << |
70 | 82 |
|
71 | 83 |
|
72 |
| - member_accounts >> Edge(color=event_color, style="dashed") >> cloudtrail |
73 |
| - sns >> Edge(color=event_color, style="dashed") >> sqs |
74 |
| -# cloudtrail_s3 << Edge(color=event_color) << cloud_connector |
75 |
| - (cloudtrail_s3 << Edge(color=event_color) << secure_for_cloud_role) - Edge(xlabel="assumeRole", color=event_color) - cloud_connector |
76 | 84 |
|
77 | 85 | with Cluster("AWS account (sysdig)"):
|
78 | 86 | sds = Custom("Sysdig Secure", "../../resources/diag-sysdig-icon.png")
|
79 | 87 |
|
80 |
| - cloud_connector >> sds |
81 |
| - codebuild >> sds |
| 88 | + |
| 89 | + cloud_connector >> Edge(color=color_sysdig) >> sds |
| 90 | + codebuild >> Edge(color=color_sysdig) >> sds |
| 91 | + |
| 92 | +# secure_for_cloud_role >> Edge(color=color_permission, fontcolor=color_permission, xlable="assumeRole") >> org_member_role_1 |
| 93 | + |
| 94 | + |
| 95 | +# cloudtrail_legend = ("to simplify,\l- events received from 'secure for cloud' member account and management account have been removed from diagram, but will be processed too") |
| 96 | +# Node(label=cloudtrail_legend, shape="plaintext", labelloc="t", width="10", fontsize="10" ) |
0 commit comments