IAM이란?
IAM(Identity and Access Management)은 AWS에서 사용자의 신원(Identity)을 확인하고, 접근 권한(Access)을 제어하는 보안 서비스입니다.
즉, 누가(AWS 사용자, 리소스) 어떤 서비스나 리소스(S3, EC2 등)에 어떤 방식으로 접근할 수 있는지를 결정하는 기능을 제공합니다.
- 누가? – 사용자(User), 그룹(Group), 역할(Role)
- 무엇을? – 리소스(S3, EC2, RDS 등)
- 어떻게? – 정책(Policy)을 통해 허용하거나 제한
IAM은 AWS 보안의 핵심 구성 요소이며, 올바른 권한 설정을 통해 보안 사고를 예방하고 효율적인 자원 관리를 가능하게 합니다.
ARN (Amazon Resource Name)
AWS에서는 수많은 자원(리소스)을 고유하게 식별할 수 있어야 하는데, 이를 위해 ARN이라는 식별 체계를 사용합니다. ARN은 Amazon Resource Name의 약자로, 각 리소스가 어떤 서비스에 속하고, 어느 계정 소유인지, 어느 리전에 있는지를 명확하게 식별할 수 있는 고유한 이름입니다.
예: arn:aws:iam::123456789012:user/dev-user
는 IAM 서비스 내 123456789012 계정의 dev-user 사용자라는 뜻입니다.
IAM과 권한 관리 구조
AWS IAM(Identity and Access Management)은 AWS에서 사용자, 그룹, 역할, 권한 등을 관리할 수 있는 보안 서비스입니다. IAM을 통해 누가 어떤 자원을 사용할 수 있는지를 세밀하게 제어할 수 있습니다.
하나의 AWS 계정은 루트 사용자로 시작하며, 루트는 모든 권한을 가진 최고 관리자입니다. 하지만 보안상 루트 계정은 사용을 최소화하고, 일반적으로는 IAM 사용자를 만들어 해당 사용자에게 필요한 권한만 부여해 작업하는 것이 보안 모범 사례입니다.
- 사용자(User): AWS에 로그인해 사용하는 개별 계정
- 그룹(Group): 여러 사용자를 하나로 묶고, 공통된 권한을 부여
- 역할(Role): 특정 작업을 위해 일시적으로 권한을 위임받는 주체
- 정책(Policy): 어떤 자원에 어떤 작업을 허용할지 정의하는 JSON 형식의 권한 문서
- 자격 증명 기반 정책: 사용자, 그룹, 역할 등에 직접 부여
- 리소스 기반 정책: S3, Lambda 같은 자원에 직접 부여
- 권한 경계(Permissions Boundary): 사용자가 최대로 가질 수 있는 권한의 한계선
역할(Role)과 권한(Permission)의 차이?
AWS에서 권한(Permission)은 특정 작업(S3 업로드, EC2 시작 등)을 할 수 있는 능력, 역할(Role)은 이러한 권한을 하나의 묶음으로 정의하고 다른 사용자나 AWS 서비스가 이를 임시로 사용할 수 있도록 위임하는 수단입니다.
즉, 권한은 "무엇을 할 수 있는가"에 대한 정의이고, 역할은 "누가 그 권한을 행사할 수 있는가"를 설정하는 도구입니다.
- 권한(Permission): S3에 파일 업로드(s3:PutObject), EC2 시작(ec2:StartInstances) 등 작업을 정의
- 역할(Role): 예를 들어 EC2 인스턴스가 S3에 접근하도록 역할을 통해 권한을 부여
- IAM 사용자는 직접 권한을 받아 행동하지만, EC2 같은 리소스는 역할을 통해 간접적으로 권한 행사
비유: 권한은 "열쇠", 역할은 그 열쇠를 담은 "출입증"입니다. AWS 서비스(예: EC2)는 로그인할 수 없기 때문에, 역할이라는 출입증을 통해 열쇠를 빌려 리소스에 접근합니다.
예시: EC2 인스턴스에 ‘S3 읽기 전용’ 역할을 부여하면, 해당 인스턴스에서 Access Key 없이도 S3 데이터를 읽을 수 있습니다.
사용자에게 권한을 직접 줄 때 VS 역할(Role)을 사용하는 경우
1. 사용자에게 권한을 직접 부여하는 경우
- EC2 인스턴스를 시작하거나 S3에 파일을 업로드하는 등 일반적인 작업이 필요한 경우
- IAM 사용자에게 정책을 직접 연결하여 권한을 부여
- 예: user-1에게 AmazonEC2FullAccess 또는 s3:PutObject 권한을 직접 부여
2. 역할(Role)을 사용하는 경우
- EC2, Lambda 등 AWS 서비스는 직접 로그인할 수 없으므로, 역할을 통해 권한을 대신 행사
- 사용자가 평소에는 제한된 권한을 가지되, 특정 작업 시 역할을 Assume 하여 일시적으로 높은 권한 부여
- 다른 AWS 계정의 리소스에 접근할 때 역할을 통해 접근
- SSO(싱글사인온) 환경에서 역할을 통해 로그인 및 권한 분리
비교
상황 | 방식 |
---|---|
user-1이 EC2를 시작하려고 할 때 | user-1에게 EC2 시작 권한을 직접 부여 |
EC2 인스턴스에서 S3에 파일 업로드 | EC2에 역할을 연결하고, 역할에 S3 업로드 권한 포함 |
사용자가 관리자 권한이 필요할 때만 임시 전환 | 관리자 역할을 Assume하여 일시적으로 사용 |
다른 계정의 S3에 접근해야 하는 경우 | 해당 계정에 역할을 만들고 신뢰 정책을 통해 접근 허용 |
IAM 구성 요소 관계 요약
주체 | 역할 | 권한 연결 방식 | 예시 |
---|---|---|---|
사용자 (User) | 사람(개발자, 운영자 등) | 정책을 직접 연결하여 권한 부여 | user-1에게 S3 업로드 권한 부여 |
역할 (Role) | AWS 리소스나 외부 사용자에게 권한을 위임 | 정책을 연결하고 역할을 EC2 등에 할당 | EC2 인스턴스에 S3 읽기 전용 역할 연결 |
정책 (Policy) | 무엇을 허용/거부할지를 정의한 권한 문서 | 사용자, 역할 등에 부착되어 권한 제공 | s3:GetObject, ec2:StartInstances 등 정의 |
📌 요약 설명:
IAM 구조는 사용자 또는 역할이 정책을 통해 권한을 부여받는 형태입니다.
EC2와 같은 AWS 리소스는 로그인할 수 없기 때문에, 역할(Role)을 통해 권한을 위임받아 동작합니다.
요약 설명:
사용자는 정책을 통해 직접 권한을 받거나, 역할을 Assume하여 간접적으로 권한을 행사할 수 있습니다.
EC2 같은 리소스는 직접 로그인할 수 없기 때문에 역할(Role)에 정책을 연결한 뒤, 해당 역할을 부여함으로써 권한을 갖게 됩니다.
IAM 정책과 안전한 권한 부여 원칙
최소 권한 원칙이란?
최소 권한 원칙은 “사용자에게 꼭 필요한 권한만 부여하고, 그 외는 허용하지 않는다”는 보안 전략입니다. 불필요한 권한까지 부여하면 실수나 보안 사고의 가능성이 높아지기 때문에, AWS에서는 이를 정책으로 명확히 설정합니다.
정책 예시 - JSON 형식
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket-name/*"
}
]
}
- Effect: 허용(Allow) 또는 거부(Deny)
- Action: 어떤 작업을 허용할지 (예: s3:GetObject → S3 파일 조회)
- Resource: 어떤 자원에 적용할지 (예: 특정 S3 버킷의 객체들)
권한 부여 예시 비교
정책 | 설명 | 위험도 |
---|---|---|
"Action": "s3:*" |
S3의 모든 작업 허용 (조회, 삭제, 생성 등) | 위험함 ❌ |
"Action": "s3:GetObject" |
객체 조회만 허용 (파일 읽기만 가능) | 안전함 ✅ |
"Action": ["s3:GetObject", "s3:PutObject"] |
파일 읽기 및 쓰기 허용 | 필요한 작업만 허용됨 |
IAM 정책 종류 – 인라인 정책 vs 관리형 정책
IAM 정책이란?
IAM 정책은 JSON 형식으로 작성되며, 사용자, 그룹, 역할에 부착됩니다. 이 정책은 크게 두 가지 방식으로 존재합니다:
- 인라인 정책 (Inline Policy)
- 관리형 정책 (Managed Policy)
인라인 정책
인라인 정책은 특정 사용자, 그룹, 역할 내부에 직접 작성하는 정책입니다. 해당 객체에만 종속되며, 객체가 삭제되면 정책도 함께 사라집니다.
관리형 정책
관리형 정책은 AWS가 제공하거나 사용자가 생성한 정책으로, IAM 정책 목록에 독립적으로 존재하며 여러 사용자, 그룹, 역할에 재사용 가능합니다.
차이점 정리
항목 | 인라인 정책 | 관리형 정책 |
---|---|---|
정책 위치 | 대상 내부 | IAM 정책 목록에 별도 존재 |
재사용 가능성 | 불가능 | 가능 |
객체 삭제 시 | 정책도 함께 삭제 | 정책은 남아 있음 |
관리 효율 | 낮음 | 높음 |
사용 예 | 특수 권한, 일회성 작업 | 공통 권한 구성 |
요약
IAM은 AWS 보안의 핵심 요소로, 정책 → 역할/사용자 → 권한이라는 구조로 접근 제어를 세밀하게 제어합니다.
보안을 위해서는 최소 권한 원칙을 지키고, 역할 기반 접근 방식(RBAC)을 통해 리소스 접근을 설계하는 것이 중요합니다.
'AWS' 카테고리의 다른 글
AWS - 웹서비스 환경 구성#1 (0) | 2025.06.02 |
---|---|
AWS - EC2 인프라 구조(AMI, EBS, 스냅샷, EIP, Load Balancer, Auto Scaling) (1) | 2025.06.02 |
AWS - 보안그룹, NACL의 인바운드, 아웃바운드 규칙 편집 (1) | 2025.06.02 |
AWS - VPC (0) | 2025.05.30 |
AWS - CLI설치, Access Key를 이용한 AWS 서비스 이용 (0) | 2025.05.30 |
AWS - 리전, 가용영역(AZ), 로컬영역 (0) | 2025.05.30 |