irsa.tf 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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. ]
  45. Effect = "Allow"
  46. Resource = "*"
  47. },
  48. ]
  49. })
  50. }
  51. }
  52. resource "null_resource" "apply_sa" {
  53. triggers = {
  54. kubeconfig = base64encode(local.kubeconfig)
  55. cmd_patch = <<-EOT
  56. echo '${local.sa_manifest}' | kubectl --kubeconfig <(echo $KUBECONFIG | base64 --decode) apply -f -
  57. EOT
  58. }
  59. provisioner "local-exec" {
  60. interpreter = ["/bin/bash", "-c"]
  61. environment = {
  62. KUBECONFIG = self.triggers.kubeconfig
  63. }
  64. command = self.triggers.cmd_patch
  65. }
  66. }