Как прикрепить существующую политику конфиденциальности к роли IAM с помощью Terraform

#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 данных ). Но что еще более важно, это позволит терраформировать проверку того, что политика действительно существует и ее можно найти. Обычно бывает полезно, чтобы терраформирование завершилось неудачно на этой ранней стадии, если вы допустили опечатку в названии, если политика больше не существует или, например, если у вас нет доступа к ней. Как общее эмпирическое правило: используйте источник данных для каждого внешнего ресурса, который вы собираетесь использовать, будь то учетная запись, политика…и т. Д