AWS DVA-C02 마스터 노트 시리즈 1편. 시험 비중 26%인 보안 도메인의 토대 — IAM 사용자·그룹·역할의 차이, 정책 평가의 명시적 거부 우선 룰, STS 임시 자격 증명, iam:PassRole 권한 상승 함정, Cognito User Pool과 Identity Pool 차이까지 자격증 시험에 자주 나오는 핵심을 한 흐름으로.
이 글은 AWS DVA-C02 마스터 노트 시리즈의 첫 번째 편입니다. AWS Certified Developer Associate(DVA-C02)는 130분·65문항·합격선 720점의 자격증이에요. 그중 보안 도메인이 26% — 단일 영역으로 가장 큰 비중. 이 시리즈 12편 중 IAM·암호화·Cognito 같은 보안 토픽이 절반 가까이 차지하는 이유입니다.
이 시리즈는 12편으로 DVA-C02 시험 범위 전체를 다룹니다. 1편의 목표는 단순해요. IAM 사용자/그룹/역할 + STS + Cognito 세 단어를 손에 잡히게 만드는 것. 이 셋이 잡혀야 2편 컴퓨팅 서비스, 3편 스토리지에서 IAM 패턴이 자연스럽게 따라옵니다.
이 시리즈는 AWS 공식 문서, AWS Skill Builder 자료, DVA-C02 시험 가이드, 여러 공개 학습 자료를 참고해 한국어 학습 노트로 풀어쓴 자료입니다.
읽으면서 AWS 콘솔 또는 CLI로 직접 IAM 사용자·역할을 만들어 보고 정책을 박아 보면 본문이 머리에 훨씬 잘 박혀요. 30분이면 첫 IAM 사용자에게 정책을 붙여 콘솔 접근 테스트까지 끝낼 수 있습니다.
처음 IAM이 어렵게 느껴지는 이유
이유는 두 가지예요.
첫째, 사용자·그룹·역할 세 단어가 비슷비슷합니다. 영어 단어로도 User·Group·Role이라 처음엔 어떤 자리에 어떤 걸 써야 하는지 안 보여요.
둘째, 정책 평가 로직이 직관과 어긋납니다. "Allow와 Deny가 동시에 있으면?" 답이 곧바로 안 나오는데 시험에는 매번 등장.
해결법은 한 가지예요. 회사 비유로 잡으세요. 사용자 = 직원 한 명, 그룹 = 부서, 역할 = 임시 출입증(다른 부서 회의실 들어갈 때 빌리는). 그리고 명시적 거부 = 보안실 거절 — 다른 모든 허가를 다 받아도 보안실 한 번 거절하면 끝. 이 비유 하나로 정책 평가가 정리됩니다.
IAM의 글로벌 특성
IAM은 리전에 종속되지 않는 글로벌 서비스 입니다. 서울에서 만든 사용자·정책이 도쿄·버지니아 어디서든 그대로 작동해요. 콘솔 우상단 리전 드롭다운이 IAM에서는 비활성. 이 한 줄은 시험에 자주 나옵니다.
전역 서비스 4총사 — IAM · Route 53 · CloudFront · WAF. 이 넷은 리전 개념이 없어요.
사용자·그룹·역할 — 회사 비유로
사용자 (User)
AWS 계정 안의 한 명. 콘솔 비밀번호 + 액세스 키(프로그래밍 방식)를 가질 수 있어요.
여기서 시험 함정이 하나 있어요. 루트 계정은 일상 작업에 절대 사용 X. 모든 권한 다 가지고 있어 사고 위험 큼. 초기 설정 후 봉인하고 IAM 사용자를 만들어 사용.
그룹 (Group)
여러 사용자를 묶어 권한 일괄 관리.
부서(그룹) "Developers"
├── 사용자 alice
├── 사용자 bob
└── 사용자 charlie
여기서 정말 중요한 시험 함정 — 그룹에는 사용자만 들어갈 수 있어요. 역할이나 다른 그룹은 X. 그룹 중첩 불가. 이 한 줄이 시험에 자주.
역할 (Role)
AWS 서비스나 외부 사용자가 임시로 권한을 빌리는 도구. 임시 출입증 비유가 딱 맞아요.
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Principal": { "Service": "lambda.amazonaws.com" },
"Action": "sts:AssumeRole"
}]
}
이 신뢰 정책은 "Lambda 서비스가 이 역할을 맡을 수 있다"는 의미예요. EC2·Lambda·ECS 같은 AWS 서비스가 다른 서비스에 접근할 때 역할 사용.
IAM 정책 — JSON 4요소
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket"],
"Resource": [
"arn:aws:s3:::my-bucket",
"arn:aws:s3:::my-bucket/*"
]
}]
}
핵심 4요소 — Effect (Allow/Deny) · Action (s3:GetObject 등) · Resource (ARN) · Condition (선택, MFA·IP 제한 등).
정책 유형
| 유형 | 생성자 | 재사용 | 버전 관리 |
|---|---|---|---|
| AWS 관리형 | AWS | ◯ | AWS 자동 |
| 고객 관리형 | 사용자 | ◯ | ◯ (롤백 가능) |
| 인라인 | 사용자 | X (1:1) | X |
권장 — 고객 관리형. AWS 모범 사례.
정책 평가 — 명시적 거부 우선
평가 순서:
- 기본값은 거부 (Default Deny) — 명시적 Allow 없으면 자동 거부
- 명시적 거부 우선 (Explicit Deny wins) — Deny 있으면 다른 모든 Allow 무시
- 명시적 Allow + 명시적 Deny 없음 = 허용
IAM + S3 버킷 정책
| IAM | S3 정책 | 결과 |
|---|---|---|
| Allow | 없음 | 허용 |
| Allow | Deny | 거부 (명시적 Deny 우선) |
| 없음 | Allow | 허용 |
| Deny | Allow | 거부 (명시적 Deny 우선) |
여기서 정말 중요한 시험 함정 — 명시적 Deny가 모든 Allow를 이긴다. 이 한 줄이 시험 정답을 가르는 자리가 매우 많아요.
STS — 임시 자격 증명
Security Token Service. 15분~12시간 (기본 1시간) 유효한 임시 자격 증명 발급.
발급되는 3개:
- Access Key ID
- Secret Access Key
- Session Token (이게 추가됨, 일반 IAM 사용자엔 없음)
핵심 4 API
AssumeRole
내 계정 또는 교차 계정의 IAM 역할을 위임받음. 교차 계정 액세스의 표준.
aws sts assume-role \
--role-arn "arn:aws:iam::123456789012:role/CrossAccountRole" \
--role-session-name "MySession" \
--duration-seconds 3600
GetSessionToken
MFA 사용자가 임시 자격 증명 획득.
aws sts get-session-token \
--duration-seconds 3600 \
--serial-number "arn:aws:iam::123456789012:mfa/user" \
--token-code "123456"
GetCallerIdentity
"내가 누구인가" 확인. 디버깅 1순위.
aws sts get-caller-identity
# {"UserId": "AIDAXXXX", "Account": "123456789012", "Arn": "arn:aws:iam::123456789012:user/johndoe"}
DecodeAuthorizationMessage
Access Denied 오류 메시지 해독.
aws sts decode-authorization-message \
--encoded-message "<암호화된 문자열>"
MFA 강제 적용
중요 작업에 MFA 의무화.
{
"Effect": "Deny",
"Action": "ec2:TerminateInstances",
"Resource": "*",
"Condition": {
"BoolIfExists": {
"aws:MultiFactorAuthPresent": "false"
}
}
}
MFA 코드 없이 EC2 종료 시도 → 자동 차단.
iam:PassRole — 권한 상승 차단
여기서 정말 중요한 시험 함정 — iam:PassRole 은 사용자가 AWS 서비스에 IAM 역할을 할당(전달) 하기 위한 권한이에요.
이 권한이 없으면, 권한 적은 사용자가 관리자 역할을 EC2에 붙여 권한 상승하는 보안 사고를 막습니다.
{
"Effect": "Allow",
"Action": ["iam:PassRole", "iam:GetRole"],
"Resource": "arn:aws:iam::123456789012:role/LambdaExecutionRole"
}
특정 역할만 전달 가능하게 제한 — 권한 상승 차단의 표준 패턴. 시험에 매우 자주 등장.
Cognito — 외부 사용자 인증
AWS의 외부 사용자(웹·모바일 앱 사용자) 관리 서비스. 두 가지 풀이 있어요.
Cognito User Pool
사용자 가입·로그인 관리. 회사 비유 — 회원 데이터베이스 + 로그인 시스템.
특징:
- 사용자 ID/비밀번호 저장
- 소셜 로그인 통합 (Google, Facebook, Apple)
- MFA·이메일/SMS 인증
- API Gateway·ALB와 직접 통합 (인증 토큰)
Cognito Identity Pool
AWS 리소스 임시 자격 증명 발급. 회사 비유 — 외부 손님에게 주는 임시 출입증.
특징:
- 게스트 사용자(미인증) 지원
- 인증된 사용자 → IAM 역할 매핑 → AWS 리소스 접근
- User Pool과 연동 가능
차이 한 줄
여기서 정말 중요한 시험 함정 — 두 Pool의 역할이 다릅니다.
| 구분 | User Pool | Identity Pool |
|---|---|---|
| 역할 | 회원 관리·로그인 | AWS 리소스 액세스 |
| 결과 | JWT 토큰 | 임시 AWS 자격 증명 |
| 비유 | 회원 DB + 로그인 | 임시 출입증 발급 |
User Pool로 누군지 확인 → Identity Pool로 AWS 권한 줌. 두 단계 조합이 일반적.
Directory Service — AD 통합
| 종류 | 설명 |
|---|---|
| AWS Managed Microsoft AD | 클라우드에 완전한 AD |
| AD Connector | 온프레미스 AD를 AWS와 프록시 연결 |
| Simple AD | AWS 자체 AD 호환 디렉토리 |
기업이 기존 AD와 AWS를 통합할 때 사용. 시험에서 가끔 등장.
시험 직전 한 번 더 — 자주 헷갈리는 함정 모음
여기까지가 1편의 핵심입니다. 시험 직전 또는 실무에서 헷갈릴 때 다시 펼쳐 볼 수 있게 압축 노트로 마무리할게요.
- IAM은 글로벌 서비스 (리전 종속 X)
- 글로벌 4총사 = IAM · Route 53 · CloudFront · WAF
- 사용자·그룹·역할 — 직원·부서·임시 출입증 비유
- 그룹에 사용자만 들어감 — 역할·다른 그룹 X, 중첩 X
- 루트 계정 일상 사용 절대 X — 봉인
- IAM 정책 = JSON, Effect / Action / Resource / Condition 4요소
- 정책 유형 — AWS 관리형 / 고객 관리형(권장) / 인라인
- 정책 평가 — 명시적 Deny > 명시적 Allow > 암묵적 Deny
- IAM + S3 버킷 정책 결합 — Deny 하나면 무조건 거부
- STS 임시 자격 증명 = Access Key + Secret + Session Token
- 유효 기간 15분~12시간 (기본 1시간)
- AssumeRole = 교차 계정 / GetSessionToken = MFA / GetCallerIdentity = 누구냐 / DecodeAuthorizationMessage = 오류 해독
- MFA 강제 —
Condition+aws:MultiFactorAuthPresent iam:PassRole= 역할을 서비스에 전달하는 권한- 없으면 권한 상승 차단 — 시험 단골
- 특정 역할만 전달 가능하게 Resource 제한
- Cognito User Pool = 회원 관리·로그인 (JWT)
- Cognito Identity Pool = AWS 리소스 임시 자격 증명
- 두 Pool 조합 — 인증 + 권한 부여
- Directory Service — Managed AD / AD Connector / Simple AD
시리즈 다른 편
같은 시리즈의 다른 글들도 같은 톤으로 묶어 정리되어 있어요. 1편 보안 토대가 잡히면 2~12편의 모든 서비스에서 IAM 패턴이 반복됩니다.
- 1편 — IAM·STS·Cognito (현재 글)
- 2편 — 컴퓨팅 (EC2·Lambda·ECS·Beanstalk)
- 3편 — 스토리지 (S3·EBS·EFS)
- 4편 — 데이터베이스 (RDS·Aurora·DynamoDB·ElastiCache)
- 5편 — 네트워킹 (VPC·CloudFront·API Gateway·Route 53)
- 6편 — 메시징 (SQS·SNS·Kinesis·EventBridge)
- 7편 — 서버리스 (Lambda·SAM·Step Functions)
- 8편 — CI/CD (CodeCommit·CodeBuild·CodeDeploy·CodePipeline)
- 9편 — 모니터링 (CloudWatch·X-Ray·CloudTrail)
- 10편 — 보안·암호화 (KMS·SSM·Secrets Manager)
- 11편 — 컨테이너 (ECS·ECR·Fargate·EKS)
- 12편 — 개발자 도구 (CLI·SDK·CDK·CloudFormation)
공식 문서: AWS IAM 사용자 가이드와 DVA-C02 시험 가이드에서 더 깊이 갈 수 있어요.
다음 글(2편)에서는 컴퓨팅 서비스 전반 — EC2 인스턴스 타입·Lambda 트리거 모델·ECS/Fargate 컨테이너·Elastic Beanstalk PaaS까지 풀어 갑니다.