AWS IAM Role과 Policy를 생성해본다.
resource "aws_iam_role" "test-role" {
name = "test-role"
path = "/"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
EOF
}
IAM Role을 생성할 때는 aws_iam_role
리소스를 사용하고, 필수 요소는 name
이다.
내부를 살펴보면 role의 이름은 "test-role"이고 assume_role_policy
는 마지막줄에 EOF까지의 내용을 포함한다.
Statement
내부를 살펴보면 Sid
는 Statement
의 고유 이름을 나타낸다.
그리고 "ec2.amazonaws.com" Service
에서 "sts:AssumeRole"의 Action
을 "Allow"한다.
terraform plan
terraform apply
생성한 role에는 아직 권한이 없는 상태이다.
권한을 추가해본다.
기존의 iam_role.tf에 아래 내용을 추가한다.
resource "aws_iam_role_policy" "test_s3_policy" {
name = "test-s3-policy"
role = aws_iam_role.test-role.id
policy = <<EOF
{
"Statement": [
{
"Sid": "AllowAppArtifactsReadAccess",
"Action": [
"s3:*"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
EOF
}
resource "aws_iam_instance_profile" "test-profile" {
name = "test-profile"
role = aws_iam_role.test-role.id
}
IAM role Policy를 생성할 때는 aws_iam_role_policy
리소스르 이용한다. 이때 role
과 policy
는 필수 요소로, role
에는 policy를 attach할 IAM role을 적고 policy
에는 IAM inline policy를 적어준다.
aws_iam_instance_profile
은 IAM 역할을 위한 컨테이너로서 인스턴스 시작 시 EC2 인스턴스에 역할 정보를 전달하는데 사용된다. 만약 AWS Management 콘솔을 사용하여 EC2를 생성하는 경우, 콘솔이 자동으로 인스턴스 프로파일을 생성하여 해당 역할과 동일한 이름을 부여한다.
terraform plan
terraform apply
앞서 user를 생성한 tf 파일에 IAM User Policy를 추가한다.
resource "aws_iam_user" "dojun"{
name = "dojun"
}
resource "aws_iam_user_policy" "dojun_policy" {
name = "dojun_policy"
user = aws_iam_user.dojun.name
policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"*"
],
"Resource": [
"*"
]
}
]
}
IAM User Policy를 생성할 때는 ws_iam_user_policy
를 사용하고, user
와 policy
는 필수요소이다.
user
에는 policy를 연결할 IAM user를 적고, policy
에는 연결할 정책을 적는다.
terraform plan
terraform apply