Как безопасно перейти с aws_iam_policy_attachment на aws_iam_role_policy_attachment? - PullRequest
1 голос
/ 28 апреля 2020

Ресурс aws_iam_policy_attachment имеет следующее предупреждение

ПРЕДУПРЕЖДЕНИЕ. Ресурс aws_iam_policy_attachment создает эксклюзивные вложения политик IAM. Для всей учетной записи AWS все пользователи / роли / группы, к которым привязана одна политика, должны быть объявлены одним ресурсом aws_iam_policy_attachment. Это означает, что даже у любых пользователей / ролей / групп, которые имеют прикрепленную политику через любой другой механизм (включая другие ресурсы Terraform), эта присоединенная политика будет отозвана этим ресурсом. Вместо этого рассмотрим aws_iam_role_policy_attachment, aws_iam_user_policy_attachment или aws_iam_group_policy_attachment. Эти ресурсы не обеспечивают принудительное вложение политики IAM.

Мы изменили часть нашего кода с

resource "aws_iam_policy_attachment" "logs" {
  name       = "${var.function_name}-logs"
  roles      = [aws_iam_role.lambda.name]
  policy_arn = aws_iam_policy.logs[0].arn
}

на

resource "aws_iam_role_policy_attachment" "logs" {
  name       = "${var.function_name}-logs"
  role       = aws_iam_role.lambda.name
  policy_arn = aws_iam_policy.logs[0].arn
}

Изменение выше это просто, но теперь terraform хочет удалить ресурс aws_iam_policy_attachment и добавить aws_iam_role_policy_attachment. Ранее, когда мы применили terraform к модулю, использующему общий управляемый ресурс IAM, он отделил политику от 30 различных ролей IAM, заставив нас повторно присоединить их, найдя и применив наши модули terraform.

Что такое безопасный стратегия использования менее опасного ресурса aws_iam_role_policy_attachment?

Наша текущая стратегия

  1. Воссоздание управляемой политики IAM в качестве встроенной политики и добавление к роли
  2. Удаление управляемого политика вручную с использованием AWS console
    • Возможно, проще с CLI, но это кажется более безопасным
  3. Удаление плохого ресурса из состояния
    • Может быть необязательно поскольку оно было удалено на предыдущем шаге
    • terraform state rm aws_iam_policy_attachment.logs
  4. Цель - применить новое вложение
    • target apply -target aws_iam_role_policy_attachment.logs
  5. Проверка работоспособности
    • terraform plan
...