Skip to content

Commit 225c88c

Browse files
wideawakeningtemblekinghayk99Ruben EguiluzNestor Salceda
authored
feat(refact): rc 0.1.0 (#14)
* feat: root module/example refactor * chore(naming): misc/general block on variables * chore(test-bench): example for agentless on single-account * chore(cleanup): benchmark * chore: Add scanning to single-account diagram * chore(internal): removed README from benchmark example * chore(doc): diagram refact * chore(cleanup): diagrams,main,README's * chore(bench): version bump for bugfix * chore(doc): remove separator * chore(doc): add cloud_scanning - cloudwatch relation Co-authored-by: Fede Barcelona <fede.barcelona@sysdig.com> Co-authored-by: Hayk Kocharyan <hayk.kocharyan@sysdig.com> Co-authored-by: Ruben Eguiluz <ruben.eguiluz@sysdig.com> Co-authored-by: Nestor Salceda <nestor.salceda@sysdig.com> Co-authored-by: Hayk Kocharyan <hayk@MacBook-Pro-de-Hayk-Work.local>
1 parent 944c506 commit 225c88c

File tree

27 files changed

+424
-333
lines changed

27 files changed

+424
-333
lines changed

README.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ There are three major components:
1111

1212
For other Cloud providers check: [GCP](https://github.com/sysdiglabs/terraform-google-cloudvision), [Azure](https://github.com/sysdiglabs/terraform-azurerm-cloudvision)
1313

14-
---
1514

1615
## Usage
1716

@@ -32,19 +31,24 @@ More info in [`./examples/organizational`](https://github.com/sysdiglabs/terrafo
3231

3332
### · Self-Baked
3433

35-
If no [examples](https://github.com/sysdiglabs/terraform-aws-cloudvision/tree/master/examples) fit your use-case, be free to self-configure your own `cloudvision` module.
34+
If no [examples](https://github.com/sysdiglabs/terraform-aws-cloudvision/tree/master/examples) fit your use-case, be free to call desired modules directly.
35+
36+
In this use-case we will ONLY deploy cloud-bench, into the target account, calling modules directly
3637

3738
```terraform
38-
module "cloudvision_aws" {
39-
source = "sysdiglabs/cloudvision/aws"
39+
provider "aws" {
40+
region = var.region
41+
}
4042
41-
# required to pin cloudvision stack on single-account single-provider
42-
providers = {
43-
aws.cloudvision = aws
44-
}
43+
provider "sysdig" {
4544
sysdig_secure_api_token = "00000000-1111-2222-3333-444444444444"
4645
}
4746
47+
module "cloud_bench" {
48+
source = "sysdiglabs/cloudvision/aws//modules/cloud-bench"
49+
account_id = "AWS-ACCOUNT-ID" # can also be fetched from `aws_caller_identity.me`
50+
}
51+
4852
```
4953
See [inputs summary](#inputs) or main [module `variables.tf`](https://github.com/sysdiglabs/terraform-aws-cloudvision/tree/master/variables.tf) file for more optional configuration.
5054

@@ -59,7 +63,6 @@ Notice that:
5963
* This example will create resources that cost money.<br/>Run `terraform destroy` when you don't need them anymore
6064
* All created resources will be created within the tags `product:sysdig-cloudvision`, within the resource-group `sysdig-cloudvision`
6165

62-
---
6366

6467
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
6568
## Requirements
@@ -113,7 +116,7 @@ Notice that:
113116
| <a name="output_cloudtrail_s3_arn"></a> [cloudtrail\_s3\_arn](#output\_cloudtrail\_s3\_arn) | sydig-cloudvision cloudtrail s3 arn, required for organizational use case, in order to give proper permissions to cloudconnector role to assume |
114117
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
115118

116-
---
119+
117120
## Troubleshooting
118121

119122
- Q: How to **validate cloudvision cloud-connector (thread-detection) provisioning** is working as expected?<br/>
@@ -147,9 +150,6 @@ Notice that:
147150
source_profile=<AWS_MASTER_ACCOUNT_PROFILE>
148151
```
149152
150-
151-
---
152-
153153
## Authors
154154
155155
Module is maintained and supported by [Sysdig](https://sysdig.com).

examples/organizational/README.md

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Sysdig Secure for Cloud in AWS: Shared Organizational Trail
1+
# Sysdig Secure for Cloud in AWS :: Shared Organizational Trail
22

33
Deploy Sysdig Secure for Cloud sharing the Trail within an organization.
44
* In the **master account**
@@ -55,8 +55,6 @@ Notice that:
5555
* This example will create resources that cost money.<br/>Run `terraform destroy` when you don't need them anymore
5656
* All created resources will be created within the tags `product:sysdig-cloudvision`, within the resource-group `sysdig-cloudvision`
5757

58-
---
59-
6058

6159
<!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
6260
## Requirements
@@ -65,6 +63,7 @@ Notice that:
6563
|------|---------|
6664
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 0.15.0 |
6765
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 3.50.0 |
66+
| <a name="requirement_sysdig"></a> [sysdig](#requirement\_sysdig) | >= 0.5.17 |
6867

6968
## Providers
7069

@@ -76,27 +75,31 @@ Notice that:
7675

7776
| Name | Source | Version |
7877
|------|--------|---------|
79-
| <a name="module_cloudvision"></a> [cloudvision](#module\_cloudvision) | ../../ | |
78+
| <a name="module_cloud_connector"></a> [cloud\_connector](#module\_cloud\_connector) | ../../modules/services/cloud-connector | |
79+
| <a name="module_cloudtrail"></a> [cloudtrail](#module\_cloudtrail) | ../../modules/infrastructure/cloudtrail | |
8080
| <a name="module_cloudvision_role"></a> [cloudvision\_role](#module\_cloudvision\_role) | ../../modules/infrastructure/organizational/cloudvision-role | |
81+
| <a name="module_ecs_fargate_cluster"></a> [ecs\_fargate\_cluster](#module\_ecs\_fargate\_cluster) | ../../modules/infrastructure/ecs-fargate-cluster | |
8182
| <a name="module_resource_group_cloudvision_member"></a> [resource\_group\_cloudvision\_member](#module\_resource\_group\_cloudvision\_member) | ../../modules/infrastructure/resource-group | |
83+
| <a name="module_resource_group_master"></a> [resource\_group\_master](#module\_resource\_group\_master) | ../../modules/infrastructure/resource-group | |
84+
| <a name="module_ssm"></a> [ssm](#module\_ssm) | ../../modules/infrastructure/ssm | |
8285

8386
## Resources
8487

8588
| Name | Type |
8689
|------|------|
87-
| [aws_iam_role.task](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
90+
| [aws_iam_role.connector_ecs_task](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/iam_role) | resource |
8891
| [aws_iam_policy_document.task_assume_role](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document) | data source |
8992

9093
## Inputs
9194

9295
| Name | Description | Type | Default | Required |
9396
|------|-------------|------|---------|:--------:|
94-
| <a name="input_cloudvision_member_account_id"></a> [cloudvision\_member\_account\_id](#input\_cloudvision\_member\_account\_id) | the account\_id **within the organization** to be used as cloudvision account | `string` | n/a | yes |
97+
| <a name="input_cloudvision_member_account_id"></a> [cloudvision\_member\_account\_id](#input\_cloudvision\_member\_account\_id) | organizational member account where the cloudvision workload is going to be deployed | `string` | n/a | yes |
9598
| <a name="input_sysdig_secure_api_token"></a> [sysdig\_secure\_api\_token](#input\_sysdig\_secure\_api\_token) | Sysdig Secure API token | `string` | n/a | yes |
9699
| <a name="input_cloudtrail_is_multi_region_trail"></a> [cloudtrail\_is\_multi\_region\_trail](#input\_cloudtrail\_is\_multi\_region\_trail) | testing/economization purpose. true/false whether cloudtrail will ingest multiregional events | `bool` | `true` | no |
97100
| <a name="input_cloudtrail_kms_enable"></a> [cloudtrail\_kms\_enable](#input\_cloudtrail\_kms\_enable) | testing/economization purpose. true/false whether s3 should be encrypted | `bool` | `true` | no |
98101
| <a name="input_connector_ecs_task_role_name"></a> [connector\_ecs\_task\_role\_name](#input\_connector\_ecs\_task\_role\_name) | Name for the ecs task role. This is only required to resolve cyclic dependency with organizational approach | `string` | `"connector-ECSTaskRole"` | no |
99-
| <a name="input_name"></a> [name](#input\_name) | Name to be assigned to all child resources | `string` | `"sysdig-cloudvision"` | no |
102+
| <a name="input_name"></a> [name](#input\_name) | Name for the Cloud Vision deployment | `string` | `"sysdig-cloudvision"` | no |
100103
| <a name="input_region"></a> [region](#input\_region) | Default region for resource creation in both organization master and cloudvision member account | `string` | `"eu-central-1"` | no |
101104
| <a name="input_sysdig_secure_endpoint"></a> [sysdig\_secure\_endpoint](#input\_sysdig\_secure\_endpoint) | Sysdig Secure API endpoint | `string` | `"https://secure.sysdig.com"` | no |
102105
| <a name="input_tags"></a> [tags](#input\_tags) | sysdig cloudvision tags | `map(string)` | <pre>{<br> "product": "sysdig-cloudvision"<br>}</pre> | no |
@@ -106,8 +109,6 @@ Notice that:
106109
No outputs.
107110
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
108111

109-
---
110-
111112
## Authors
112113

113114
Module is maintained and supported by [Sysdig](https://sysdig.com).
10.4 KB
Loading

examples/organizational/diagram-org.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from diagrams.aws.storage import S3, SimpleStorageServiceS3Bucket
66
from diagrams.aws.integration import SNS
77
from diagrams.aws.integration import SQS
8-
from diagrams.aws.compute import ECS, ElasticContainerServiceService
8+
from diagrams.aws.compute import ElasticContainerServiceService
99
from diagrams.aws.security import IAMRole,IAM
1010
from diagrams.aws.management import Cloudwatch
1111

@@ -26,7 +26,7 @@
2626

2727
with Cluster("AWS organization"):
2828

29-
with Cluster("other accounts (member)", graph_attr={"bgcolor":"lightblue"}):
29+
with Cluster("member account (main targets)", graph_attr={"bgcolor":"lightblue"}):
3030
member_accounts = [General("account-1"),General("..."),General("account-n")]
3131

3232
org_member_role = IAMRole("OrganizationAccountAccessRole\ncreated by AWS for org. member accounts", **role_attr)
@@ -40,22 +40,21 @@
4040
and master account have been removed from diagram, but will be processed too ")
4141
Node(label=cloudtrail_legend, width="5",shape="plaintext", labelloc="t", fontsize="10")
4242

43-
44-
master_credentials = IAM("master-credentials \npermissions: cloudtrail, role creation", fontsize="10")
43+
master_credentials = IAM("credentials \npermissions: cloudtrail, role creation,...", fontsize="10")
4544
cloudvision_role = IAMRole("Sysdig-Cloudvision-Role", **role_attr)
4645
cloudtrail_s3 = S3("cloudtrail-s3-events")
4746
sns = SNS("cloudtrail-sns-events", comment="i'm a graph")
4847

4948
cloudtrail >> Edge(color=event_color, style="dashed") >> cloudtrail_s3 >> Edge(color=event_color, style="dashed") >> sns
5049

51-
with Cluster("cloudvision account (member)", graph_attr={"bgcolor":"seashell2"}):
50+
51+
52+
with Cluster("member account (cloudvision)", graph_attr={"bgcolor":"seashell2"}):
5253

5354
org_member_role = IAMRole("OrganizationAccountAccessRole\ncreated by AWS for org. member accounts", **role_attr)
5455

55-
with Cluster("ecs"):
56-
ecs = ECS("cloudvision")
56+
with Cluster("ecs-cluster"):
5757
cloud_connector = ElasticContainerServiceService("cloud-connector")
58-
ecs - cloud_connector
5958

6059
sqs = SQS("cloudtrail-sqs")
6160
s3_config = S3("cloud-connector-config")

examples/organizational/main.tf

Lines changed: 136 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,152 @@ provider "aws" {
1010
}
1111
}
1212

13-
module "cloudvision" {
14-
source = "../../"
13+
provider "sysdig" {
14+
sysdig_secure_url = var.sysdig_secure_endpoint
15+
sysdig_secure_api_token = var.sysdig_secure_api_token
16+
sysdig_secure_insecure_tls = length(regexall("https://.*?\\.sysdig(cloud)?.com/?", var.sysdig_secure_endpoint)) == 1 ? false : true
17+
}
18+
19+
#-------------------------------------
20+
# resources deployed always in master account
21+
# with default provider
22+
#-------------------------------------
23+
24+
module "resource_group_master" {
25+
source = "../../modules/infrastructure/resource-group"
26+
name = var.name
27+
tags = var.tags
28+
}
29+
30+
module "cloudtrail" {
31+
source = "../../modules/infrastructure/cloudtrail"
32+
name = var.name
33+
34+
is_organizational = true
35+
organizational_config = {
36+
cloudvision_member_account_id = var.cloudvision_member_account_id
37+
}
38+
39+
is_multi_region_trail = var.cloudtrail_is_multi_region_trail
40+
cloudtrail_kms_enable = var.cloudtrail_kms_enable
1541

42+
tags = var.tags
43+
}
44+
45+
46+
#-------------------------------------
47+
# resources deployed in master OR member account
48+
# with cloudvision provider, which can be master or member config
49+
#-------------------------------------
50+
51+
module "ecs_fargate_cluster" {
1652
providers = {
17-
aws.cloudvision = aws.member
53+
aws = aws.member
1854
}
55+
source = "../../modules/infrastructure/ecs-fargate-cluster"
56+
name = var.name
57+
tags = var.tags
58+
}
1959

60+
61+
module "ssm" {
62+
providers = {
63+
aws = aws.member
64+
}
65+
source = "../../modules/infrastructure/ssm"
2066
name = var.name
21-
sysdig_secure_endpoint = var.sysdig_secure_endpoint
2267
sysdig_secure_api_token = var.sysdig_secure_api_token
68+
}
69+
70+
71+
72+
#
73+
# cloud-connector
74+
#
75+
module "cloud_connector" {
76+
providers = {
77+
aws = aws.member
78+
}
79+
source = "../../modules/services/cloud-connector"
80+
name = "${var.name}-cloudconnector"
81+
82+
sysdig_secure_endpoint = var.sysdig_secure_endpoint
83+
secure_api_token_secret_name = module.ssm.secure_api_token_secret_name
2384

2485
is_organizational = true
2586
organizational_config = {
26-
cloudvision_member_account_id = var.cloudvision_member_account_id
27-
connector_ecs_task_role_name = var.connector_ecs_task_role_name
28-
cloudvision_role_arn = module.cloudvision_role.cloudvision_role_arn
87+
cloudvision_role_arn = module.cloudvision_role.cloudvision_role_arn
88+
connector_ecs_task_role_name = aws_iam_role.connector_ecs_task.name
2989
}
3090

31-
# testing purpose; economization
32-
cloudtrail_is_multi_region_trail = var.cloudtrail_is_multi_region_trail
33-
cloudtrail_kms_enable = var.cloudtrail_kms_enable
91+
sns_topic_arn = module.cloudtrail.sns_topic_arn
3492

35-
tags = var.tags
93+
ecs_cluster = module.ecs_fargate_cluster.id
94+
vpc_id = module.ecs_fargate_cluster.vpc_id
95+
vpc_subnets = module.ecs_fargate_cluster.vpc_subnets
96+
97+
tags = var.tags
98+
depends_on = [module.cloudtrail, module.ecs_fargate_cluster, module.ssm]
3699
}
100+
101+
102+
103+
#
104+
# cloud-bench
105+
# WIP
106+
#
107+
108+
#data "aws_caller_identity" "me" {}
109+
#module "cloud_bench" {
110+
# providers = {
111+
# aws = aws.member
112+
# }
113+
# source = "../../modules/services/cloud-bench"
114+
#
115+
# account_id = var.organizational_config.cloudvision_member_account_id
116+
# tags = var.tags
117+
#}
118+
119+
120+
121+
122+
123+
#
124+
# cloud-scanning
125+
# WIP
126+
#
127+
128+
129+
## FIXME? if this is a non-shared resource, move its usage to scanning service?
130+
#module "codebuild" {
131+
# source = "../../modules/infrastructure/codebuild"
132+
# name = var.name
133+
# secure_api_token_secret_name = module.ssm.secure_api_token_secret_name
134+
# depends_on = [module.ssm]
135+
#}
136+
#
137+
138+
139+
#module "cloud_scanning" {
140+
# providers = {
141+
# aws = aws.member
142+
# }
143+
#
144+
# source = "../../modules/services/cloud-scanning"
145+
# name = "${var.name}-cloudscanning"
146+
#
147+
# sysdig_secure_endpoint = var.sysdig_secure_endpoint
148+
# secure_api_token_secret_name = module.ssm.secure_api_token_secret_name
149+
#
150+
# build_project_arn = module.codebuild.project_arn
151+
# build_project_name = module.codebuild.project_name
152+
#
153+
# sns_topic_arn = module.cloudtrail.sns_topic_arn
154+
#
155+
# ecs_cluster = module.ecs_fargate_cluster.id
156+
# vpc_id = module.ecs_fargate_cluster.vpc_id
157+
# vpc_subnets = module.ecs_fargate_cluster.vpc_subnets
158+
#
159+
# tags = var.tags
160+
# depends_on = [module.cloudtrail, module.ecs_fargate_cluster, module.codebuild, module.ssm]
161+
#}

examples/organizational/utils.tf

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ module "cloudvision_role" {
1515
}
1616
name = var.name
1717

18-
cloudtrail_s3_arn = module.cloudvision.cloudtrail_s3_arn
19-
cloudconnector_ecs_task_role_name = aws_iam_role.task.name
18+
cloudtrail_s3_arn = module.cloudtrail.s3_bucket_arn
19+
cloudconnector_ecs_task_role_name = aws_iam_role.connector_ecs_task.name
2020

2121
tags = var.tags
22-
depends_on = [aws_iam_role.task]
22+
depends_on = [aws_iam_role.connector_ecs_task]
2323
}
2424

2525

@@ -29,7 +29,7 @@ module "cloudvision_role" {
2929
# - definition of a ROOT lvl cloudvision_connector_ecs_tas_role to avoid cyclic dependencies
3030
# - duplicated in ../../modules/services/cloud-connector/ecs-service-security.tf
3131
# -----------------------------------------------------------------
32-
resource "aws_iam_role" "task" {
32+
resource "aws_iam_role" "connector_ecs_task" {
3333
provider = aws.member
3434
name = "${var.name}-${var.connector_ecs_task_role_name}"
3535
assume_role_policy = data.aws_iam_policy_document.task_assume_role.json

0 commit comments

Comments
 (0)