본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
AWS Key Management Service; AWS KMS
데이터 암호화와 서명에 쓰는 암호화 키를 생성·보관·통제하는 AWS 관리형 서비스. 키는 FIPS 140-3 보안 수준 3 검증 HSM 안에서 보호되며 암호화되지 않은 상태로 서비스 밖에 나가지 않는다.

저장 데이터 암호화에서 어려운 부분은 알고리즘이 아니라 키 관리다. 키를 어디에 두고, 누가 쓸 수 있게 하고, 언제 교체하고, 사용 기록을 어떻게 남길지 정해야 한다. KMS는 이 일을 맡는다. S3, EBS, RDS, DynamoDB 등 대부분의 AWS 서비스가 KMS와 통합되어 있어 클릭 몇 번이나 설정 한 줄로 암호화를 켤 수 있고, 키 사용은 AWS CloudTrail에 기록된다. 일반 개념은 KMS, 데이터베이스 암호화 문서를 참조한다.

구분 고객 관리형 키 AWS 관리형 키 AWS 소유 키
만드는 주체 고객 AWS 서비스가 고객 계정에 생성 AWS 서비스가 서비스 계정에 보유
고객 계정에서 보임 예 예(별칭 aws/서비스명, 예: aws/ebs) 아니요
키 정책 관리 고객이 직접 변경 불가 불가
CloudTrail 감사 예 예 아니요
교체 선택(자동·온디맨드) 매년 자동(필수) 서비스가 관리
교차 계정 공유 키 정책으로 가능 불가 서비스가 처리
비용 키당 월 요금 + 사용량 요금 월 요금 없음, 사용량 요금 없음

AWS 관리형 키는 2021년부터 새 서비스에는 더 이상 생기지 않는 레거시 유형이고, 새 서비스는 기본 암호화에 AWS 소유 키를 쓴다. 통제와 감사가 필요하면 고객 관리형 키, 편의가 우선이면 AWS 소유 키라고 기억하면 된다.

고객 관리형 키

편집 원본 편집

고객 관리형 키는 고객이 만들고 소유하며 수명 주기 전체를 통제하는 KMS 키다. 키 정책·IAM 정책·권한 부여(grant) 설정, 활성화와 비활성화, 키 교체, 태그, 별칭, 삭제 예약을 모두 고객이 결정한다. 삭제는 즉시 되지 않고 7~30일(기본 30일)의 대기 기간을 거친다. 삭제된 키로 암호화한 데이터는 복구할 수 없으므로, 확신이 없으면 삭제 대신 비활성화한다.

키 정책과 IAM

편집 원본 편집

모든 KMS 키에는 정확히 하나의 키 정책(리소스 기반 정책)이 있고, 이것이 접근 통제의 기본이다. 다른 서비스와 달리 키 정책이 허용하지 않으면 IAM 정책만으로는 KMS 키 권한을 줄 수 없다. 기본 키 정책에는 계정 전체를 신뢰하는 문이 들어 있어서, 이 문이 있을 때만 IAM 정책으로 권한을 나눠 줄 수 있다. 키 정책은 리전별이다.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "EnableIAMPolicies",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:root"},
      "Action": "kms:*",
      "Resource": "*"
    },
    {
      "Sid": "AllowAppRoleUse",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:role/app-role"},
      "Action": ["kms:Decrypt", "kms:GenerateDataKey"],
      "Resource": "*"
    }
  ]
}

키 관리자(키 정책 변경, 삭제 예약 권한)와 키 사용자(암호화·복호화 권한)를 분리하는 것이 직무 분리의 기본이다.

KMS 키가 데이터 키를, 데이터 키가 데이터를 보호하는 계층 구조

KMS의 Encrypt API로 직접 암호화할 수 있는 데이터는 최대 4,096바이트다. 큰 데이터는 봉투 암호화(envelope encryption)로 처리한다.

  • ① 애플리케이션이 GenerateDataKey를 호출하면 KMS가 데이터 키를 만들어 평문 사본과 KMS 키로 암호화한 사본을 함께 돌려준다.
  • ② 평문 데이터 키로 데이터를 KMS 밖에서(로컬에서) 암호화하고, 평문 키는 바로 메모리에서 지운다.
  • ③ 암호화된 데이터 키를 암호문 옆에 함께 저장한다.
  • ④ 복호화할 때는 암호화된 데이터 키를 KMS Decrypt로 풀고, 그 평문 키로 데이터를 복호화한다.

