개요
테라폼으로 aws_iam_policy_attachment 리소스를 이용하여 IAM 관리형 정책(Managed Policy)을 역할(Role)에 붙이는 작업 중에 겪었던 경험입니다.
아래와 같이 하나의 역할을 만들고, 해당 역할에 AdministratorAccess, AmazonEC2ReadOnlyAccess 관리형 정책을 붙이려 하였습니다.
Apply 후에 역할(Role)에 정상적으로 정책이 붙었지만, 문제는 Destroy를 진행할 때 발생하였습니다.
아래와 같이 AdministratorAccess정책에 연결된 모든 그룹(Groups)/역할(Roles)/사용자(Users)을 모두 해제를 하는 것을 확인할 수 있었습니다.
해결
Terraform 공식 문서를 다시 살펴본 결과, 아래와 같이 해당 정책을 이미 사용하고 있는 모든 그룹(Groups)/역할(Roles)/사용자(Users)까지 해제 됨을 알 수 있었습니다.
역할에 정책을 붙일 때에는 aws_iam_policy_attachment 리소스를 사용하는 것 보다는 aws_iam_role_policy_attachment 리소스를 사용하는 것을 권장한다고 합니다.
이를 코드에 반영한 결과는 아래와 같습니다.
코드 수정 전
코드 수정 후
aws_iam_role_policy_attachment 리소스로 코드 수정 후, 역할과 정책을 삭제하여도 관리형 정책에 연결된 그룹/역할/사용자에는 리소스 변경이 발생하지 않음을 확인할 수 있었습니다.
참고
Terraform Registry
terraform の aws_iam_policy_attachment は使わないほうが無難 - Qiita