IAM(Identity and Access Management)은 AWS 리소스에 대한 접근을 제어하는 서비스입니다. "누가(Who) 어떤 리소스에(What) 어떤 작업을(Action) 할 수 있는가"를 정의합니다. IAM은 추가 비용 없이 무료로 제공되며, 모든 AWS 계정에 기본으로 포함되어 있습니다.
+----------+ 속함 +---------+
| User |------------>| Group |
+----------+ +---------+
| |
| 직접 연결 | 연결
| |
v v
+----------+ +----------+
| Policy |<------------| Policy |
+----------+ (동일한 +----------+
Policy)
+----------+
| Role | (사람이 아닌 서비스 또는 외부 계정에 부여)
+----------+
|
v
+----------+
| Policy |
+----------+
IAM User는 AWS 계정 안에서 개별 사람이나 애플리케이션을 나타내는 엔티티입니다. 새로운 AWS 계정을 만들면 처음 로그인할 때 사용하는 계정은 Root 사용자로, 모든 권한을 가지며 제한할 수 없으므로 일상적인 작업에는 절대 사용하지 않는 것이 보안 원칙입니다.
실제 업무에서는 Root 사용자 대신 IAM User를 생성하여 사용합니다. IAM User는 콘솔 로그인용 비밀번호와 API 호출용 Access Key를 각각 발급받습니다.
Group은 다수의 IAM User를 묶어서 동일한 Policy를 한 번에 적용하는 논리적 단위입니다.
예를 들어 개발팀 그룹에 EC2 읽기 권한을 부여하면, 해당 그룹에 속한 모든 개발자가 자동으로 EC2를 조회할 수 있습니다. 그룹은 중첩될 수 없으며, User는 여러 그룹에 동시에 속할 수 있습니다.
Policy는 권한을 정의하는 JSON 문서입니다. "S3 버킷에 대해 읽기/쓰기를 허용한다"와 같은 규칙을 JSON으로 표현합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:PutObject"],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Effect: Allow(허용) 또는 Deny(거부)Action: 허용하거나 거부할 API 작업 목록Resource: 적용 대상 리소스의 ARNPolicy에는 두 종류가 있습니다. AWS 관리형 정책은 AWS가 미리 만들어 둔 범용 Policy이고, 고객 관리형 정책은 사용자가 직접 작성한 Policy입니다.
Role은 특정 사람이 아닌 AWS 서비스나 외부 계정에 임시 권한을 부여하는 메커니즘입니다.
예를 들어 EC2 인스턴스에서 S3에 파일을 업로드해야 할 때, Access Key를 서버에 저장하는 대신 EC2에 S3 쓰기 Role을 부여합니다. 서버는 이 Role을 통해 임시 자격 증명을 자동으로 발급받아 사용합니다. 고정 키를 소스 코드나 서버에 저장하지 않아도 되므로 보안이 향상됩니다.
MFA(Multi-Factor Authentication)는 비밀번호 외에 추가 인증 수단을 요구하는 보안 기능입니다.
Root 사용자와 권한이 높은 IAM User에는 반드시 MFA를 활성화해야 합니다. AWS는 Google Authenticator 같은 가상 MFA 앱, 하드웨어 보안 키(YubiKey), AWS 전용 하드웨어 OTP 기기를 지원합니다.
IAM 설계의 핵심 원칙은 최소 권한(Least Privilege)입니다. 사용자나 서비스에게 업무에 필요한 최소한의 권한만 부여하고, 나머지는 모두 거부하는 방식입니다.
잘못된 방식: AdministratorAccess (모든 권한) 부여 -> 작업 완료
올바른 방식: 필요한 Action, 특정 Resource에만 Allow 명시
처음에는 광범위한 권한으로 시작해 점차 필요한 권한만 남기는 방식(Permission Boundary 활용)으로 운영합니다. 사용하지 않는 User와 Access Key는 주기적으로 정리합니다.