|
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 |
7 | | -from diagrams.aws.management import Cloudtrail, Cloudwatch |
| 7 | +from diagrams.aws.management import Cloudtrail, Cloudwatch, CloudformationStack |
8 | 8 | from diagrams.aws.security import IAM, IAMRole |
9 | 9 | from diagrams.aws.storage import S3 |
10 | 10 | from diagrams.custom import Custom |
|
23 | 23 | color_event="firebrick" |
24 | 24 | color_scanning = "dark-green" |
25 | 25 | color_permission="red" |
| 26 | +color_creates="darkblue" |
26 | 27 | color_non_important="gray" |
27 | 28 | color_sysdig="lightblue" |
28 | 29 |
|
|
32 | 33 |
|
33 | 34 | with Cluster("AWS organization"): |
34 | 35 |
|
35 | | - |
36 | 36 | with Cluster("management account"): |
37 | 37 |
|
38 | | - cloudtrail = Cloudtrail("cloudtrail", shape="plaintext") |
39 | | - |
| 38 | + with Cluster("Events"): |
| 39 | + cloudtrail = Cloudtrail("cloudtrail", shape="plaintext") |
| 40 | + cloudtrail_s3 = S3("cloudtrail-s3-events") |
| 41 | + sns = SNS("cloudtrail-sns-events", comment="i'm a graph") |
40 | 42 |
|
41 | 43 | 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) |
43 | | - cloudtrail_s3 = S3("cloudtrail-s3-events") |
44 | | - sns = SNS("cloudtrail-sns-events", comment="i'm a graph") |
| 44 | + secure_for_cloud_role = IAMRole("SysdigSecureForCloudRole\n\(enabled to assumeRole on \n`OrganizationAccountAccessRole`)", **role_attr) |
| 45 | + cft_stack_set = CloudformationStack("cloudformation-stackset") |
45 | 46 |
|
46 | 47 | cloudtrail >> Edge(color=color_event, style="dashed") >> cloudtrail_s3 >> Edge(color=color_event, style="dashed") >> sns |
| 48 | + # cloudtrail_s3 >> Edge(style="invis") >> cft_stack_set |
47 | 49 |
|
48 | 50 | with Cluster("member accounts (main targets)", graph_attr={"bgcolor":"lightblue"}): |
49 | 51 | member_accounts = General("account-1..n") |
50 | | - org_member_role_1 = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. member accounts)", **role_attr) |
| 52 | + org_member_role_1 = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. \nmember accounts)", **role_attr) |
51 | 53 | ecr = ECR("container-registry\n *within any account") |
52 | 54 |
|
| 55 | + with Cluster("CFT StackSet Instance"): |
| 56 | + cft_stack = CloudformationStack("cloudformation-stack") |
| 57 | + cloud_bench_role = IAMRole("SysdigCloudBench\n(aws:SecurityAudit policy)", **role_attr) |
| 58 | + cft_stack >> Edge(color=color_creates) >> cloud_bench_role |
53 | 59 |
|
54 | 60 | with Cluster("member account (secure for cloud)", graph_attr={"bgcolor":"seashell2"}): |
55 | 61 |
|
56 | | - org_member_role_2 = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. member accounts)", **role_attr) |
| 62 | + org_member_role_2 = IAMRole("OrganizationAccountAccessRole\n(created by AWS for org. \nmember accounts)", **role_attr) |
57 | 63 |
|
58 | 64 | sqs = SQS("cloudtrail-sqs") |
59 | 65 | s3_config = S3("cloud-connector-config") |
60 | 66 | cloudwatch = Cloudwatch("cloudwatch\nlogs and alarms") |
61 | 67 | codebuild = Codebuild("codebuild project") |
62 | 68 |
|
| 69 | + with Cluster("CFT StackSet Instance"): |
| 70 | + cft_stack_2 = CloudformationStack("cloudformation-stack") |
| 71 | + cloud_bench_role_2 = IAMRole("SysdigCloudBench\n(aws:SecurityAudit policy)", **role_attr) |
| 72 | + cft_stack_2 >> Edge(color=color_creates) >> cloud_bench_role_2 |
| 73 | + |
63 | 74 | with Cluster("ecs-cluster"): |
64 | 75 | cloud_connector = ElasticContainerServiceService("cloud-connector") |
65 | 76 | cloud_scanning = ElasticContainerServiceService("cloud-scanning") |
|
81 | 92 | # (cloudtrail_s3 << Edge(color=color_event) << |
82 | 93 |
|
83 | 94 |
|
| 95 | + cft_stack_set >> Edge(color=color_creates) >> cft_stack |
| 96 | + cft_stack_set >> Edge(color=color_creates) >> cft_stack_2 |
84 | 97 |
|
85 | 98 | with Cluster("AWS account (sysdig)"): |
86 | 99 | sds = Custom("Sysdig Secure", "../../resources/diag-sysdig-icon.png") |
|
89 | 102 | cloud_connector >> Edge(color=color_sysdig) >> sds |
90 | 103 | codebuild >> Edge(color=color_sysdig) >> sds |
91 | 104 |
|
| 105 | + sds >> Edge(color=color_permission) >> cloud_bench_role |
| 106 | + sds >> Edge(color=color_permission) >> cloud_bench_role_2 |
| 107 | + |
| 108 | + # Invisible edges to help with layout |
| 109 | + s3_config >> Edge(style="invis") >> member_accounts |
| 110 | + sns >> Edge(style="invis") >> org_member_role_2 |
| 111 | + |
| 112 | + |
92 | 113 | # secure_for_cloud_role >> Edge(color=color_permission, fontcolor=color_permission, xlable="assumeRole") >> org_member_role_1 |
93 | 114 |
|
94 | 115 |
|
|
0 commit comments