Skip to content

Commit f8cd168

Browse files
authored
feat: Allow custom VPC Flow Log IAM Role name and IAM Policy name (#1089)
* feat: Add support for users defining the VPC IAM role name * feat: Add support for users defining the VPC IAM policy name * docs: Update README.md
1 parent 4a2809c commit f8cd168

File tree

6 files changed

+70
-6
lines changed

6 files changed

+70
-6
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,10 @@ No modules.
575575
| <a name="input_single_nat_gateway"></a> [single\_nat\_gateway](#input\_single\_nat\_gateway) | Should be true if you want to provision a single shared NAT Gateway across all of your private networks | `bool` | `false` | no |
576576
| <a name="input_tags"></a> [tags](#input\_tags) | A map of tags to add to all resources | `map(string)` | `{}` | no |
577577
| <a name="input_use_ipam_pool"></a> [use\_ipam\_pool](#input\_use\_ipam\_pool) | Determines whether IPAM pool is used for CIDR allocation | `bool` | `false` | no |
578+
| <a name="input_vpc_flow_log_iam_policy_name"></a> [vpc\_flow\_log\_iam\_policy\_name](#input\_vpc\_flow\_log\_iam\_policy\_name) | Name of the IAM policy | `string` | `"vpc-flow-log-to-cloudwatch"` | no |
579+
| <a name="input_vpc_flow_log_iam_policy_use_name_prefix"></a> [vpc\_flow\_log\_iam\_policy\_use\_name\_prefix](#input\_vpc\_flow\_log\_iam\_policy\_use\_name\_prefix) | Determines whether the name of the IAM policy (`vpc_flow_log_iam_policy_name`) is used as a prefix | `bool` | `true` | no |
580+
| <a name="input_vpc_flow_log_iam_role_name"></a> [vpc\_flow\_log\_iam\_role\_name](#input\_vpc\_flow\_log\_iam\_role\_name) | Name to use on the VPC Flow Log IAM role created | `string` | `"vpc-flow-log-role"` | no |
581+
| <a name="input_vpc_flow_log_iam_role_use_name_prefix"></a> [vpc\_flow\_log\_iam\_role\_use\_name\_prefix](#input\_vpc\_flow\_log\_iam\_role\_use\_name\_prefix) | Determines whether the IAM role name (`vpc_flow_log_iam_role_name_name`) is used as a prefix | `bool` | `true` | no |
578582
| <a name="input_vpc_flow_log_permissions_boundary"></a> [vpc\_flow\_log\_permissions\_boundary](#input\_vpc\_flow\_log\_permissions\_boundary) | The ARN of the Permissions Boundary for the VPC Flow Log IAM Role | `string` | `null` | no |
579583
| <a name="input_vpc_flow_log_tags"></a> [vpc\_flow\_log\_tags](#input\_vpc\_flow\_log\_tags) | Additional tags for the VPC Flow Logs | `map(string)` | `{}` | no |
580584
| <a name="input_vpc_tags"></a> [vpc\_tags](#input\_vpc\_tags) | Additional tags for the VPC | `map(string)` | `{}` | no |

examples/complete/main.tf

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ module "vpc" {
7373
dhcp_options_domain_name_servers = ["127.0.0.1", "10.10.0.2"]
7474

7575
# VPC Flow Logs (Cloudwatch log group and IAM role will be created)
76-
enable_flow_log = true
77-
create_flow_log_cloudwatch_log_group = true
78-
create_flow_log_cloudwatch_iam_role = true
79-
flow_log_max_aggregation_interval = 60
76+
vpc_flow_log_iam_role_name = "vpc-complete-example-role"
77+
vpc_flow_log_iam_role_use_name_prefix = false
78+
enable_flow_log = true
79+
create_flow_log_cloudwatch_log_group = true
80+
create_flow_log_cloudwatch_iam_role = true
81+
flow_log_max_aggregation_interval = 60
8082

8183
tags = local.tags
8284
}

examples/vpc-flow-logs/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ Note that this example may create resources which can cost money (AWS Elastic IP
4141
| <a name="module_s3_bucket"></a> [s3\_bucket](#module\_s3\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 3.0 |
4242
| <a name="module_vpc_with_flow_logs_cloudwatch_logs"></a> [vpc\_with\_flow\_logs\_cloudwatch\_logs](#module\_vpc\_with\_flow\_logs\_cloudwatch\_logs) | ../../ | n/a |
4343
| <a name="module_vpc_with_flow_logs_cloudwatch_logs_default"></a> [vpc\_with\_flow\_logs\_cloudwatch\_logs\_default](#module\_vpc\_with\_flow\_logs\_cloudwatch\_logs\_default) | ../../ | n/a |
44+
| <a name="module_vpc_with_flow_logs_cloudwatch_logs_prefix"></a> [vpc\_with\_flow\_logs\_cloudwatch\_logs\_prefix](#module\_vpc\_with\_flow\_logs\_cloudwatch\_logs\_prefix) | ../../ | n/a |
4445
| <a name="module_vpc_with_flow_logs_s3_bucket"></a> [vpc\_with\_flow\_logs\_s3\_bucket](#module\_vpc\_with\_flow\_logs\_s3\_bucket) | ../../ | n/a |
4546
| <a name="module_vpc_with_flow_logs_s3_bucket_parquet"></a> [vpc\_with\_flow\_logs\_s3\_bucket\_parquet](#module\_vpc\_with\_flow\_logs\_s3\_bucket\_parquet) | ../../ | n/a |
4647

examples/vpc-flow-logs/main.tf

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,35 @@ module "vpc_with_flow_logs_cloudwatch_logs_default" {
8383
vpc_flow_log_tags = local.tags
8484
}
8585

86+
# CloudWatch Log Group and IAM prefix
87+
module "vpc_with_flow_logs_cloudwatch_logs_prefix" {
88+
source = "../../"
89+
90+
name = "${local.name}-cloudwatch-logs-prefix"
91+
cidr = local.vpc_cidr
92+
93+
azs = local.azs
94+
private_subnets = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k)]
95+
public_subnets = [for k, v in local.azs : cidrsubnet(local.vpc_cidr, 8, k + 4)]
96+
97+
# Cloudwatch log group and IAM role will be created
98+
enable_flow_log = true
99+
create_flow_log_cloudwatch_log_group = true
100+
create_flow_log_cloudwatch_iam_role = true
101+
102+
vpc_flow_log_iam_role_name = "vpc-iam-prefix-example"
103+
vpc_flow_log_iam_role_use_name_prefix = true
104+
vpc_flow_log_iam_policy_name = "vpc-iam-prefix-example"
105+
vpc_flow_log_iam_policy_use_name_prefix = true
106+
107+
flow_log_max_aggregation_interval = 60
108+
flow_log_cloudwatch_log_group_name_prefix = "/aws/my-amazing-vpc-flow-logz/"
109+
flow_log_cloudwatch_log_group_name_suffix = "my-test"
110+
flow_log_cloudwatch_log_group_class = "INFREQUENT_ACCESS"
111+
112+
vpc_flow_log_tags = local.tags
113+
}
114+
86115
# CloudWatch Log Group and IAM role created separately
87116
module "vpc_with_flow_logs_cloudwatch_logs" {
88117
source = "../../"

variables.tf

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1478,12 +1478,37 @@ variable "enable_flow_log" {
14781478
default = false
14791479
}
14801480

1481+
variable "vpc_flow_log_iam_role_name" {
1482+
description = "Name to use on the VPC Flow Log IAM role created"
1483+
type = string
1484+
default = "vpc-flow-log-role"
1485+
}
1486+
1487+
variable "vpc_flow_log_iam_role_use_name_prefix" {
1488+
description = "Determines whether the IAM role name (`vpc_flow_log_iam_role_name_name`) is used as a prefix"
1489+
type = bool
1490+
default = true
1491+
}
1492+
1493+
14811494
variable "vpc_flow_log_permissions_boundary" {
14821495
description = "The ARN of the Permissions Boundary for the VPC Flow Log IAM Role"
14831496
type = string
14841497
default = null
14851498
}
14861499

1500+
variable "vpc_flow_log_iam_policy_name" {
1501+
description = "Name of the IAM policy"
1502+
type = string
1503+
default = "vpc-flow-log-to-cloudwatch"
1504+
}
1505+
1506+
variable "vpc_flow_log_iam_policy_use_name_prefix" {
1507+
description = "Determines whether the name of the IAM policy (`vpc_flow_log_iam_policy_name`) is used as a prefix"
1508+
type = bool
1509+
default = true
1510+
}
1511+
14871512
variable "flow_log_max_aggregation_interval" {
14881513
description = "The maximum interval of time during which a flow of packets is captured and aggregated into a flow log record. Valid Values: `60` seconds or `600` seconds"
14891514
type = number

vpc-flow-logs.tf

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ resource "aws_cloudwatch_log_group" "flow_log" {
5858
resource "aws_iam_role" "vpc_flow_log_cloudwatch" {
5959
count = local.create_flow_log_cloudwatch_iam_role ? 1 : 0
6060

61-
name_prefix = "vpc-flow-log-role-"
61+
name = var.vpc_flow_log_iam_role_use_name_prefix ? null : var.vpc_flow_log_iam_role_name
62+
name_prefix = var.vpc_flow_log_iam_role_use_name_prefix ? "${var.vpc_flow_log_iam_role_name}-" : null
63+
6264
assume_role_policy = data.aws_iam_policy_document.flow_log_cloudwatch_assume_role[0].json
6365
permissions_boundary = var.vpc_flow_log_permissions_boundary
6466

@@ -92,7 +94,8 @@ resource "aws_iam_role_policy_attachment" "vpc_flow_log_cloudwatch" {
9294
resource "aws_iam_policy" "vpc_flow_log_cloudwatch" {
9395
count = local.create_flow_log_cloudwatch_iam_role ? 1 : 0
9496

95-
name_prefix = "vpc-flow-log-to-cloudwatch-"
97+
name = var.vpc_flow_log_iam_policy_use_name_prefix ? null : var.vpc_flow_log_iam_policy_name
98+
name_prefix = var.vpc_flow_log_iam_policy_use_name_prefix ? "${var.vpc_flow_log_iam_policy_name}-" : null
9699
policy = data.aws_iam_policy_document.vpc_flow_log_cloudwatch[0].json
97100
tags = merge(var.tags, var.vpc_flow_log_tags)
98101
}

0 commit comments

Comments
 (0)