irsa.tf 2.0 KB

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