irsa.tf 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. inline_policy {
  36. name = "aws_ssm_parameterstore"
  37. policy = jsonencode({
  38. Version = "2012-10-17"
  39. Statement = [
  40. {
  41. Action = [
  42. "ssm:GetParameter",
  43. "ssm:PutParameter",
  44. "ssm:DescribeParameters",
  45. ]
  46. Effect = "Allow"
  47. Resource = "*"
  48. },
  49. ]
  50. })
  51. }
  52. }
  53. resource "null_resource" "apply_sa" {
  54. triggers = {
  55. kubeconfig = base64encode(local.kubeconfig)
  56. cmd_patch = <<-EOT
  57. echo '${local.sa_manifest}' | kubectl --kubeconfig <(echo $KUBECONFIG | base64 --decode) apply -f -
  58. EOT
  59. }
  60. provisioner "local-exec" {
  61. interpreter = ["/bin/bash", "-c"]
  62. environment = {
  63. KUBECONFIG = self.triggers.kubeconfig
  64. }
  65. command = self.triggers.cmd_patch
  66. }
  67. }