amazon-web-services - 如何更新 terraform 创建的策略返回的 json?

标签 amazon-web-services terraform

我有一个由 terraform 资源之一返回的策略:

data.aws_iam_policy_document.cluster_assume_role_policy.json

json对象如下:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::12345678900000:oidc-provider/oidc.eks.eu-west-1.amazonaws.com/id/879BUOGVDDFGHFGVB85HJNVIFDHPJKPMC"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.eu-west-1.amazonaws.com/id/879BUOGVDDFGHFGVB85HJNVIFDHPJKPMC:aud": "sts.amazonaws.com"
        }
      }
    }
  ]
}

我需要替换此 json 中的几个子字符串,并能够将其用作另一个 terraform 资源中的引用,例如变量等

  1. 将 sts.amazonaws.com 替换为 system:serviceaccount:kube-system:cluster-autoscaler
  2. 将 :aud 替换为 :sub

您能否建议通过 terraform 工具/功能实现此目标的任何/最佳方法?

最佳答案

我同意最好从头开始制定新政策的评论......
但我们仍然可以使用 terraform 提供的功能来做到这一点:
(jsondecode、jsonencode 和替换)

这是一个例子:

provider "aws" {
  region = "us-east-1"
}

data "aws_iam_policy_document" "test" {
  statement {
    sid     = ""
    actions = ["sts:AssumeRoleWithWebIdentity"]

    condition {
      test     = "StringEquals"
      variable = "s3:prefix"
      values   = ["sts.amazonaws.com"]
    }
  }
}


output "replace" {
  value = jsondecode(
    replace(
      jsonencode(data.aws_iam_policy_document.test.json),
      "sts.amazonaws.com",
      "system:serviceaccount"
    )
  )
}

所以那里有一些功能......

  • 使用 jsonencode 我们从策略 json 中获取一个字符串
  • 通过replace,我们会进行所需的替换,您可以多次调用以进行所需的替换。
  • 通过 jsondecode,我们将字符串转换回 json,以便可以在需要的地方使用

关于amazon-web-services - 如何更新 terraform 创建的策略返回的 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69858112/

相关文章:

amazon-web-services - AWS Elastic Beanstalk - Java 平台和 Tomcat 平台有什么区别?

ruby-on-rails - 指定Elastic Beanstalk环境中要部署的git分支代码

c# - AWS .NET Core 3.1 模拟 Lambda 测试工具,无法读取 AppSettings.json 或 App.config

amazon-web-services - 如何使用 terraform 向 S3 存储桶添加生命周期规则?

azure - 使用 terraform 设置 functionTimeout

Azure Frontdoor 动态 block 在 Terraform 中不起作用

node.js - 在 AWS EC2 上部署 https node express 服务器托管网站

amazon-web-services - AmazonRDSEnhancedMonitoringRole 的 Cloudformation 模板

azure - 尝试创建 azure 函数时出错 - 使用 terraform 的消费计划

terraform - 如何获取弹性负载均衡器的 DNS 名称?