Skip to content

Commit c3675b1

Browse files
authored
feat: Add permissions for S3 write on FluentBit addons; add dependency on EKS addon for generic helm_releases (#203)
1 parent f120cc1 commit c3675b1

File tree

5 files changed

+101
-43
lines changed

5 files changed

+101
-43
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ repos:
1010
- id: detect-aws-credentials
1111
args: ['--allow-missing-credentials']
1212
- repo: https://github.com/antonbabenko/pre-commit-terraform
13-
rev: v1.80.0
13+
rev: v1.81.0
1414
hooks:
1515
- id: terraform_fmt
1616
- id: terraform_docs

helm.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,9 @@ resource "helm_release" "this" {
6868
type = try(set_sensitive.value.type, null)
6969
}
7070
}
71+
72+
depends_on = [
73+
# Wait for EBS CSI, etc. to be installed first
74+
aws_eks_addon.this,
75+
]
7176
}

main.tf

Lines changed: 84 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -512,34 +512,60 @@ resource "aws_cloudwatch_log_group" "aws_for_fluentbit" {
512512
}
513513

514514
data "aws_iam_policy_document" "aws_for_fluentbit" {
515-
count = try(var.aws_for_fluentbit_cw_log_group.create, true) && var.enable_aws_for_fluentbit ? 1 : 0
515+
count = (try(var.aws_for_fluentbit_cw_log_group.create, true) || length(lookup(var.aws_for_fluentbit, "s3_bucket_arns", [])) > 0) && var.enable_aws_for_fluentbit ? 1 : 0
516516

517-
statement {
518-
sid = "PutLogEvents"
519-
effect = "Allow"
520-
resources = [
521-
"arn:${local.partition}:logs:${local.region}:${local.account_id}:log-group:${try(var.aws_for_fluentbit_cw_log_group.name, "*")}:log-stream:*",
522-
]
517+
dynamic "statement" {
518+
for_each = try(var.aws_for_fluentbit_cw_log_group.create, true) ? [1] : []
523519

524-
actions = [
525-
"logs:PutLogEvents"
526-
]
520+
content {
521+
sid = "PutLogEvents"
522+
effect = "Allow"
523+
resources = [
524+
"arn:${local.partition}:logs:${local.region}:${local.account_id}:log-group:${try(var.aws_for_fluentbit_cw_log_group.name, "*")}:log-stream:*",
525+
]
526+
527+
actions = [
528+
"logs:PutLogEvents"
529+
]
530+
}
527531
}
528532

529-
statement {
530-
sid = "CreateCWLogs"
531-
effect = "Allow"
532-
resources = [
533-
"arn:${local.partition}:logs:${local.region}:${local.account_id}:log-group:${try(var.aws_for_fluentbit_cw_log_group.name, "*")}",
534-
]
533+
dynamic "statement" {
534+
for_each = try(var.aws_for_fluentbit_cw_log_group.create, true) ? [1] : []
535535

536-
actions = [
537-
"logs:CreateLogGroup",
538-
"logs:CreateLogStream",
539-
"logs:DescribeLogGroups",
540-
"logs:DescribeLogStreams",
541-
"logs:PutRetentionPolicy",
542-
]
536+
content {
537+
sid = "CreateCWLogs"
538+
effect = "Allow"
539+
resources = [
540+
"arn:${local.partition}:logs:${local.region}:${local.account_id}:log-group:${try(var.aws_for_fluentbit_cw_log_group.name, "*")}",
541+
]
542+
543+
actions = [
544+
"logs:CreateLogGroup",
545+
"logs:CreateLogStream",
546+
"logs:DescribeLogGroups",
547+
"logs:DescribeLogStreams",
548+
"logs:PutRetentionPolicy",
549+
]
550+
}
551+
}
552+
553+
dynamic "statement" {
554+
for_each = length(lookup(var.aws_for_fluentbit, "s3_bucket_arns", [])) > 0 ? [1] : []
555+
556+
content {
557+
sid = "S3Write"
558+
actions = [
559+
"s3:ListBucket",
560+
"s3:PutObject",
561+
"s3:PutObjectAcl",
562+
"s3:GetObject",
563+
"s3:GetObjectAcl",
564+
"s3:DeleteObject",
565+
"s3:DeleteObjectVersion",
566+
]
567+
resources = var.aws_for_fluentbit.s3_bucket_arns
568+
}
543569
}
544570
}
545571

@@ -2113,21 +2139,42 @@ resource "aws_iam_policy" "fargate_fluentbit" {
21132139
}
21142140

21152141
data "aws_iam_policy_document" "fargate_fluentbit" {
2116-
count = try(var.fargate_fluentbit_cw_log_group.create, true) && var.enable_fargate_fluentbit ? 1 : 0
2142+
count = (try(var.fargate_fluentbit_cw_log_group.create, true) || length(lookup(var.fargate_fluentbit, "s3_bucket_arns", [])) > 0) && var.enable_fargate_fluentbit ? 1 : 0
21172143

2118-
statement {
2119-
sid = "PutLogEvents"
2120-
effect = "Allow"
2121-
actions = [
2122-
"logs:CreateLogStream",
2123-
"logs:CreateLogGroup",
2124-
"logs:DescribeLogStreams",
2125-
"logs:PutLogEvents"
2126-
]
2127-
resources = [
2128-
try("${var.fargate_fluentbit.cwlog_arn}:*", "${aws_cloudwatch_log_group.fargate_fluentbit[0].arn}:*"),
2129-
try("${var.fargate_fluentbit.cwlog_arn}:logstream:*", "${aws_cloudwatch_log_group.fargate_fluentbit[0].arn}:logstream:*")
2130-
]
2144+
dynamic "statement" {
2145+
for_each = try(var.fargate_fluentbit_cw_log_group.create, true) ? [1] : []
2146+
2147+
content {
2148+
sid = "PutLogEvents"
2149+
actions = [
2150+
"logs:CreateLogStream",
2151+
"logs:CreateLogGroup",
2152+
"logs:DescribeLogStreams",
2153+
"logs:PutLogEvents"
2154+
]
2155+
resources = [
2156+
try("${var.fargate_fluentbit.cwlog_arn}:*", "${aws_cloudwatch_log_group.fargate_fluentbit[0].arn}:*"),
2157+
try("${var.fargate_fluentbit.cwlog_arn}:logstream:*", "${aws_cloudwatch_log_group.fargate_fluentbit[0].arn}:logstream:*")
2158+
]
2159+
}
2160+
}
2161+
2162+
dynamic "statement" {
2163+
for_each = length(lookup(var.fargate_fluentbit, "s3_bucket_arns", [])) > 0 ? [1] : []
2164+
2165+
content {
2166+
sid = "S3Write"
2167+
actions = [
2168+
"s3:ListBucket",
2169+
"s3:PutObject",
2170+
"s3:PutObjectAcl",
2171+
"s3:GetObject",
2172+
"s3:GetObjectAcl",
2173+
"s3:DeleteObject",
2174+
"s3:DeleteObjectVersion",
2175+
]
2176+
resources = var.fargate_fluentbit.s3_bucket_arns
2177+
}
21312178
}
21322179
}
21332180

tests/complete/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ Note that this example may create resources which will incur monetary charges on
3838

3939
| Name | Source | Version |
4040
|------|--------|---------|
41-
| <a name="module_adot_irsa"></a> [adot\_irsa](#module\_adot\_irsa) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | ~> 5.14 |
42-
| <a name="module_ebs_csi_driver_irsa"></a> [ebs\_csi\_driver\_irsa](#module\_ebs\_csi\_driver\_irsa) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | ~> 5.14 |
41+
| <a name="module_adot_irsa"></a> [adot\_irsa](#module\_adot\_irsa) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | ~> 5.20 |
42+
| <a name="module_ebs_csi_driver_irsa"></a> [ebs\_csi\_driver\_irsa](#module\_ebs\_csi\_driver\_irsa) | terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks | ~> 5.20 |
4343
| <a name="module_eks"></a> [eks](#module\_eks) | terraform-aws-modules/eks/aws | ~> 19.13 |
4444
| <a name="module_eks_blueprints_addons"></a> [eks\_blueprints\_addons](#module\_eks\_blueprints\_addons) | ../../ | n/a |
4545
| <a name="module_velero_backup_s3_bucket"></a> [velero\_backup\_s3\_bucket](#module\_velero\_backup\_s3\_bucket) | terraform-aws-modules/s3-bucket/aws | ~> 3.0 |

tests/complete/main.tf

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,14 @@ module "eks_blueprints_addons" {
149149
enable_aws_load_balancer_controller = true
150150
enable_metrics_server = true
151151
enable_vpa = true
152-
enable_aws_for_fluentbit = true
153152
enable_fargate_fluentbit = true
153+
enable_aws_for_fluentbit = true
154+
aws_for_fluentbit = {
155+
s3_bucket_arns = [
156+
module.velero_backup_s3_bucket.s3_bucket_arn,
157+
"${module.velero_backup_s3_bucket.s3_bucket_arn}/logs/*"
158+
]
159+
}
154160

155161
enable_aws_node_termination_handler = true
156162
aws_node_termination_handler_asg_arns = [for asg in module.eks.self_managed_node_groups : asg.autoscaling_group_arn]
@@ -285,7 +291,7 @@ module "velero_backup_s3_bucket" {
285291

286292
module "ebs_csi_driver_irsa" {
287293
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
288-
version = "~> 5.14"
294+
version = "~> 5.20"
289295

290296
role_name_prefix = "${local.name}-ebs-csi-driver-"
291297

@@ -303,7 +309,7 @@ module "ebs_csi_driver_irsa" {
303309

304310
module "adot_irsa" {
305311
source = "terraform-aws-modules/iam/aws//modules/iam-role-for-service-accounts-eks"
306-
version = "~> 5.14"
312+
version = "~> 5.20"
307313

308314
role_name_prefix = "${local.name}-adot-"
309315

0 commit comments

Comments
 (0)