AWS KMS 키 관리: 고객 관리형 vs AWS 관리형, 키 정책 작성법
AWS KMS의 키 유형(고객 관리형, AWS 관리형, AWS 소유)별 차이점과 키 정책 작성 방법, IAM 정책과의 관계를 상세히 설명합니다.
관련 시험 도메인
- Domain 1: Design Secure Architectures
핵심 요약: KMS 키 유형 선택
결론부터 말하면: 대부분의 경우 AWS 관리형 키로 충분합니다. 키 정책 수정, 키 교체 제어, 크로스 계정 액세스가 필요하면 고객 관리형 키를 선택하세요.
한눈에 보는 비교
| 구분 | 고객 관리형 키 | AWS 관리형 키 | AWS 소유 키 |
|---|---|---|---|
| 키 정책 제어 | 완전 제어 | 읽기만 가능 | 접근 불가 |
| 키 교체 제어 | 선택적 | 자동 (1년) | AWS 관리 |
| CloudTrail 감사 | 가능 | 가능 | 불가 |
| 크로스 계정 공유 | 가능 | 불가 | 불가 |
| 월별 비용 | $1/키 | 무료 | 무료 |
| API 요청 비용 | 있음 | 있음 | 없음 |
시험 팁
시험 핵심: "키 정책 수정" 또는 "크로스 계정 액세스" → 고객 관리형 키 필수. "최소 비용" → AWS 관리형 키 또는 AWS 소유 키
KMS 키 유형 이해하기
AWS KMS는 세 가지 유형의 키를 제공합니다.
┌─────────────────────────────────────────────────────────────┐
│ AWS KMS 키 유형 │
├─────────────────┬─────────────────┬─────────────────────────┤
│ 고객 관리형 키 │ AWS 관리형 키 │ AWS 소유 키 │
│ (CMK) │ (aws/service) │ │
├─────────────────┼─────────────────┼─────────────────────────┤
│ • 사용자 생성 │ • AWS 서비스 │ • AWS 내부 사용 │
│ • 완전 제어 │ 자동 생성 │ • 고객 계정에 없음 │
│ • 월 $1/키 │ • 읽기만 가능 │ • 무료 │
│ • 유연한 교체 │ • 자동 교체 │ • 투명한 암호화 │
└─────────────────┴─────────────────┴─────────────────────────┘
고객 관리형 키 (Customer Managed Keys)
사용자가 직접 생성, 소유, 관리하는 KMS 키입니다.
사용자
│
├── 키 생성 (CreateKey)
│
├── 키 정책 작성/수정
│
├── 활성화/비활성화
│
├── 키 교체 설정
│
├── 태그/별칭 관리
│
└── 삭제 예약 (7-30일 대기)
| 특징 | 설명 |
|---|---|
| 식별자 | DescribeKey의 KeyManager = CUSTOMER |
| 제어 수준 | 키 정책, IAM 정책, 권한 부여 완전 제어 |
| 교체 | 수동 또는 자동(1년) 선택 가능 |
| 비용 | 월 $1/키 + API 요청 비용 |
| CloudTrail | 모든 사용 기록 감사 가능 |
적합한 경우:
- 키 정책을 직접 수정해야 할 때
- 크로스 계정 액세스가 필요할 때
- 키 교체 주기를 제어해야 할 때
- 특정 규정 준수 요구사항이 있을 때
AWS 관리형 키 (AWS Managed Keys)
AWS 서비스가 자동으로 생성하고 관리하는 KMS 키입니다.
AWS 서비스 (S3, EBS, RDS 등)
│
└── aws/<service-name> 키 자동 생성
│
├── alias/aws/s3
├── alias/aws/ebs
├── alias/aws/rds
└── ...
| 특징 | 설명 |
|---|---|
| 식별자 | alias/aws/<service> 형식 (예: aws/s3) |
| 제어 수준 | 읽기만 가능, 수정/삭제 불가 |
| 교체 | 자동으로 연 1회 (약 365일) |
| 비용 | 월별 요금 없음, API 요청 비용만 |
| CloudTrail | 모든 사용 기록 감사 가능 |
적합한 경우:
- 키 관리 오버헤드를 피하고 싶을 때
- 기본 암호화만 필요할 때
- 비용을 최소화하고 싶을 때
시험 팁
주의: 2021년 이후 새 AWS 서비스는 AWS 관리형 키 대신 AWS 소유 키를 기본으로 사용합니다. 기존 서비스(S3, EBS 등)는 여전히 AWS 관리형 키를 사용합니다.
AWS 소유 키 (AWS Owned Keys)
AWS가 내부적으로 소유하고 관리하는 키입니다.
| 특징 | 설명 |
|---|---|
| 위치 | 고객 계정에 존재하지 않음 |
| 제어 수준 | 고객이 관리 불가 |
| 가시성 | 키 정책, CloudTrail 로그 볼 수 없음 |
| 비용 | 완전 무료 |
적합한 경우:
- 편의성이 최우선일 때
- 비용을 완전히 제거하고 싶을 때
- 감사 로그가 필요 없을 때
키 정책 (Key Policy)
키 정책이란?
키 정책은 KMS 키에 대한 리소스 정책으로, 모든 KMS 키에 필수입니다.
┌─────────────────────────────────────────────────────────────┐
│ KMS 키 접근 제어 │
│ │
│ ┌─────────────────┐ │
│ │ 키 정책 │ ◀── 필수! 모든 KMS 키에 반드시 필요 │
│ │ (Key Policy) │ │
│ └────────┬────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ IAM 정책 │ │ 권한 부여 │ │
│ │ (IAM Policy) │ │ (Grants) │ │
│ └─────────────────┘ └─────────────────┘ │
│ ▲ ▲ │
│ │ │ │
│ └── 키 정책에서 활성화해야 작동 ──┘ │
└─────────────────────────────────────────────────────────────┘
키 정책 vs IAM 정책
| 구분 | 키 정책 | IAM 정책 |
|---|---|---|
| 필수 여부 | 필수 | 선택 |
| 적용 범위 | 리전별 | 글로벌 |
| 대상 | 단일 KMS 키 | 여러 KMS 키 |
| 우선순위 | 더 높음 | 키 정책에 종속 |
시험 팁
시험 필수 암기: 키 정책에서 명시적으로 허용하지 않으면, IAM 정책으로도 KMS 키에 접근할 수 없습니다! IAM 정책이 작동하려면 키 정책에서 먼저 IAM 정책 사용을 활성화해야 합니다.
기본 키 정책
AWS KMS 콘솔에서 생성한 키에는 기본 키 정책이 자동으로 포함됩니다.
{
"Version": "2012-10-17",
"Id": "key-default-1",
"Statement": [
{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}
]
}
이 정책의 의미:
- 계정 루트 사용자에게 모든 KMS 작업 허용
- IAM 정책 사용 활성화 (IAM 정책으로 권한 위임 가능)
키 정책 작성 예시
특정 사용자에게 암호화/복호화 권한 부여
{
"Sid": "Allow encryption and decryption",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:user/ExampleUser"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:GenerateDataKey"
],
"Resource": "*"
}
크로스 계정 액세스 허용
{
"Sid": "Allow cross-account access",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::444455556666:root"
},
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:DescribeKey"
],
"Resource": "*"
}
AWS 서비스에서 사용 허용
{
"Sid": "Allow S3 service",
"Effect": "Allow",
"Principal": {
"Service": "s3.amazonaws.com"
},
"Action": [
"kms:GenerateDataKey*",
"kms:Decrypt"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:CallerAccount": "111122223333"
}
}
}
키 교체 (Key Rotation)
자동 키 교체
고객 관리형 키에 대해 자동 키 교체를 활성화할 수 있습니다.
활성화 전:
┌─────────────────┐
│ KMS 키 ARN │───▶ HBK-1 (원본 백업 키)
└─────────────────┘
1년 후 (자동 교체):
┌─────────────────┐ ┌─────────────────────────────┐
│ KMS 키 ARN │───▶ │ HBK-2 (새 키) - 암호화용 │
│ (동일 ARN) │ │ HBK-1 (구 키) - 복호화만 │
└─────────────────┘ └─────────────────────────────┘
| 키 유형 | 자동 교체 |
|---|---|
| 고객 관리형 키 (대칭) | 선택적 활성화 (기본 비활성화) |
| 고객 관리형 키 (비대칭) | 지원 안 함 |
| AWS 관리형 키 | 자동 (1년 주기) |
| AWS 소유 키 | AWS 서비스별 상이 |
키 교체의 장점
✅ 키 ARN, 키 ID, 별칭 변경 없음
✅ 애플리케이션 코드 수정 불필요
✅ 이전 키로 암호화된 데이터도 복호화 가능
✅ CloudTrail에서 교체 이력 확인 가능
수동 키 교체
수동 교체는 새 KMS 키를 생성하고 별칭을 새 키로 변경하는 방식입니다.
수동 교체 전:
alias/my-app-key ───▶ key-1234abcd (구 키)
수동 교체 후:
alias/my-app-key ───▶ key-5678efgh (새 키)
key-1234abcd (구 키 유지 - 기존 데이터 복호화용)
수동 교체가 필요한 경우:
- 비대칭 KMS 키
- HMAC KMS 키
- 교체 주기를 1년이 아닌 다른 주기로 설정
IAM 정책에서 KMS 키 사용
IAM 정책 작성 규칙
IAM 정책에서 KMS 키를 지정할 때는 키 ARN을 사용해야 합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt"
],
"Resource": "arn:aws:kms:us-east-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
}
]
}
주의사항:
- 키 ID, 별칭 이름, 별칭 ARN은 IAM 정책에서 사용 불가
- 반드시 키 ARN 사용
와일드카드 리소스가 필요한 작업
일부 KMS 작업은 특정 KMS 키를 지정할 수 없어 "Resource": "*"가 필요합니다:
{
"Effect": "Allow",
"Action": [
"kms:CreateKey",
"kms:ListKeys",
"kms:ListAliases",
"kms:CreateAlias"
],
"Resource": "*"
}
비용 최적화
KMS 비용 구조
| 항목 | 고객 관리형 키 | AWS 관리형 키 |
|---|---|---|
| 월별 키 요금 | $1/키 | 무료 |
| API 요청 비용 | $0.03/10,000 요청 | $0.03/10,000 요청 |
비용 절감 방법
-
AWS 관리형 키 사용
- 키 정책 수정이 필요 없다면 AWS 관리형 키 사용
- 월별 키 요금 절약
-
불필요한 키 삭제
- 사용하지 않는 고객 관리형 키 삭제 예약
- 7-30일 대기 기간 후 삭제
-
S3 버킷 키 활성화
- S3에서 SSE-KMS 사용 시 버킷 키로 API 호출 최대 99% 감소
SAA-C03 시험 출제 포인트
자주 나오는 문제 유형
-
키 정책 수정이 필요한 경우
- 정답: 고객 관리형 키
- AWS 관리형 키는 키 정책 수정 불가
-
크로스 계정 KMS 키 공유
- 정답: 고객 관리형 키 + 키 정책에 타 계정 추가
- AWS 관리형 키는 크로스 계정 공유 불가
-
IAM 정책과 키 정책의 관계
- 정답: 키 정책에서 IAM 정책 사용을 활성화해야 함
- 키 정책이 우선, IAM 정책은 종속적
-
최소 비용으로 암호화
- 정답: AWS 관리형 키 또는 AWS 소유 키
- 고객 관리형 키는 월 $1/키 비용 발생
시험 팁
시험 문제 예시: "회사는 S3 버킷의 데이터를 암호화하고, 다른 AWS 계정에서도 이 데이터에 접근할 수 있어야 합니다. 어떤 유형의 KMS 키를 사용해야 합니까?"
→ 정답: 고객 관리형 키 (크로스 계정 액세스는 고객 관리형 키에서만 가능)
핵심 암기 포인트
| 키워드 | 연상 |
|---|---|
| 키 정책 수정 | 고객 관리형 키 |
| 크로스 계정 | 고객 관리형 키 |
| 자동 교체 (1년) | AWS 관리형 키 |
| CloudTrail 감사 | 고객 관리형 / AWS 관리형 |
| 월별 비용 | 고객 관리형 키만 $1/키 |
| IAM 정책 키 지정 | 키 ARN만 사용 가능 |
| 키 정책 우선 | IAM 정책보다 키 정책이 우선 |
FAQ
Q1: 고객 관리형 키와 AWS 관리형 키 중 어떤 것을 선택해야 하나요?
A: 대부분의 경우 AWS 관리형 키로 충분합니다. 다음 경우에만 고객 관리형 키를 선택하세요:
- 키 정책을 직접 수정해야 할 때
- 다른 AWS 계정과 키를 공유해야 할 때
- 키 교체 주기를 제어해야 할 때
Q2: IAM 정책만으로 KMS 키에 접근할 수 있나요?
A: 아니오, 키 정책에서 먼저 IAM 정책 사용을 활성화해야 합니다. 기본 키 정책에는 이 설정이 포함되어 있지만, 키 정책을 수정했다면 확인이 필요합니다.
Q3: 키 교체 후 이전 데이터는 어떻게 되나요?
A: 이전 백업 키(HBK)가 유지되므로 이전 데이터도 복호화 가능합니다. 키 ARN과 키 ID는 변경되지 않아 애플리케이션 수정이 필요 없습니다.
Q4: AWS 관리형 키를 삭제할 수 있나요?
A: 아니오, AWS 관리형 키는 삭제할 수 없습니다. 고객 관리형 키만 삭제 예약이 가능합니다 (7-30일 대기 기간 후 삭제).
Q5: KMS 키 사용 비용을 줄이려면?
A:
- AWS 관리형 키 사용 (월별 키 요금 없음)
- S3에서 버킷 키 활성화 (API 호출 최대 99% 감소)
- 불필요한 고객 관리형 키 삭제
마무리
AWS KMS 키 관리의 핵심은 요구사항에 맞는 키 유형 선택입니다:
- 기본 암호화, 최소 비용: AWS 관리형 키 또는 AWS 소유 키
- 키 제어, 크로스 계정: 고객 관리형 키
- 감사 필요: 고객 관리형 키 또는 AWS 관리형 키
SAA-C03 시험에서는 키 정책과 IAM 정책의 관계, 키 유형별 기능 차이가 자주 출제됩니다. 특히 "키 정책 수정 필요" 또는 "크로스 계정 액세스"가 나오면 고객 관리형 키를 선택하세요.