| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- python
- 운영체제
- reversing.kr
- Amazon S3
- 침입 차단 시스템(IPS)
- AWS 인프라 분석
- AWS 아키텍처 분석
- 프로그래머스
- AWS 침해사고 사례 분석
- AWS IAM Role
- 네트워크
- AWS 보안 아키텍처 분석
- terraform
- programmers
- TryHackMe
- 리버싱
- AWS 보안 사고 사례 모음
- IAM Federation
- reversing
- network
- AWS
- AWS Active Directory
- operating system
- AWS 침해 사고 사례 분석
- dreamhack
- AWS 인프라 아키텍처
- 드림핵
- AWS 3 Tier Architecture
- C
- AWS 사고 사례 분석
- Today
- Total
lhywk 님의 블로그
Terraform으로 AWS 리소스 생성 - AWS IAM 본문
참고자료: https://terraform101.inflearn.devopsart.dev/cont/iam-practice/
AWS Identity and Access Management(IAM)
AWS Identity and Access Management(IAM)는 AWS 리소스에 대한 액세스를 안전하게 제어할 수 있는 웹 서비스이다.
IAM을 사용하여 AWS 기본 접근 및 리소스를 사용하도록 권한 부여를 할 수 있다.
- AWS IAM User : AWS IAM User는 AWS 내에서 생성하는 사용자로 AWS와 상호작용하는 사용자 혹은 어플리케이션을 의미한다.
- AWS IAM Group : AWS IAM Group은 IAM User의 집합이고 Group을 사용함으로써 다수 사용자에 대하여 동일한 권한을 보다 쉽게 관리할 수 있다.
- AWS IAM Role : AWS IAM Role은 특정 권한을 가진 IAM 자격증명이다. 이 Role을 사용함으로써 특정 사용자 혹은 어플리케이션에 혹은 AWS 서비스에 접근 권한을 위임할 수 있다.
- AWS IAM Policy : AWS의 접근하는 해당 권한을 정의하는 개체로 AWS IAM 리소스들과 연결하여 사용할 수 있다.
Terraform을 통해서 IAM 실습을 진행해보겠습니다.
IAM User 기본 생성
IAM User를 생성할 때는 aws_iam_user 리소스를 사용하면되고 필수적으로 필요한 설정은 name이다.

IAM 사용자 리소스 정의
- resource "aws_iam_user" "hoyoung_lee":
- AWS IAM 사용자를 만들겠다는 선언.
- "hoyoung_lee"는 테라폼 코드 내에서 이 리소스를 지칭하는 논리적 이름.
- name = "hoyoung.lee":
- 실제 AWS 콘솔에 나타날 사용자명.
- 보통 성과 이름 사이에 점(.)을 찍거나 하이픈(-)을 쓰는 규칙을 많이 사용.
terraform plan

terraform apply

*** 위 Terraform 코드를 통해 IAM user 를 생성해주었다고 하더라도, console 을 접속할 수 는 없다.
생성한 user의 password 가 설정되어있지 않기 때문이다.
비밀번호와 MFA는 직접 console을 통해 설정해야 한다.
혹은 AWS CLI 를 통해서 자동화를 진행할 수도 있다.
물론 테라폼을 통해 설정을 할 수 도 있으나 aws_iam_user_login_profile 을 사용해야 한다.
IAM group 기본 생성
IAM Group을 생성할 때는 aws_iam_group 리소스를 사용하면되고 필수적으로 필요한 설정은 name이다.

- resource "aws_iam_group" "devops_group":
- AWS IAM 그룹을 생성하겠다는 선언.
- "devops_group"은 테라폼 코드 내에서 이 그룹 리소스를 참조할 때 사용하는 이름.
- name = "devops":
- 실제 AWS 계정 내에서 생성될 그룹의 명칭.
terraform plan -> terraform apply

생성한 IAM User를 IAM group에 등록
IAM user를 IAM group 에 등록하는 것도 Terraform 으로 진행할 수 있다.
실제로 AWS IAM user를 개발자, 데브옵스, 검증 등 조직의 실제 그룹으로 나누고 등록하고 관리해야 한다.
Terraform을 통해서 IAM group membership을 생성한다.
IAM User를 생성할 때는 aws_iam_group_membership 리소스를 사용하면 된다.

