irsa.tf 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. locals {
  2. sa_manifest = <<-EOT
  3. apiVersion: v1
  4. kind: ServiceAccount
  5. metadata:
  6. name: ${local.serviceaccount_name}
  7. namespace: ${local.serviceaccount_namespace}
  8. annotations:
  9. eks.amazonaws.com/role-arn: "${aws_iam_role.eso-e2e-irsa.arn}"
  10. EOT
  11. }
  12. data "aws_iam_policy_document" "assume-policy" {
  13. statement {
  14. actions = ["sts:AssumeRoleWithWebIdentity"]
  15. condition {
  16. test = "StringEquals"
  17. variable = "${trimprefix(module.eks.cluster_oidc_issuer_url, "https://")}:sub"
  18. values = [
  19. "system:serviceaccount:${local.serviceaccount_namespace}:${local.serviceaccount_name}"
  20. ]
  21. }
  22. principals {
  23. type = "Federated"
  24. identifiers = [module.eks.oidc_provider_arn]
  25. }
  26. }
  27. }
  28. resource "aws_iam_role" "eso-e2e-irsa" {
  29. name = "eso-e2e-irsa"
  30. path = "/"
  31. assume_role_policy = data.aws_iam_policy_document.assume-policy.json
  32. managed_policy_arns = [
  33. "arn:aws:iam::aws:policy/SecretsManagerReadWrite"
  34. ]
  35. }
  36. resource "null_resource" "apply_sa" {
  37. triggers = {
  38. kubeconfig = base64encode(local.kubeconfig)
  39. cmd_patch = <<-EOT
  40. echo '${local.sa_manifest}' | kubectl --kubeconfig <(echo $KUBECONFIG | base64 --decode) apply -f -
  41. EOT
  42. }
  43. provisioner "local-exec" {
  44. interpreter = ["/bin/bash", "-c"]
  45. environment = {
  46. KUBECONFIG = self.triggers.kubeconfig
  47. }
  48. command = self.triggers.cmd_patch
  49. }
  50. }