|
| 1 | +data "aws_s3_bucket" "kube_prometheus_stack" { |
| 2 | + count = var.metrics_storage != null ? 1 : 0 |
| 3 | + |
| 4 | + bucket = var.metrics_storage.bucket_id |
| 5 | +} |
| 6 | + |
| 7 | +data "aws_iam_policy_document" "kube_prometheus_stack" { |
| 8 | + count = var.metrics_storage != null ? (var.metrics_storage.create_role ? 1 : 0) : 0 |
| 9 | + |
| 10 | + statement { |
| 11 | + actions = [ |
| 12 | + "s3:ListBucket", |
| 13 | + "s3:GetBucketLocation", |
| 14 | + "s3:PutObject", |
| 15 | + "s3:GetObject", |
| 16 | + "s3:DeleteObject", |
| 17 | + ] |
| 18 | + |
| 19 | + resources = [ |
| 20 | + data.aws_s3_bucket.kube_prometheus_stack[0].arn, |
| 21 | + format("%s/*", data.aws_s3_bucket.kube_prometheus_stack[0].arn), |
| 22 | + ] |
| 23 | + |
| 24 | + effect = "Allow" |
| 25 | + } |
| 26 | +} |
| 27 | + |
| 28 | +resource "aws_iam_policy" "kube_prometheus_stack" { |
| 29 | + count = var.metrics_storage != null ? (var.metrics_storage.create_role ? 1 : 0) : 0 |
| 30 | + |
| 31 | + name = "kube-prometheus-stack-s3" |
| 32 | + description = "IAM policy for the kube-prometheus-stack to access the S3 bucket named ${data.aws_s3_bucket.kube_prometheus_stack[0].id}" |
| 33 | + policy = data.aws_iam_policy_document.kube_prometheus_stack[0].json |
| 34 | +} |
| 35 | + |
| 36 | +module "iam_assumable_role_kube_prometheus_stack" { |
| 37 | + source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc" |
| 38 | + version = "~> 5.0" |
| 39 | + create_role = var.metrics_storage != null ? var.metrics_storage.create_role : false |
| 40 | + number_of_role_policy_arns = 1 |
| 41 | + role_name_prefix = "kube-prometheus-stack-s3-" |
| 42 | + |
| 43 | + # We use the try() function to avoid errors here when we deactivate the metrics storage by setting the |
| 44 | + # `metrics_storage` variable to `null`. |
| 45 | + provider_url = try(trimprefix(var.metrics_storage.cluster_oidc_issuer_url, "https://"), "") |
| 46 | + role_policy_arns = [try(resource.aws_iam_policy.kube_prometheus_stack[0].arn, null)] |
| 47 | + |
| 48 | + # List of ServiceAccounts that have permission to attach to this IAM role |
| 49 | + oidc_fully_qualified_subjects = [ |
| 50 | + "system:serviceaccount:kube-prometheus-stack:kube-prometheus-stack-prometheus" |
| 51 | + ] |
| 52 | +} |
| 53 | + |
1 | 54 | module "kube-prometheus-stack" { |
2 | 55 | source = "../" |
3 | 56 |
|
|
0 commit comments