대용량 데이터가 네트워크로 KMS에 오가지 않아 빠르고, 데이터 키마다 따로 관리할 필요 없이 최상위 KMS 키 하나만 보호하면 된다. S3, EBS 등 AWS 서비스도 내부적으로 이 방식을 쓴다. 직접 구현할 때는 AWS Encryption SDK를 쓰면 편하다.

  • 고객 관리형 키는 자동 키 교체를 켤 수 있다. 기본 교체 주기는 365일이며, 교체 기간을 일 단위로 따로 지정할 수도 있다. 필요하면 즉시 온디맨드 교체도 한다.
  • 교체해도 키 ID와 ARN은 그대로이고 키 구성 요소(key material)만 새것으로 바뀐다. 예전 구성 요소는 보관되어 과거 암호문은 그대로 복호화된다. 애플리케이션 코드를 바꿀 필요가 없다.
  • 자동 교체는 KMS가 생성한 키 구성 요소를 쓰는 대칭 암호화 키에서만 지원된다. 비대칭 키, HMAC 키, 사용자 지정 키 스토어의 키는 새 키를 만들고 별칭을 옮기는 수동 교체를 한다.
  • AWS 관리형 키는 매년 자동으로 교체된다.

다중 리전 키

편집 원본 편집

다중 리전 키는 여러 리전에 같은 키 구성 요소와 같은 키 ID를 가진 관련 키 세트를 둔다. 한 리전에서 암호화한 데이터를 다른 리전에서 다시 암호화하거나 원래 리전을 호출하지 않고 바로 복호화할 수 있다. 재해 복구용 교차 리전 백업, 전 세계에 분산된 데이터, 리전마다 같은 서명 키가 필요한 경우에 쓴다. 키 정책, 별칭, 활성화 상태는 리전마다 따로 관리한다.

서비스 KMS 활용 기억할 점
아마존 S3 SSE-KMS(서버 측 암호화) S3 버킷 키를 켜면 KMS 요청 수가 줄어 KMS 요청 비용이 크게 감소한다. 객체 읽기에는 kms:Decrypt 권한도 필요하다.
아마존 EBS 볼륨·스냅샷 암호화 리전 단위 기본 암호화 설정 가능. 암호화된 스냅샷을 다른 계정과 공유하려면 고객 관리형 키여야 한다(AWS 관리형 키는 공유 불가).
아마존 RDS DB 인스턴스·스냅샷 암호화 생성 시에 정한다. 암호화되지 않은 DB는 스냅샷을 암호화 복사한 뒤 복원하는 방식으로 바꾼다.
AWS Secrets Manager 비밀 값 암호화 다른 계정에서 비밀을 읽게 하려면 AWS 관리형 키(aws/secretsmanager) 대신 고객 관리형 키로 암호화해야 한다.

AWS CloudHSM은 고객 VPC 안에 단일 테넌트 하드웨어 보안 모듈(HSM) 클러스터를 제공한다. AWS는 하드웨어를 관리하지만 HSM 안의 사용자와 키는 고객만 관리하며, 데이터 평면은 종단 간 암호화되어 AWS도 볼 수 없다. FIPS 모드 클러스터의 HSM은 FIPS 140-2 수준 3 또는 FIPS 140-3 수준 3 검증을 받았다.

항목 AWS KMS AWS CloudHSM
테넌시 다중 테넌트 관리형 서비스 고객 전용(단일 테넌트) HSM
키 통제 AWS가 운영, 고객은 정책으로 통제 고객이 HSM 사용자와 키를 완전히 통제
인터페이스 AWS API, 서비스 통합 PKCS #11, JCE, CNG/KSP 등 표준 암호 API
운영 부담 낮음 높음(클러스터 구성, 가용성, 사용자 관리)
적합 상황 대부분의 AWS 서비스 암호화 규정상 전용 HSM 필요, 기존 HSM 애플리케이션 이전, 키를 내보내야 하는 경우

KMS의 사용자 지정 키 스토어로 CloudHSM 클러스터를 연결하면, KMS의 서비스 통합을 그대로 쓰면서 키 구성 요소는 고객 소유 HSM에 두는 절충도 가능하다.

  • 저장 데이터 암호화 + 키 사용 감사·교체 통제 요구 → 고객 관리형 KMS 키(SSE-KMS). 운영 부담 최소만 요구하면 서비스 기본 암호화로 충분하다.
  • "전용 하드웨어", "단일 테넌트 HSM", "키를 고객만 통제"가 나오면 CloudHSM이다.
  • KMS 키 접근이 거부되면 IAM 정책보다 키 정책부터 의심한다. 키 정책이 IAM을 허용해야 IAM 정책이 효과를 낸다.
  • 암호화된 EBS 스냅샷이나 RDS 스냅샷을 다른 계정과 공유하려면 고객 관리형 키를 쓰고 키 정책에서 상대 계정을 허용한다.
  • 다른 리전에서 같은 키로 복호화해야 하면 다중 리전 키를 쓴다.
  • 자동 키 교체는 키 ID가 바뀌지 않고 기존 데이터 재암호화도 필요 없다.