본문 바로가기

AWS Cloud

[AWS - Terraform] IAM Role 생성 및 정책 Attachment

반응형

* 참조 사항
- 필자는 학습을 목적으로 main.tf에 전체 인프라 구축 코드를 작성하였으며, 이에 대해 각기 설명함
- .tf 파일을 resource 별로 분할할 시, 필자와 코드가 다를 수 있음
- Terraform 기초부터 순차적으로 보길 권장 (1번 게시물의 이해가 매우 중요)

1. Architecture Create : https://isc9511.tistory.com/163

2. Bucket 생성 및 파일 업로드 : https://isc9511.tistory.com/164

 

 

 

* IAM(Identity and Access Management) Role 및 Policy
- AWS에서 정책이 정말 세세하게 분할이 되어있는데, 어떤 행위를 수행하려면 적절한 권한(정책이 연결되어 있는)이 필수
IAM을 정말 타이트하게 설정하려면 눈알을 포기해야함

- 부가적으로 어떤 엔터티에 사용할 Role인지 등 세세하게 설정이 필요
(대부분의 정책이 생성이 되어있지만, JSON 형식으로 필요 권한만 Custom도 가능 / 단, 에러가 겁나 터지니 비추)

AWS 관리 콘솔에서 IAM Role, Policy 설정 시 화면

 

 

 

* Code 내용
- 아래는 EC2 인스턴스가 Bucket의 사용과 SSM(System Manager - Session Manager)를 기반으로 접속할 수 있도록 설정

- 인스턴스가 사용하는 IAM Role의 경우 Instance ProfileEC2 생성 시, 별도 할당이 필요

- 아래 코드처럼 실제 Amazon 관리 콘솔 내에서도, Role 생성 시, 정책을 연결하거나 Custom 하게 생성한 정책을 연결

# IAM Role 생성
resource "aws_iam_role" "instance-profile" {
  name = "instance-ssm-bucket-role"
    # 생성할 IAM Role 이름

  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Effect = "Allow",
        Principal = {
            Service = "ec2.amazonaws.com"
                # IAM Role 생성 시, EC2 Profile 역할로 사용됨을 지정
        }
        Action = "sts:AssumeRole"
            # AdministratorAccess 권한이 존재 하더라도, AssumeRole로 접근 필수적
      }
    ]
  })

  tags = {
    Name = "Instance SSM and Bucket Role"
        # 생성한 IAM에 지정되는 Tag 이름
  }
}

# 위에서 생성한 IAM Role에 필요 정책 부착
resource "aws_iam_role_policy_attachment" "attach-ssm-s3-policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
  role = aws_iam_role.instance-profile.name
}

resource "aws_iam_role_policy_attachment" "attach-s3-policy" {
  policy_arn = "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
  role = aws_iam_role.instance-profile.name
}

Instance Profile로 EC2에 연결하는 Code는 추후 EC2를 생성하는 게시물에서 등장 예정

 

 

 

반응형