Key Management Service (KMS)
Bảo vệ bằng phần cứng (hardware security modules, HSMs)
- Symmetric (AES-256)
- Chỉ có 1 key sử dụng chung cho encrypt/decrypt
- Các service của AWS sử dụng loại này
- Phải sử dụng KMS API để sử dụng
- Asymmetric
- 1 cặp public/private key
- Sử dụng khi cần encrypt/decrypt hoặc sign/verify
- Có thể download public key, nhưng private key thì cần call KMS API để sử dụng
- Sử dụng khi cần encrypt mà không thể dùng KMS API
AWS Owned Key
SSE-S3, SSE-SQS, SSE-DDB
AWS Managed Key
- Được tạo, quản lý và sử dụng bởi một dịch vụ AWS được tích hợp với AWS KMS
- Không thể quản lý, rotate hoặc thay đổi policy của các Key này
- Không thể trực tiếp sử dụng các CMK do AWS quản lý trong các encrypt/decrypt; AWS service tạo ra chúng sử dụng chúng
- Tự động rotation mỗi 1 năm
Customer managed key
- Created in KMS: 1$/month
- Auto rotation mỗi 1 năm nếu enable
- Imported (symmetric key): 1$/month
- Thủ công rotation
- Có thể sử dụng alias
API
- Encrypt
- Max 4KB data
- GenerateDataKey
- Return plantext Data Key
- Và bản Data Key đã được encrypt bằng CMK
- GenerateDataKeyWithoutPlaintext: Không bao gồm plantext của Data Key
- Decrypt
- Max 4KB data
- Bao gồm cả Data Encryption Key
- GenerateRandom: Return random byte string
KMS Key Policy
- Định nghĩa quyền sử dụng và quản lý KMS như quyền encrypt, decrypt Key cho user / AWS Service.
- Policy mặc định sẽ cho phép tất cả (cần cả IAM Policy cho phép)
- Trường hợp không define policy thì không ai có thể truy cập và sử dụng key được
Data Encryption Keys


- Sử dụng API GenerateDataKey lấy Data Encryption Key, rồi thực hiện encrypt bằng key này phía client
- Sử dụng API Decrypt để decrypt Data Key và thực hiện decrypt phía client
- Sử dụng để encrypt/decrypt data với size lớn
- Sử dụng KMS CMK để generate/encrypt/decrypt data encryption key
- AWS KMS không lưu, quản lý hay track data encryption key
- Phải sử dụng và quản lý data encryption key ngoài AWS KMS
- Có thể sử dụng Data Key Catching để re-use key, làm giảm số API gọi đến KMS nhưng tăng rủi ro vì sử dụng lại nhiều lần
- LocalCryptoMaterialsCache (max age, max bytes, max number of messages)
- S3 sử dụng Data Key để encrypt Object (Gọi là Bucket Key), làm giảm đáng kể chi phí sử dụng API KMS của S3
Customer Master Keys (CMKs)
- Thường gọi là customer master key, CMK, là resource chính trong AWS KMS
- Chứa key material để encrypt và decrypt
- Mặc định AWS tạo key material nhưng có thể import vào
- Có thể encrypt data tới 4KB
- Có thể generate, encrypt, decrypt Data Encryption Key (DEK), để encrypt/decrypt data lớn hơn 4KB
Có thể lưu KMS Key ngoài KMS
- External Key Store:
- Lưu ngoài AWS
- Có thể tạo KMS key ở AWS KMS external key store (XKS)
- Tất cả các key được gen và store ở External Key Manager
- Khi sử dụng XKs, key material không bao giờ rời khỏi HSM
- Custom Key Store:
- Tạo KMS Key ở AWS CloudHSM custom key store
- Tất cả các key được gen và lưu ở AWS CloudHSM cluster
KMS Key Rotation
- Auto Rotation sẽ tự động generate key material mới mỗi năm (customer managed key ko bắt buộc)
- Key ID, ARN, region, policy và permission không thay đổi khi rotate
- Không cần update application hoặc alias refer tới key ID hoặc key ARN
- Không thể enable/disable rotation của AWS owned key
- Auto Rotation chỉ hỗ trợ cho key symmetric KMS key với key material do AWS KMS generate, các loại khác không hỗ trợ, nhưng có thể thực hiện thủ công
- Tạo key mới (sẽ sinh ra key ID mới)
- Update application với key ID mới
- Có thể sử dụng alias để đại diện cho KMS Key, kho đó không cần update lại application, chỉ cần update lại alias
Type of CMK | Can view | Can manage | Used only for my AWS account | Automatic rotation |
Customer managed CMK | Yes | Yes | Yes | Optional. Every 365 days |
AWS managed CMK | Yes | No | Yes | Required. Every 365 days |
AWS owned CMK | No | No | No | Varies |
Exam Tip
- Khi cần share snapshot cho account khác cần share quyền Decrypt và CreateGrant
- Có thể dùng điều kiện kms:ViaService để giới hạn quyền sử dụng key cho một số service cụ thể
- Có thể huỷ khả năng decrypt data và chuyển data sang dạng lưu trữ bằng cách sử dụng import key material, sau đó xoá key material (sử dụng API DeleteImportedKeyMaterial để xoá)
- InvalidKeyID exception khi sử dụng SSM Parammeter Store là do KMS key chưa được enable
- Chú ý phân biệt giữa AWS managed key và customer managed key, auto và manual rotation
AWS CloudHSM
- Hardware security module (HSM)
- Generate và sử sụng encryption key
- Support cả symmetric và asymmetric
- Phải sử dụng CloudHSm Client Software
- Quản lý encryption key sử dụng 140-2 Level 3 validated HSM
- Run trong VPC
- Single tenant HSM (khác với KMS, multi-tenant)
- Có thể config AWS KMS để sử dụng CloudHSM cluster như là custom key store
- Managed và automatic scale
- Client tự quản lý, AWS không có quyền
