Terraform: привязка уже существующих политик aws к уже существующей роли aws

#amazon-web-services #terraform #amazon-iam #terraform-provider-aws #policy

#amazon-веб-сервисы #terraform #amazon-iam #terraform-provider-aws #политика

Вопрос:

Вместо того, чтобы использовать консоль aws для простого прикрепления пары уже существующих политик к уже существующей роли, мне нужно сделать это через Terraform в модуле для конкретной системы, которая требует perms.

Мне не очень повезло с этим?

 variables.tf
variable "masterrole" {
  description = "role already present within the cn-tio-tooling-acc"
  default = "arn:aws-cn:iam::12345678910:role/Master"
}
variable "policies" {
  description = "policies already present within the cn-tio-tooling-acc"
  default = "arn:aws-cn:iam::12345678910:policy/Source-1,arn:aws-cn:iam::351767606935:policy/Source-2"
}
  

data.tf <— Ссылка на роль и данные политики, которые уже присутствуют в учетной записи

 data "aws_iam_role" "masterrole" {
  name = "Master"
}

data "aws_iam_policy" "policies" {
  arn = var.policies
}
  

IAM.tf

 resource "aws_iam_role_policy_attachment" "Sources" {
  role       = aws_iam_role.masterrole.name
  policy_arn = aws_iam_policy.policies.arn
}
  

Возможно, здесь что-то действительно простое, но почему я получаю следующее из результата «плана»?

Ошибка: ссылка на необъявленный ресурс на cn_cpm_iam.tf строка 3, в ресурсе «aws_iam_role_policy_attachment» «Источники»: 3: роль = aws_iam_role.masterrole.name Управляемый ресурс «aws_iam_role» «masterrole» не был объявлен в корневом модуле.

Ошибка: ссылка на необъявленный ресурс на cn_cpm_iam.tf строка 4, в ресурсе «aws_iam_role_policy_attachment» «Источники»: 4: policy_arn = aws_iam_policy.cpmpolicies.arn Управляемый ресурс «aws_iam_policy» «политики» не был объявлен в корневом модуле.

Ответ №1:

При ссылке на источники данных в terraform вам необходимо добавить к ним префикс data. . Поэтому попробуйте использовать

 resource "aws_iam_role_policy_attachment" "Sources" {
  role       = data.aws_iam_role.masterrole.name
  policy_arn = data.aws_iam_policy.policies.arn
}
  

Но поскольку вы уже знаете имя и ARN, вы можете просто использовать их, не запрашивая источники данных:

 resource "aws_iam_role_policy_attachment" "Sources" {
  role       = "Master"
  policy_arn = var.policies
}
  

Дайте мне знать, если я что-то здесь упустил 😉

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

1. мариукс, ты, конечно, ничего не пропустил. Отличное место и ваши варианты исправили мои проблемы с «планом». Спасибо, что помогли новичку в terraform. 🙂

2. @ILCattivo рад это слышать … можете ли вы принять ответ, если нет дополнительных вопросов, чтобы он был помечен как выполненный? 😉 спасибо .. счастливого терраформирования..