-
Terraform - AWS IAM
IaC/Terraform AWS 2023. 9. 17. 05:36(이 글은 AWS IAM에 대한 이해를 전제로 작성되었습니다. 관련 내용은 https://kh-archive.tistory.com/38를 참고하세요)
테라폼으로 AWS IAM 리소스들을 생성하는 방법에 대해서 알아봅시다.
우선, 바로 테라폼 코드를 보고 어떤 식으로 구성되는지 말씀드리겠습니다.
resource "aws_iam_policy" "cloud_man_lambda_tagging_policy" { name = "lambda-tagging-sample-policy" description = "Policy for Lambda functions to tag themselves" policy = jsonencode({ Version = "2012-10-17", Statement = [ { Action = [ "lambda:TagResource", "lambda:UntagResource" ], Effect = "Allow", Resource = "*" } ] }) } resource "aws_iam_role" "cloud_man_lambda_tagging_role" { name = "lambda-tagging-role" description = "Role for Lambda functions to tag themselves" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [{ Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "ec2.amazonaws.com" } }] }) managed_policy_arns = [aws_iam_policy.cloud_man_lambda_tagging_policy.arn] }
위에서부터 차례대로 살펴볼까요?
resource "aws_iam_policy" "cloud_man_lambda_tagging_policy" { name = "lambda-tagging-sample-policy" description = "Policy for Lambda functions to tag themselves" policy = jsonencode({ Version = "2012-10-17", Statement = [ { Action = [ "lambda:TagResource", "lambda:UntagResource" ], Effect = "Allow", Resource = "*" } ] }) }
IAM Policy를 생성하는 코드입니다.
해당 polciy의 이름을 정하는 부분이 name이고,
policy를 생성했을 때, 설명을 기입하는 부분이 description,
그리고 실제 policy의 내용을 적는 부분이 policy입니다.
policy에서 나오는 jsonencode는 주어진 내용을 JSON format string으로 바꿔주는
테라폼에서 제공하는 빌트인 함수 정도로 생각하면 됩니다.
여기서 설정된 policy의 내용을 살펴보면,
"모든 리소스"(*)를 대상 리소스(Resource)로 하고,
"lambda tagging"(lambda:TagResource)과 "untagging"(lambda:UntagResource)의 권한(Action)을
"허용"(Allow)하는 효과(Effect)를 가진
"lambda-tagging-sample-policy"라는 이름(name)의
"정책"(policy)의 내용으로 해석할 수 있습니다.
다음 코드도 볼까요?
resource "aws_iam_role" "cloud_man_lambda_tagging_role" { name = "lambda-tagging-role" description = "Role for Lambda functions to tag themselves" assume_role_policy = jsonencode({ Version = "2012-10-17" Statement = [{ Action = "sts:AssumeRole" Effect = "Allow" Principal = { Service = "ec2.amazonaws.com" } }] }) managed_policy_arns = [aws_iam_policy.cloud_man_lambda_tagging_policy.arn] }
role의 이름을 정하는 attribute가 name,
role의 대한 설명을 기술하는 attribute가 description,
role의 신뢰관계(trusted relationship)을 설정하는 attribute가 assume_role_policy,
role에 attach되는 policy의 정보를 담은 attribute가 managed_policy_arns 입니다.
여기서 설정된 내용을 보면
기존에 만들어진 "cloudman-lambda-tagging-role"이라는 이름을 가진 policy가 있고(managed_policy_arn),
"AWS ec2"와 신뢰관계(assume_role_policy) 설정을 맺은,
"lambda-tagging-role"이라는 이름(name)의
"역할"(role)의 내용으로 해석할 수 있습니다.
원래는 policy에 더 복잡한 Condition 설정 등도 가능하고,
managed_policy_arns 라는 attribute를 쓰지 않고
따로 aws_iam_policy_attachment라는 테라폼 리소스로 attachment를 설정하는 방법도 있습니다.
이건 따로 추후에 알아보기로 하겠습니다.
지금까지 테라폼 코드로 AWS IAM 리소스를 생성하는 방법에 대해 알아보았습니다.
'IaC > Terraform AWS' 카테고리의 다른 글
Terraform - AWS S3 (0) 2023.09.16