首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新terraform created策略返回的json?

如何更新terraform created策略返回的json?
EN

Stack Overflow用户
提问于 2021-11-05 19:06:36
回答 1查看 406关注 0票数 1

我有一份由一种地形资源归还的保单:

代码语言:javascript
复制
data.aws_iam_policy_document.cluster_assume_role_policy.json

json对象如下:

代码语言:javascript
复制
{
  "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资源中使用它作为引用,比如变量等等。

system:serviceaccount:kube-system:cluster-autoscaler

  • replace:
  1. 将sts.amazonaws.com替换为:sub

请您提出通过terraform工具/功能实现这一目标的任何/最佳方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-06 21:48:22

我同意你的意见,这是最好从零开始的新政策.

但是我们仍然可以使用terraform提供的功能来完成这个任务:

( jsondecode,jsonencode &置换)

下面是一个示例:

代码语言:javascript
复制
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"
    )
  )
}

所以这里有一些功能..。

我们从策略json

  • replace中得到一个字符串,我们可以为您想要的jsondecode多次调用所需的替换,然后将字符串转换回json,以便在需要的地方使用
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69858112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档