Skip to content

Commit 1a1a104

Browse files
Update network configuration for module
- With introduction of VPC endpoint routing existing ECS service can no longer access secrestmanager. - This is fixed by introducing the security group rules for the ECS security group to allow access to/from VPC endpoint
1 parent 3cdff70 commit 1a1a104

5 files changed

Lines changed: 81 additions & 43 deletions

File tree

terraform/app/modules/dms/dms.tf

Lines changed: 0 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,10 @@
1-
21
resource "aws_dms_replication_subnet_group" "dms_subnet_group" {
32
replication_subnet_group_id = "dms-subnet-group"
43
replication_subnet_group_description = "Subnet group for DMS replication instance"
54
subnet_ids = var.subnet_ids
65
depends_on = [aws_iam_role.dms_vpc_role]
76
}
87

9-
resource "aws_security_group" "dms" {
10-
name = "dms-security-group"
11-
description = "Security group for DMS replication instance"
12-
vpc_id = var.vpc_id
13-
14-
tags = {
15-
Name = "dms-security-group-${var.environment}"
16-
}
17-
}
18-
19-
resource "aws_security_group_rule" "dms_ingress" {
20-
type = "ingress"
21-
from_port = 5432
22-
to_port = 5432
23-
protocol = "tcp"
24-
security_group_id = var.rds_cluster_security_group_id
25-
source_security_group_id = aws_security_group.dms.id
26-
}
27-
288
resource "aws_dms_replication_instance" "dms_instance" {
299
replication_instance_id = "dms-replication-instance"
3010
replication_instance_class = "dms.t3.medium"
@@ -33,27 +13,6 @@ resource "aws_dms_replication_instance" "dms_instance" {
3313
publicly_accessible = false
3414
}
3515

36-
resource "aws_security_group_rule" "egress_to_rds" {
37-
type = "egress"
38-
from_port = var.source_port
39-
to_port = var.source_port
40-
protocol = "tcp"
41-
security_group_id = aws_security_group.dms.id
42-
source_security_group_id = var.rds_cluster_security_group_id
43-
}
44-
45-
module "secretsmanager_vpc_endpoint" {
46-
source = "../vpc_endpoint"
47-
ingress_ports = ["443"]
48-
service_name = "com.amazonaws.eu-west-2.secretsmanager"
49-
source_security_group = aws_security_group.dms.id
50-
subnet_ids = var.subnet_ids
51-
vpc_id = var.vpc_id
52-
tags = {
53-
Name = "SecretsManager VPC Endpoint - ${var.environment}"
54-
}
55-
}
56-
5716
resource "aws_dms_endpoint" "source" {
5817
endpoint_id = "source-endpoint"
5918
endpoint_type = "source"
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
resource "aws_security_group" "dms" {
2+
name = "dms-security-group"
3+
description = "Security group for DMS replication instance"
4+
vpc_id = var.vpc_id
5+
6+
tags = {
7+
Name = "dms-security-group-${var.environment}"
8+
}
9+
}
10+
11+
module "secretsmanager_vpc_endpoint" {
12+
source = "../vpc_endpoint"
13+
ingress_ports = ["443"]
14+
service_name = "com.amazonaws.eu-west-2.secretsmanager"
15+
source_security_group = aws_security_group.dms.id
16+
subnet_ids = var.subnet_ids
17+
vpc_id = var.vpc_id
18+
tags = {
19+
Name = "SecretsManager VPC Endpoint - ${var.environment}"
20+
}
21+
}
22+
23+
resource "aws_security_group_rule" "egress_to_rds" {
24+
type = "egress"
25+
from_port = var.source_port
26+
to_port = var.source_port
27+
protocol = "tcp"
28+
security_group_id = aws_security_group.dms.id
29+
source_security_group_id = var.rds_cluster_security_group_id
30+
lifecycle {
31+
create_before_destroy = true
32+
}
33+
}
34+
35+
resource "aws_security_group_rule" "dms_ingress" {
36+
type = "ingress"
37+
from_port = 5432
38+
to_port = 5432
39+
protocol = "tcp"
40+
security_group_id = var.rds_cluster_security_group_id
41+
source_security_group_id = aws_security_group.dms.id
42+
lifecycle {
43+
create_before_destroy = true
44+
}
45+
}
46+
47+
resource "aws_security_group_rule" "ingress_from_ecs" {
48+
count = length(var.ecs_sg_ids)
49+
type = "ingress"
50+
from_port = 443
51+
to_port = 443
52+
protocol = "tcp"
53+
security_group_id = module.secretsmanager_vpc_endpoint.sg_id
54+
source_security_group_id = var.ecs_sg_ids[count.index]
55+
lifecycle {
56+
create_before_destroy = true
57+
}
58+
}
59+
60+
resource "aws_security_group_rule" "egress_to_ecs" {
61+
count = length(var.ecs_sg_ids)
62+
type = "egress"
63+
from_port = 443
64+
to_port = 443
65+
protocol = "tcp"
66+
security_group_id = var.ecs_sg_ids[count.index]
67+
source_security_group_id = module.secretsmanager_vpc_endpoint.sg_id
68+
lifecycle {
69+
create_before_destroy = true
70+
}
71+
}

terraform/app/modules/dms/secrets.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ locals {
1212
}
1313

1414
resource "aws_secretsmanager_secret" "source" {
15-
name = "${var.environment}_dms_temporary_secret_source"
15+
name = "dms_temporary_secret_source_123"
1616
}
1717

1818
resource "aws_secretsmanager_secret" "target" {
19-
name = "${var.environment}_dms_temporary_secret_target"
19+
name = "dms_temporary_secret_target_123"
2020
}
2121

2222
resource "aws_secretsmanager_secret_version" "source" {

terraform/app/modules/dms/variables.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ variable "source_database_name" {
2222
nullable = false
2323
}
2424

25+
variable "ecs_sg_ids" {
26+
type = list(string)
27+
description = "List of ECS security group IDs"
28+
default = []
29+
nullable = false
30+
}
31+
2532
variable "source_db_secret_arn" {
2633
type = string
2734
description = "The secret arn for the source database"

terraform/app/rds.tf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ module "dms_custom_kms_migration" {
112112
source = "./modules/dms"
113113
environment = var.environment
114114

115+
ecs_sg_ids = local.ecs_sg_ids
115116
source_endpoint = aws_rds_cluster.aurora_cluster.endpoint
116117
source_port = aws_rds_cluster.aurora_cluster.port
117118
source_database_name = aws_rds_cluster.aurora_cluster.database_name

0 commit comments

Comments
 (0)