#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, например, в переменной и т. Д
- заменить sts.amazonaws.com с системой:учетная запись службы:куб-система:кластер-автоскейлер
- заменить :aud на :sub
не могли бы вы предложить какой-либо/оптимальный способ достижения этой цели с помощью инструментов/функций terraform?
Комментарии:
1. Почему вы не можете создать новую политику?
2. Как уже отмечалось. Лучший способ-просто создать новую политику с нуля.
3. 1. у нас есть 5 кластеров, мы хотим повторно использовать существующие политики на лету 2. существует также общий интерес-каков подход к обновлению данных json в Terraform
Ответ №1:
Я бы согласился с замечаниями, что это лучше всего делать с новой политикой с нуля …
Но мы все еще можем сделать это, используя функции, предоставляемые 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, чтобы ее можно было использовать там, где это необходимо