[Terraform] IAM 정책, 역할 생성 및 역할에 정책 연결

HYEOB KIM·2022년 6월 7일
1

Terraform

목록 보기
1/11

목적

  • 사용자가 서버에 ssm 접근을 할 수 있도록 역할을 부여하려 합니다.
  • ssm을 사용할 수 있도록 하려면 ssm:StartSession 권한을 가진 정책을 생성하고, 역할에 연결한 뒤, 역할을 사용자에게 부여해야 합니다.

디렉토리 구조

테라폼 파일은 총 5개입니다.

  • variables.tf: 테라폼 코드에서 사용될 변수에 대한 정보가 들어있습니다.
  • provider.tf: provider에 대한 정보들이 포함되어 있습니다. 예를 들어, 어떤 provider를 이용할 것인지, 리전은 어느 곳인지, 프로파일은 어떤 걸 사용할 것인지 등의 정보가 들어있습니다.
  • role.tf: 역할 생성 및 정책 연결 코드.
  • policy.tf: 정책 생성 코드.
  • output.tf: 어떤 값들을 출력할 것인가.

코드 리뷰

provider.tf

var.profile에 대한 정보는 variables.tf에 들어있습니다.

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "4.17.1"
    }
  }
}

provider "aws" {
    profile = var.profile
    region = "ap-northeast-2"
}

role.tf

  • 역할을 생성합니다.
  • 역할의 신뢰 관계에 CLI 환경에서의 접근에 대한 정책을 적어줍니다.
  • 원하는 정책을 생성한 역할에 연결해줍니다.(aws_iam_role_policy_attachment)
# ssm start-session-role
resource "aws_iam_role" "test" {
    name = "test-tf-ssm-start-session-role"
    path = "/"
    assume_role_policy = jsonencode(
        {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Sid": "AllowDevUserAssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": [
                            "arn:aws:iam::797587922006:user/khyup0629@hongikit.com"
                        ]
                    },
                    "Action": "sts:AssumeRole",
                    "Condition": {
                        "StringEquals": {
                            "sts:RoleSessionName": "$${aws:username}-cli"
                        },
                        "Bool": {
                            "aws:MultiFactorAuthPresent": "true"
                        }
                    }
                }
            ]
        }
    )
}

resource "aws_iam_role_policy_attachment" "test" {
    role       = aws_iam_role.test.name
    policy_arn = aws_iam_policy.test.arn
}

policy.tf

  • ssm:StartSession 권한을 가진 정책을 생성합니다.
# ssm start-session policy
resource "aws_iam_policy" "test" {
    name        = "test-tf-ssm-start-session"
    path        = "/"
    description = "(test)create ssm-start-session policy with terraform"
    policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "ssm:StartSession",
            "Resource": "*"
        }
    ]
    })
}

output.tf

  • 원하는 정보를 출력합니다.
# 생성한 역할의 arn 출력
output "role_arn" {
  value = aws_iam_role.test.arn
}

콘솔에서 결과 확인

IAM 역할 페이지를 보면 테라폼 코드로 생성한 역할이 존재하는 것을 볼 수 있습니다.

권한 탭을 보면 정책이 하나 연결되어 있는 것이 보입니다.

해당 정책을 클릭해 보면 ssm:StartSession 권한을 가진 것을 볼 수 있습니다.

profile
Devops Engineer

0개의 댓글