|
5 | 5 | # ../cluster-services/aws_lb_controller.tf. See
|
6 | 6 | # https://github.com/alphagov/govuk-infrastructure/blob/main/docs/architecture/decisions/0003-split-terraform-state-into-separate-aws-cluster-and-kubernetes-resource-phases.md#decision for rationale.
|
7 | 7 |
|
| 8 | +locals { |
| 9 | + aws_lb_controller_service_account_name = "aws-load-balancer-controller" |
| 10 | +} |
| 11 | + |
| 12 | +module "aws_lb_controller_iam_role" { |
| 13 | + source = "terraform-aws-modules/iam/aws//modules/iam-assumable-role-with-oidc" |
| 14 | + version = "4.3.0" |
| 15 | + create_role = true |
| 16 | + role_name = "${local.aws_lb_controller_service_account_name}-${var.cluster_name}" |
| 17 | + role_description = "Role for the AWS Load Balancer Controller. Corresponds to ${local.aws_lb_controller_service_account_name} k8s ServiceAccount." |
| 18 | + provider_url = local.cluster_oidc_issuer |
| 19 | + role_policy_arns = [aws_iam_policy.aws_lb_controller.arn] |
| 20 | + oidc_fully_qualified_subjects = ["system:serviceaccount:${local.cluster_services_namespace}:${local.aws_lb_controller_service_account_name}"] |
| 21 | +} |
| 22 | + |
8 | 23 | resource "aws_iam_policy" "aws_lb_controller" {
|
9 | 24 | name = "AWSLoadBalancerController-${var.cluster_name}"
|
10 | 25 | description = "Allow AWS Load Balancer Controller to manage ALBs/NLBs etc."
|
@@ -220,41 +235,3 @@ resource "aws_iam_policy" "aws_lb_controller" {
|
220 | 235 | ]
|
221 | 236 | })
|
222 | 237 | }
|
223 |
| - |
224 |
| -locals { |
225 |
| - aws_lb_controller_service_account_name = "aws-load-balancer-controller" |
226 |
| - |
227 |
| - # module.eks.cluster_oidc_issuer_url is a full URL, e.g. |
228 |
| - # "https://oidc.eks.eu-west-1.amazonaws.com/id/B4378A8EBD334FEEFDF3BCB6D0E612C6" |
229 |
| - # but the string to which IAM compares this lacks the protocol part, so we |
230 |
| - # have to strip the "https://" when we construct the trust policy |
231 |
| - # (assume-role policy). |
232 |
| - cluster_oidc_issuer = replace(module.eks.cluster_oidc_issuer_url, "https://", "") |
233 |
| -} |
234 |
| - |
235 |
| -resource "aws_iam_role" "aws_lb_controller" { |
236 |
| - name = "AWSLoadBalancerController-${var.cluster_name}" |
237 |
| - description = "Role for the AWS Load Balancer Controller. Corresponds to ${local.aws_lb_controller_service_account_name} k8s ServiceAccount." |
238 |
| - assume_role_policy = jsonencode({ |
239 |
| - "Version" : "2012-10-17", |
240 |
| - "Statement" : [ |
241 |
| - { |
242 |
| - "Effect" : "Allow", |
243 |
| - "Principal" : { |
244 |
| - "Federated" : module.eks.oidc_provider_arn |
245 |
| - }, |
246 |
| - "Action" : "sts:AssumeRoleWithWebIdentity", |
247 |
| - "Condition" : { |
248 |
| - "StringEquals" : { |
249 |
| - "${local.cluster_oidc_issuer}:sub" : "system:serviceaccount:kube-system:${local.aws_lb_controller_service_account_name}" |
250 |
| - } |
251 |
| - } |
252 |
| - } |
253 |
| - ] |
254 |
| - }) |
255 |
| -} |
256 |
| - |
257 |
| -resource "aws_iam_role_policy_attachment" "aws_lb_controller" { |
258 |
| - role = aws_iam_role.aws_lb_controller.name |
259 |
| - policy_arn = aws_iam_policy.aws_lb_controller.arn |
260 |
| -} |
0 commit comments