#amazon-web-services #terraform #amazon-iam
Вопрос:
Мне нужно создать новую роль IAM с помощью Terraform. У роли должна быть политика, предопределенная в AWS (AmazonSSMFullAccess), но я нигде не могу найти, как добавить уже созданную политику. Шаблон кода должен выглядеть следующим образом:
resource "aws_iam_role" "role" {
name = var.name
assume_role_policy = var.assume_role_policy
max_session_duration = var.max_session_duration
description = var.description
}
resource "aws_iam_role_policy_attachment" "attach_policy" {
policy_arn = var.policy_to_attach
role = aws_iam_role.role.name
}
Ответ №1:
Для существующей политики aws вы можете напрямую скопировать ее arn с консоли. Затем просто вставьте arn в качестве параметра policy_arn. В вашем случае:
resource "aws_iam_role_policy_attachment" "attach_policy" {
policy_arn = "arn:aws:iam::aws:policy/AmazonSSMFullAccess"
role = aws_iam_role.role.name
}
Чтобы сделать это еще более безопасным, вы можете сначала импортировать политику с помощью источника данных :
data "aws_iam_policy" "example" {
arn = "arn:aws:iam::aws:policy/AmazonSSMFullAccess"
}
resource "aws_iam_role_policy_attachment" "attach_policy" {
policy_arn = data.aws_iam_policy.example.arn
role = aws_iam_role.role.name
}
ИЗМЕНИТЬ: источник данных также может быть вызван по имени:
data "aws_iam_policy" "test" {
name = "AmazonSSMFullAccess"
}
Как сказано в комментариях, источник данных будет полезен для проверки terraform, чтобы вы могли найти и прочитать данную политику, прежде чем она попытается сделать что-либо еще.
Комментарии:
1. Как этот источник данных полезен, когда вы ссылаетесь на него с помощью ARN, а затем используете выходной ARN в ресурсе?
2. Во-первых, вы можете использовать имя политики, если хотите (вместо этого перейдите
name
к источникуarn
данных ). Но что еще более важно, это позволит терраформировать проверку того, что политика действительно существует и ее можно найти. Обычно бывает полезно, чтобы терраформирование завершилось неудачно на этой ранней стадии, если вы допустили опечатку в названии, если политика больше не существует или, например, если у вас нет доступа к ней. Как общее эмпирическое правило: используйте источник данных для каждого внешнего ресурса, который вы собираетесь использовать, будь то учетная запись, политика…и т. Д