Создание условия, подобного строке, с помощью Terraform

#amazon-web-services #terraform

#amazon-web-services #terraform

Вопрос:

Я пытаюсь сгенерировать некоторую terraform для политики aws IAM. Условие в политике выглядит следующим образом

 "StringLike": {
 "kms:EncryptionContext:aws:cloudtrail:arn": [
 "arn:aws:cloudtrail:*:aws-account-id:trail/*"
 ]
  

Я просматриваю документацию для aws_iam_policy_document : https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document , но мне непонятно, как написать это в terraform. Любая помощь была бы очень признательна. Это моя попытка

 condition {
        test = "StringLike"
        variable = "kms:EncryptionContext:aws:cloudtrail:arn"

        values = [
            "arn:aws:cloudtrail:*:aws-account-id:trail/*"
        ]
    }
  

Комментарии:

1. Эй, Эван, синтаксис определенно правильный.

2. Вы видели конкретное сообщение об ошибке, когда попробовали то, что вы показали в своем вопросе здесь? Если это так, было бы полезно включить это в вопрос.

Ответ №1:

Привет, Эван, твоя логика верна, просто добавь :

Каждая конфигурация документа может иметь один или несколько statement

 data "aws_iam_policy_document" "example" {
  statement {
    actions = [
      "*", *//specify your actions here*
    ]

    resources = [
      "*", *//specify your resources here*
    ]
    condition {
     test = "StringLike"
     variable = "kms:EncryptionContext:aws:cloudtrail:arn"

     values = [
        "arn:aws:cloudtrail:*:aws-account-id:trail/*"
     ]
    }
}
  

Каждое утверждение политики может содержать ноль или более блоков условий, каждый из которых принимает следующие аргументы:

  • test (Обязательно) Имя оператора условия IAM для оценки.
  • variable (Обязательно) Имя контекстной переменной, к которой применяется условие. Переменные контекста могут быть либо стандартными переменными AWS, начинающимися с aws: , либо переменными, относящимися к конкретной службе, с префиксом имени службы.
  • values (Обязательно) Значения для оценки условия. Если указано несколько значений, условие соответствует, если применяется хотя бы одно из них. (То есть тесты объединяются с логической операцией «ИЛИ».)

Когда предоставляется несколько блоков условий, все они должны иметь значение true для применения инструкции политики. (Другими словами, условия объединяются с логической операцией «И».)

Вот ССЫЛКА из terraform

В дополнение к созданию политики из созданного вами документа вы используете ее следующим образом:

 resource "aws_iam_policy" "example" {
  policy = data.aws_iam_policy_document.example.json
}
  

Вот ссылка из Hashicorp