그룹 멤버십 설정 (aws_iam_group_membership)
- 사용자를 특정 그룹에 배정해준다.
- users: 리스트 형태로 되어 있어 나중에 다른 사용자가 추가되면 계속 추가할 수 있다.
- group: 어떤 그룹에 넣을지 결정한다.
terraform plan

그룹은 이미 만들어져있어서 안뜬다. 이전에 실습하고 사용자를 제거해서 사용자는 다시 추가된다.
terraform apply

IAM role 기본 생성
IAM role을 생성할 때는 aws_iam_role 리소스를 사용하면되고 필수적으로 필요한 설정은 name이다.
여기에 aws_iam_role_policy도 만들어 생성한 aws_iam_role과 연결하는 작업도 수행해본다.

IAM 역할 생성 (aws_iam_role)
이 부분은 '누가' 이 역할을 사용할 수 있는지 정의하는 신뢰 정책이다.
- Principal: Service: "ec2.amazonaws.com": 이 역할을 사용할 수 있는 주체를 EC2 서비스로 한정한다.
- Action: "sts:AssumeRole": EC2 서비스가 이 역할을 '빌려 쓸 수 있도록' 허용한다는 뜻이다.

인라인 정책 정의 (aws_iam_role_policy)
이 역할이 '어떤 일'을 할 수 있는지 정의하는 권한 정책이다.
- Action: ["s3:GetObject"]: S3 버킷에서 파일을 내려받는(읽기) 권한만 부여한다.
- Resource: ["*"]: 모든 S3 버킷에 대해 허용한다.
인스턴스 프로파일 (aws_iam_instance_profile)
- IAM 역할은 논리적인 개념일 뿐이라서, 이를 실제 EC2 서버에 전달하기 위한 '전달자' 혹은 '컨테이너' 역할을 하는 인스턴스 프로파일이 필요하다.
- 나중에 EC2를 만들 때 이 hello-profile을 지정하면 해당 서버가 S3 읽기 권한을 갖게 된다.
terraform plan



- hello-iam-role이라는 역할을 만들고 오직 EC2 서버만 가능
- hello-s3-download는 어떤 S3 버킷에서든 파일을 가져오기 할 수 있다.
- hello-profile는 role을 profile에 담는 단계
terraform apply


AWS IAM Policy 의 종류
AWS의 접근하는 해당 권한을 정의하는 개체로 AWS IAM 리소스들과 연결하여 사용할 수 있다.
즉 AWS IAM policy 는 user에 할당 할 수도, group에 할당 할 수 있다.
IAM policy 는 여러 타입으로 나누어져있다.
AWS Managed policy: AWS에서 먼저 생성해놓은 Policy set. 사용자가 권한을 변경할 수 없다.
Customer Managed policy: User가 직접 생성하는 Policy로 권한을 직접 상세하게 만들어 관리할 수 있다.
IAM user policy 생성

- 리소스 종류 (aws_iam_user_policy):
- 인라인 정책이다. 특정 사용자에게만 딱 붙어 있는 정책으로, 사용자를 삭제하면 이 정책도 같이 사라진다.
- 정책 이름 (name = "super-admin"):
- 이 정책의 이름이다.
- 대상 사용자 (user):
- 아까 생성한 aws_iam_user.hoyoung_lee.name을 참조하여 이 사용자에게 권한을 주겠다고 지정한다.
- 정책 내용 (policy):
- "Effect": "Allow": 아래의 행위를 허용하겠다는 뜻
- "Action": ["*"]: AWS에서 제공하는 모든 행위(생성, 삭제, 수정, 조회 등)를 할 수 있다.
- "Resource": ["*"]: AWS 계정 내의 모든 리소스(VPC, EC2, S3, DB 등)를 대상으로 한다.

'AWS' 카테고리의 다른 글
| Guidance for Building a Containerized and Scalable Web Application on AWS 아키텍처 분석 (0) | 2026.03.11 |
|---|---|
| Terraform Advanced (0) | 2026.03.10 |
| Terraform으로 AWS 리소스 생성 - S3 (0) | 2026.03.10 |
| Amazon S3 (0) | 2026.03.10 |
| Terraform으로 AWS 리소스 생성 - VPC (0) | 2026.03.10 |