Trang chủTác giảLiên hệ

AWS SAP - Security - KMS & CloudHSM

By Nguyễn Huy Hoàng
Published in AWS
December 14, 2021
12 min read

Encryption

Các hướng tiếp cận

  • Encryption At Rest
    • Dữ liệu được lưu trữ trong phần cứng dùng chung ở dạng mã hóa, ngay cả khi ai đó có quyền truy cập vào phần cứng, nó không thể truy cập dữ liệu ở định dạng có thể đọc được
    • Thường được sử dụng khi chỉ có một bên tham gia
  • Encryption In Transit:
    • Nhằm mục đích bảo vệ dữ liệu khi được chuyển giữa 2 nơi
      • Thường được sử dụng khi nhiều cá nhân/ hệ thống tham gia

Encryption Concepts

  • Plaintext: dữ liệu không được mã hóa, có thể là văn bản, hình ảnh, ứng dụng khác,…
  • Algorithm: Blowfish, AES, RC4, DES, RC5 and RC6
  • Key: “password”
  • Ciphertext: khi một thuật toán sử dụng key để mã hoá plaintext, đầu ra được tạo ra là cyphertext (dữ liệu được mã hóa)

Symmetric Encryption: Mã hoá đối xứng

  • Khóa đối xứng: cùng một khóa có thể được sử dụng để mã hóa và giải mã
  • Thuật toán mã hóa đối xứng: AES-256
  • Phù hợp cho mã hóa At Rest, không được khuyến nghị cho mã hóa In Transit

Asymmetric Encryption: Mã hoá bất đối xứng

  • Thuật toán bất đối xứng: RSA, ElGamal
  • Khóa bất đối xứng: được cấu tạo từ 2 phần: khóa công khai và khóa cá nhân
  • Một khóa công khai có thể được sử dụng để sinh ra cyphertext mà chỉ có thể được mã hóa bằng khóa riêng tư
  • Mã hóa không đối xứng được sử dụng bởi PGP, SSL, SSH,…

Signing

  • Quá trình được sử dụng để chứng minh danh tính của một tin nhắn
  • Một tin nhắn có thể được “sign” bằng khóa cá nhân và được xác minh bằng khóa công khai

Steganography

  • Quá trình ẩn dữ liệu được mã hóa trong dữ liệu plaintext

AWS KMS (Key Management Service)

AWS KMS 101

![alt text](https://kipalog.kaopiz.com/uploads/03ad/ebb6/Screen Shot 2021-10-21 at 22.00.19.png)

  • AWS là dịch vụ RegionalPublic
    • Mọi region đều tách biệt khi sử dụng KMS, hãy nghĩ về KMS như một sản phẩm riêng biệt trong từng region.
    • KMS là một dịch vụ công cộng, có nghĩa là nó nằm trên AWS public zone. Và do đó, nó có thể được kết nối từ bất kỳ đâu có quyền truy cập vào khu vực công cộng này, nhưng giống như bất kỳ dịch vụ AWS nào khác, tất nhiên, bạn cần có quyền để truy cập vào nó.
  • AWS Key Management Service (KMS) giúp bạn dễ dàng tạo, lưu trữ và quản lý khóa mật mã cũng như kiểm soát việc sử dụng khóa mật mã trên nhiều dịch vụ AWS và trong các ứng dụng của bạn. Đây là những khóa có thể được sử dụng để chuyển đổi văn bản thuần túy sang văn bản mật mã và ngược lại.
  • KMS có khả năng xử lý cả khóa đối xứng (Symmetric: single key cho cả encrypt và decrypt) và không đối xứng (Asymmetric: key pairs dùng cho encrypt và decrypt)
  • Các key được khóa bên trong KMS, đảm bảo rằng các key không bao giờ rời và được giữ an toàn trong dịch vụ.
  • KMS cung cấp dịch vụ tuân thủ FIPS 140-2 (L2). Đó là một tiêu chuẩn an ninh của Hoa Kỳ. Một số tính năng của KMS tuân thủ cấp độ ba, nhưng nhìn chung nó chỉ đạt được FIPS 140-2 cấp độ hai.
  • AWS KMS được tích hợp với AWS CloudTrail để cung cấp cho bạn nhật ký của toàn bộ hoạt động sử dụng khóa, qua đó giúp đáp ứng các nhu cầu về pháp lý và tuân thủ của bạn.
  • Bất cứ khi nào bạn nghe thấy “mã hóa” cho một dịch vụ AWS, rất có thể đó là KMS
  • Cách dễ dàng để kiểm soát quyền truy cập vào dữ liệu của bạn, AWS quản lý các khóa cho chúng ta
  • Tích hợp hoàn toàn với IAM để ủy quyền
  • Tích hợp liền mạch vào:
    • Amazon EBS: encrypt volumes
    • Amazon S3: Server side encryption of objects
    • Amazon Redshift: encryption of data
    • Amazon RDS: encryption of data
    • Amazon SSM: Parameter store
    • Etc…
  • Bạn cũng có thể sử dụng CLI / SDK ![alt text](https://kipalog.kaopiz.com/uploads/1b3c/344c/Screen Shot 2021-09-18 at 17.53.55.png)

CMK

![alt text](https://kipalog.kaopiz.com/uploads/b712/e3dc/Screen Shot 2021-10-21 at 23.14.02.png)

  • Giá trị trong KMS là Customer Master Key (CMK) được sử dụng để mã hóa dữ liệu không bao giờ có thể được người dùng truy xuất và CMK có thể được xoay vòng để tăng cường bảo mật
  • Đừng bao giờ lưu trữ bí mật của bạn trong văn bản rõ ràng, đặc biệt là trong code của bạn
  • Các bí mật được mã hóa có thể được lưu trữ trong các code/ biến môi trường
  • KMS chỉ có thể giúp mã hóa tối đa 4KB dữ liệu cho mỗi lần gọi
  • Nếu dữ liệu > 4 KB, sử dụng Envelope Encryption
  • Để cấp quyền truy cập vào KMS cho ai đó:
    • Đảm bảo rằng Key Policy cho phép user đó
    • Đảm bảo rằng IAM Policy cho phép các lệnh gọi API
  • Theo dõi các lệnh gọi API được thực hiện với KMS trong CloudTrail ![alt text](https://kipalog.kaopiz.com/uploads/dc96/3416/Screen Shot 2021-09-18 at 19.35.11.png)

Types of KMS Keys

![alt text](https://kipalog.kaopiz.com/uploads/fbf8/4685/Screen Shot 2021-09-18 at 19.36.43.png)

Customer Manager CMK:

  • Cung cấp cho bạn khả năng tạo, quản lý, và sử dụng, đồng thời bạn có thể bật hoặc tắt một số key.
  • Khả năng xác định chính sách xoay vòng - rotation policy (khóa mới được tạo hàng năm, khóa cũ được giữ nguyên)
  • Có thể thêm key policy (resource policy)
  • Tận dụng cho envelope encryption

AWS managed CMK:

  • Được sử dụng bởi dịch vụ AWS (aws/s3, aws/ebs, aws/redshift)
  • Được quản lý bởi AWS

DEK - Data Encription Key

![alt text](https://kipalog.kaopiz.com/uploads/100a/11ee/Screen Shot 2021-10-21 at 23.41.41.png)

  • Khóa mã hóa dữ liệu (DEK) là một loại khóa khác mà KMS có thể tạo ra, và chúng được tạo bằng cách sử dụng khóa chính của khách hàng.
  • Khóa này có thể được sử dụng để mã hóa dữ liệu có kích thước lớn hơn 4KB.
  • KMS không lưu trữ khóa mã hóa dữ liệu dưới bất kỳ hình thức nào, nó cung cấp cho bạn hoặc dịch vụ sử dụng KMS và sau đó sẽ loại bỏ nó. Lý do KMS loại bỏ nó là KMS không thực sự thực hiện mã hóa hoặc giải mã dữ liệu bằng cách sử dụng các khóa mã hóa dữ liệu. Bạn làm điều đó, hoặc dịch vụ sử dụng KMS làm điều đó. KMS không sử dụng khóa mã hóa dữ liệu cho bất kỳ thứ gì ngoài việc tạo ra chúng ban đầu.
  • Khi khóa mã hóa dữ liệu được tạo, KMS cung cấp cho bạn hai phiên bản của khóa mã hóa dữ liệu đó.
    • Đầu tiên, một phiên bản văn bản thuần túy của khóa (Plaintext) có thể được sử dụng ngay lập tức.
    • Ngoài ra, nó cũng cung cấp văn bản mật mã hoặc phiên bản được mã hóa của cùng một khóa mã hóa dữ liệu đó. Khóa mã hóa dữ liệu được mã hóa bởi khóa chính của khách hàng đã tạo ra nó. Vì vậy, trong tương lai, nó có thể được KMS giải mã bằng cách sử dụng cùng khóa chính của khách hàng đó, giả sử bạn có quyền.
    • Bạn tạo khóa mã hóa dữ liệu, bạn lấy phiên bản văn bản thuần túy của khóa đó và mã hóa văn bản thuần túy của bạn để tạo văn bản mật mã cho dữ liệu của bạn và sau đó bạn loại bỏ khóa mã hóa dữ liệu văn bản thuần túy. Điều đó sẽ để lại cho bạn dữ liệu được mã hóa và bản sao mã hóa của khóa mã hóa dữ liệu.

Cách thức hoạt động của KSM? API – Encrypt and Decrypt

  • Ví dụ đối với việc mã hoá mật khẩu. Mật khẩu thường rất nhỏ và do đó sẽ nhỏ hơn 4KB.
  • Chúng ta sẽ gọi tới dịch vụ KMS và sử dụng Client CLI/SDK để gọi API mã hoá, ý nói rằng chúng ta muốn mã hóa bí mật này bằng CMK mà bạn chỉ định và tự tạo.
  • Hãy nhớ CMK nằm trong dịch vụ KMS và chúng ta không bao giờ có quyền truy cập vào nó. Vì vậy, KMS sẽ kiểm tra quyền IAM của bạn với IAM để đảm bảo rằng chúng ta thực sự có quyền truy cập để sử dụng CMK này và sau đó KMS sẽ gửi lại cho bạn mật khẩu đã được mã hóa.
  • Bạn có mật khẩu đã được mã hóa và sau đó nói rằng bạn cần sử dụng nó nên bạn muốn giải mã nó. Sử dụng Client CLI/SDK để gọi API giải mã và bạn gửi mật khẩu đã được mã hóa tới KMS. Một lần nữa, KMS sẽ kiểm tra lại các quyền của IAM để đảm bảo bạn có thể giải mã và nếu mọi thứ tốt đẹp thì việc giải mã sẽ diễn ra trong dịch vụ KMS và bạn sẽ nhận lại được mật khẩu đã giải mã. ![alt text](https://kipalog.kaopiz.com/uploads/b63b/53f5/Screen Shot 2021-09-18 at 19.37.30.png) ![alt text](https://kipalog.kaopiz.com/uploads/e297/cc1e/Screen Shot 2021-10-21 at 23.17.37.png)
  • Hãy cùng xem xét một ví dụ cụ thể về cách thức hoạt động của CMK:
    • Tương tác đầu tiên của bạn với KMS sau khi chọn một region sẽ là tạo ra một khóa, cụ thể là Khóa chính của khách hàng - CMK
      • Bạn chạy hoạt động tạo khóa và một vùng chứa logic khóa chính của khách hàng (customer master key logical container) được tạo, chứa tài liệu khóa vật lý hỗ trợ. Đây là điều quan trọng mà KMS tạo ra, lưu trữ và quản lý.
      • Khóa chính của khách hàng không bao giờ được lưu trữ ở dạng liên tục khi không được mã hóa, những gì KMS sẽ làm là lấy khóa chính của khách hàng này và mã hóa nó trước khi nó được lưu trữ liên tục trên container.
    • Tương tác tiếp theo của bạn với KMS có thể là yêu cầu mã hoá một số dữ liệu
      • Để làm điều này, bạn thực hiện gọi Encrypt tới KMS, chỉ định khóa để sử dụng và cung cấp một số dữ liệu để mã hóa.
      • KMS chấp nhận dữ liệu và giả định rằng bạn có quyền sử dụng khóa chính của khách hàng bạn vừa chỉ định
      • KMS giải mã khóa đó và sử dụng nó để mã hóa dữ liệu văn bản thuần túy mà bạn đã cung cấp và sau đó trả lại dữ liệu đó cho bạn.
    • Tại một thời điểm nào đó trong tương lai, bạn sẽ muốn giải mã dữ liệu.
      • Để làm điều đó, bạn gọi một hoạt động giải mã, bao gồm dữ liệu mà bạn muốn giải mã.
      • KMS không cần bạn phải cho biết khóa chính của khách hàng sẽ sử dụng cho các hoạt động giải mã. Thông tin đó đã được mã hóa bên trong bản mã hoá của dữ liệu mà bạn muốn giải mã. Vì vậy, tất cả những gì bạn cần làm là gọi Decrypt và chuyển văn bản mã hoá vào KMS
      • Giả sử rằng bạn có quyền giải mã, KMS sẽ giải mã khóa chính của khách hàng, và sau đó nó sẽ sử dụng khóa này để giải mã bản mã và trả lại dữ liệu đó cho bạn.

Không có điểm nào trong toàn bộ quá trình này, khóa chính của khách hàng rời khỏi KMS, không có điểm nào nó được lưu trữ trong container ở dạng văn bản thuần túy. Bạn có thể có quyền tạo khóa để sử dụng nó để mã hóa dữ liệu và giải mã hoặc bạn chỉ có thể có một trong những quyền đó. Bạn có thể có quyền mã hóa dữ liệu, nhưng không giải mã dữ liệu hoặc bạn có thể có toàn quyền quản lý KMS

Key Policies

![alt text](https://kipalog.kaopiz.com/uploads/0a1d/a919/Screen Shot 2021-10-21 at 23.57.01.png)

CloudHSM (Hardware Security Module)

CloudHSM 101

![alt text](https://kipalog.kaopiz.com/uploads/7b55/1ba4/Screen Shot 2021-10-22 at 21.37.06.png)

  • AWS CloudHSM là một mô-đun bảo mật phần cứng dựa trên đám mây (HSM = Hardware Security Module) cho phép bạn dễ dàng tạo và sử dụng các khóa mã hóa của riêng bạn trên AWS Cloud
    • KMS => AWS manages the software for encryption
    • CloudHSM => AWS provisions encryption hardware
  • Dedicated Hardware
  • Bạn quản lý hoàn toàn các khóa mã hóa của riêng mình (không phải AWS). AWS cung cấp phần cứng cho CloudHSM nhưng họ không có quyền truy cập vào nó. Trong trường hợp mất quyền truy cập vào thiết bị HSM, không có cách nào dễ dàng để lấy lại quyền truy cập vào thiết bị đó.
  • Thiết bị HSM có khả năng chống giả mạo, tuân thủ FIPS 140-2 Level 3
  • Truy cập thông qua Industry Standard APIs: PKCS#11, JCE (Java Cryptography) Extensions, CNG (Microsoft CryptoNG) Extensions
  • Trước đây, không có sự chồng chéo thực sự giữa CloudHSM và KMS, chúng hoàn toàn khác nhau. Nhưng gần đây, bạn có thể sử dụng một tính năng của KMS, được gọi là kho khóa tùy chỉnh (custom key store), và kho khóa tùy chỉnh này có thể sử dụng CloudHSM tích hợp với KMS.
  • Hỗ trợ cả mã hóa đối xứng và không đối xứng (SSL/TLS keys)
  • Không có bậc miễn phí
  • Phải sử dụng CloudHSM Client Software
  • Redshift hỗ trợ CloudHSM để mã hóa cơ sở dữ liệu và quản lý key
  • Lựa chọn tốt để sử dụng với mã hóa SSE-C ![alt text](https://kipalog.kaopiz.com/uploads/4033/41d9/Screen Shot 2021-09-18 at 19.58.20.png)

CloudHSM Diagram

  • AWS sẽ quản lý phần cứng cho chúng ta, nhưng sau đó chúng ta sẽ được cung cấp một thiết bị CloudHSM và thiết bị đó dành riêng cho chúng ta.
  • Vì vậy, nếu chúng ta mất các khóa mã hóa, AWS không thể khôi phục thiết bị cho chúng ta. Đó thực sự là trách nhiệm của chúng ta, vì vậy hãy thận trọng khi sử dụng.
  • Để quản lý các khóa này và mọi thứ bạn cần có CloudHSM Client, ứng dụng này sẽ truy cập thiết bị CloudHSM để bạn quản lý khóa của mình, chúng sẽ có kết nối được mã hóa để chia sẻ thông tin an toàn .
  • Bạn có trách nhiệm quản lý mọi thứ bên trong thiết bị của mình, AWS không thể giúp bạn một khi đã cung cấp cho bạn phần cứng bạn cần. Do đó, xét về quyền IAM, điều duy nhất AWS có thể làm về IAM là giúp bạn tạo, mô tả và xóa cụm Cloud HSM của mình.
  • Bất cứ điều gì trong cụm CloudHSM của bạn, đó là trách nhiệm của riêng bạn. Vì vậy, bằng cách sử dụng phần mềm CloudHSM, bạn có thể quản lý các khóa ( tạo, đọc, cập nhật, xóa khóa) và cũng có thể quản lý người dùng có quyền truy cập vào các khóa này. Nó rất giống với một cơ sở dữ liệu mà AWS sẽ cung cấp cho bạn chính cơ sở dữ liệu đó và bạn phải quản lý những người dùng bên trong nó. Nó không hoàn toàn đúng như vậy, không hoàn toàn giống với Cloud HSM, nhưng bạn có thể hiểu được. Bạn phải quản lý tất cả bảo mật trong thiết bị của mình và AWS không thể giúp bạn điều đó. ![alt text](https://kipalog.kaopiz.com/uploads/4d06/de28/Screen Shot 2021-09-18 at 19.59.03.png)

Cách thức hoạt động

![alt text](https://kipalog.kaopiz.com/uploads/559a/610f/Screen Shot 2021-10-22 at 21.52.20.png)

  • Các thiết bị CloudHSM được triển khai trên VPC do AWS quản lý
  • Chúng được đưa vào các VPC do khách hàng quản lý bằng cách sử dụng ENI (Elastic Network Interface)
  • HSM theo mặc định không phải là một thiết bị có tính khả dụng cao. Để đảm bảo HA, chúng ta cần triển khai nhiều thiết bị HSM trên nhiều AZ và định cấu hình chúng thành một cụm
  • Một ứng dụng khách CloudHSM Client cần được cài đặt trên các EC2 instance, sẽ được định cấu hình để truy cập CloudHSM
  • Trong khi AWS cung cấp các thiết bị HSM, chúng ta với tư cách là khách hàng sẽ chịu trách nhiệm quản lý các khóa
  • AWS có thể cung cấp các bản cập nhật phần mềm trên thiết bị HSM, nhưng những bản cập nhật này sẽ không ảnh hưởng đến phần lưu trữ mã hóa

CloudHSM – High Availability

• Các cụm CloudHSM được trải rộng trên Multi AZ (HA) • Tuyệt vời cho tính khả dụng và bền vững ![alt text](https://kipalog.kaopiz.com/uploads/58b5/b232/Screen Shot 2021-09-18 at 19.59.22.png)

CloudHSM Use Cases

![alt text](https://kipalog.kaopiz.com/uploads/7c37/448f/Screen Shot 2021-10-22 at 21.59.29.png)

  • Theo mặc định, không có tích hợp gốc (native integration) giữa CloudHSM với dịch vụ AWS, điều này có nghĩa là không thể sử dụng CloudHSM cho S3 SSE, chẳng hạn. CloudHSM có thể được sử dụng để mã hóa phía máy khách trước khi tải dữ liệu lên S3
  • CloudHSM có thể được sử dụng để giảm tải quá trình xử lý SSL / TLS cho các máy chủ web
  • Cơ sở dữ liệu Oracle từ RDS có thể thực hiện Mã hóa dữ liệu minh bạch (Transparent Data Encryption - TDE) bằng cách sử dụng CloudHSM
  • CloudHSM có thể được sử dụng để bảo vệ các khóa riêng tư cho Tổ chức phát hành chứng chỉ (Certificate Authority - CA)

CloudHSM vs KMS

FeatureAWS KMSAWS CloudHSM
TenancyUses multi-tenant key storageSingle tenant key storage, dedicated to one customer
KeysKeys owned and managed by AWSCustomer managed Keys
EncryptionSupports only symmetric key encryptionSupports both symmetric and asymmetric encryption
Cryptographic AccelerationNoneSSL/TLS Acceleration Oracle TDE Acceleration
Key Storage and ManagementAccessible from multiple regions.
Centralized management from IAM
Deployed and managed from a customer VPC.
Accessible and can be shared across VPCs using VPC peering
Free Tier AvailabilityYesNo
  • Nếu FIPS 140-2 level 3 được đề cập, thì đó là đám mây HSM, còn FIPS 140-2 level 2 thì là KMS
  • Nếu tích hợp với AWS được đề cập, thì có lẽ nó sẽ là KMS, còn nếu bạn cần sử dụng các API mã hóa Tiêu chuẩn Công nghiệp, thì đó có thể là CloudHSM.

Ref


Tags

AWSSAP
Khóa học AWS cơ bản

Nguyễn Huy Hoàng

Developer

Related Posts

Compare AWS Services: Amazon S3 vs EBS vs EFS
December 14, 2021
1 min

AWS SAP - Security - KMS & CloudHSM

Published in AWS
December 14, 2021
12 min read

Encryption

Các hướng tiếp cận

  • Encryption At Rest
    • Dữ liệu được lưu trữ trong phần cứng dùng chung ở dạng mã hóa, ngay cả khi ai đó có quyền truy cập vào phần cứng, nó không thể truy cập dữ liệu ở định dạng có thể đọc được
    • Thường được sử dụng khi chỉ có một bên tham gia
  • Encryption In Transit:
    • Nhằm mục đích bảo vệ dữ liệu khi được chuyển giữa 2 nơi
      • Thường được sử dụng khi nhiều cá nhân/ hệ thống tham gia

Encryption Concepts

  • Plaintext: dữ liệu không được mã hóa, có thể là văn bản, hình ảnh, ứng dụng khác,…
  • Algorithm: Blowfish, AES, RC4, DES, RC5 and RC6
  • Key: “password”
  • Ciphertext: khi một thuật toán sử dụng key để mã hoá plaintext, đầu ra được tạo ra là cyphertext (dữ liệu được mã hóa)

Symmetric Encryption: Mã hoá đối xứng

  • Khóa đối xứng: cùng một khóa có thể được sử dụng để mã hóa và giải mã
  • Thuật toán mã hóa đối xứng: AES-256
  • Phù hợp cho mã hóa At Rest, không được khuyến nghị cho mã hóa In Transit

Asymmetric Encryption: Mã hoá bất đối xứng

  • Thuật toán bất đối xứng: RSA, ElGamal
  • Khóa bất đối xứng: được cấu tạo từ 2 phần: khóa công khai và khóa cá nhân
  • Một khóa công khai có thể được sử dụng để sinh ra cyphertext mà chỉ có thể được mã hóa bằng khóa riêng tư
  • Mã hóa không đối xứng được sử dụng bởi PGP, SSL, SSH,…

Signing

  • Quá trình được sử dụng để chứng minh danh tính của một tin nhắn
  • Một tin nhắn có thể được “sign” bằng khóa cá nhân và được xác minh bằng khóa công khai

Steganography

  • Quá trình ẩn dữ liệu được mã hóa trong dữ liệu plaintext

AWS KMS (Key Management Service)

AWS KMS 101

![alt text](https://kipalog.kaopiz.com/uploads/03ad/ebb6/Screen Shot 2021-10-21 at 22.00.19.png)

  • AWS là dịch vụ RegionalPublic
    • Mọi region đều tách biệt khi sử dụng KMS, hãy nghĩ về KMS như một sản phẩm riêng biệt trong từng region.
    • KMS là một dịch vụ công cộng, có nghĩa là nó nằm trên AWS public zone. Và do đó, nó có thể được kết nối từ bất kỳ đâu có quyền truy cập vào khu vực công cộng này, nhưng giống như bất kỳ dịch vụ AWS nào khác, tất nhiên, bạn cần có quyền để truy cập vào nó.
  • AWS Key Management Service (KMS) giúp bạn dễ dàng tạo, lưu trữ và quản lý khóa mật mã cũng như kiểm soát việc sử dụng khóa mật mã trên nhiều dịch vụ AWS và trong các ứng dụng của bạn. Đây là những khóa có thể được sử dụng để chuyển đổi văn bản thuần túy sang văn bản mật mã và ngược lại.
  • KMS có khả năng xử lý cả khóa đối xứng (Symmetric: single key cho cả encrypt và decrypt) và không đối xứng (Asymmetric: key pairs dùng cho encrypt và decrypt)
  • Các key được khóa bên trong KMS, đảm bảo rằng các key không bao giờ rời và được giữ an toàn trong dịch vụ.
  • KMS cung cấp dịch vụ tuân thủ FIPS 140-2 (L2). Đó là một tiêu chuẩn an ninh của Hoa Kỳ. Một số tính năng của KMS tuân thủ cấp độ ba, nhưng nhìn chung nó chỉ đạt được FIPS 140-2 cấp độ hai.
  • AWS KMS được tích hợp với AWS CloudTrail để cung cấp cho bạn nhật ký của toàn bộ hoạt động sử dụng khóa, qua đó giúp đáp ứng các nhu cầu về pháp lý và tuân thủ của bạn.
  • Bất cứ khi nào bạn nghe thấy “mã hóa” cho một dịch vụ AWS, rất có thể đó là KMS
  • Cách dễ dàng để kiểm soát quyền truy cập vào dữ liệu của bạn, AWS quản lý các khóa cho chúng ta
  • Tích hợp hoàn toàn với IAM để ủy quyền
  • Tích hợp liền mạch vào:
    • Amazon EBS: encrypt volumes
    • Amazon S3: Server side encryption of objects
    • Amazon Redshift: encryption of data
    • Amazon RDS: encryption of data
    • Amazon SSM: Parameter store
    • Etc…
  • Bạn cũng có thể sử dụng CLI / SDK ![alt text](https://kipalog.kaopiz.com/uploads/1b3c/344c/Screen Shot 2021-09-18 at 17.53.55.png)

CMK

![alt text](https://kipalog.kaopiz.com/uploads/b712/e3dc/Screen Shot 2021-10-21 at 23.14.02.png)

  • Giá trị trong KMS là Customer Master Key (CMK) được sử dụng để mã hóa dữ liệu không bao giờ có thể được người dùng truy xuất và CMK có thể được xoay vòng để tăng cường bảo mật
  • Đừng bao giờ lưu trữ bí mật của bạn trong văn bản rõ ràng, đặc biệt là trong code của bạn
  • Các bí mật được mã hóa có thể được lưu trữ trong các code/ biến môi trường
  • KMS chỉ có thể giúp mã hóa tối đa 4KB dữ liệu cho mỗi lần gọi
  • Nếu dữ liệu > 4 KB, sử dụng Envelope Encryption
  • Để cấp quyền truy cập vào KMS cho ai đó:
    • Đảm bảo rằng Key Policy cho phép user đó
    • Đảm bảo rằng IAM Policy cho phép các lệnh gọi API
  • Theo dõi các lệnh gọi API được thực hiện với KMS trong CloudTrail ![alt text](https://kipalog.kaopiz.com/uploads/dc96/3416/Screen Shot 2021-09-18 at 19.35.11.png)

Types of KMS Keys

![alt text](https://kipalog.kaopiz.com/uploads/fbf8/4685/Screen Shot 2021-09-18 at 19.36.43.png)

Customer Manager CMK:

  • Cung cấp cho bạn khả năng tạo, quản lý, và sử dụng, đồng thời bạn có thể bật hoặc tắt một số key.
  • Khả năng xác định chính sách xoay vòng - rotation policy (khóa mới được tạo hàng năm, khóa cũ được giữ nguyên)
  • Có thể thêm key policy (resource policy)
  • Tận dụng cho envelope encryption

AWS managed CMK:

  • Được sử dụng bởi dịch vụ AWS (aws/s3, aws/ebs, aws/redshift)
  • Được quản lý bởi AWS

DEK - Data Encription Key

![alt text](https://kipalog.kaopiz.com/uploads/100a/11ee/Screen Shot 2021-10-21 at 23.41.41.png)

  • Khóa mã hóa dữ liệu (DEK) là một loại khóa khác mà KMS có thể tạo ra, và chúng được tạo bằng cách sử dụng khóa chính của khách hàng.
  • Khóa này có thể được sử dụng để mã hóa dữ liệu có kích thước lớn hơn 4KB.
  • KMS không lưu trữ khóa mã hóa dữ liệu dưới bất kỳ hình thức nào, nó cung cấp cho bạn hoặc dịch vụ sử dụng KMS và sau đó sẽ loại bỏ nó. Lý do KMS loại bỏ nó là KMS không thực sự thực hiện mã hóa hoặc giải mã dữ liệu bằng cách sử dụng các khóa mã hóa dữ liệu. Bạn làm điều đó, hoặc dịch vụ sử dụng KMS làm điều đó. KMS không sử dụng khóa mã hóa dữ liệu cho bất kỳ thứ gì ngoài việc tạo ra chúng ban đầu.
  • Khi khóa mã hóa dữ liệu được tạo, KMS cung cấp cho bạn hai phiên bản của khóa mã hóa dữ liệu đó.
    • Đầu tiên, một phiên bản văn bản thuần túy của khóa (Plaintext) có thể được sử dụng ngay lập tức.
    • Ngoài ra, nó cũng cung cấp văn bản mật mã hoặc phiên bản được mã hóa của cùng một khóa mã hóa dữ liệu đó. Khóa mã hóa dữ liệu được mã hóa bởi khóa chính của khách hàng đã tạo ra nó. Vì vậy, trong tương lai, nó có thể được KMS giải mã bằng cách sử dụng cùng khóa chính của khách hàng đó, giả sử bạn có quyền.
    • Bạn tạo khóa mã hóa dữ liệu, bạn lấy phiên bản văn bản thuần túy của khóa đó và mã hóa văn bản thuần túy của bạn để tạo văn bản mật mã cho dữ liệu của bạn và sau đó bạn loại bỏ khóa mã hóa dữ liệu văn bản thuần túy. Điều đó sẽ để lại cho bạn dữ liệu được mã hóa và bản sao mã hóa của khóa mã hóa dữ liệu.

Cách thức hoạt động của KSM? API – Encrypt and Decrypt

  • Ví dụ đối với việc mã hoá mật khẩu. Mật khẩu thường rất nhỏ và do đó sẽ nhỏ hơn 4KB.
  • Chúng ta sẽ gọi tới dịch vụ KMS và sử dụng Client CLI/SDK để gọi API mã hoá, ý nói rằng chúng ta muốn mã hóa bí mật này bằng CMK mà bạn chỉ định và tự tạo.
  • Hãy nhớ CMK nằm trong dịch vụ KMS và chúng ta không bao giờ có quyền truy cập vào nó. Vì vậy, KMS sẽ kiểm tra quyền IAM của bạn với IAM để đảm bảo rằng chúng ta thực sự có quyền truy cập để sử dụng CMK này và sau đó KMS sẽ gửi lại cho bạn mật khẩu đã được mã hóa.
  • Bạn có mật khẩu đã được mã hóa và sau đó nói rằng bạn cần sử dụng nó nên bạn muốn giải mã nó. Sử dụng Client CLI/SDK để gọi API giải mã và bạn gửi mật khẩu đã được mã hóa tới KMS. Một lần nữa, KMS sẽ kiểm tra lại các quyền của IAM để đảm bảo bạn có thể giải mã và nếu mọi thứ tốt đẹp thì việc giải mã sẽ diễn ra trong dịch vụ KMS và bạn sẽ nhận lại được mật khẩu đã giải mã. ![alt text](https://kipalog.kaopiz.com/uploads/b63b/53f5/Screen Shot 2021-09-18 at 19.37.30.png) ![alt text](https://kipalog.kaopiz.com/uploads/e297/cc1e/Screen Shot 2021-10-21 at 23.17.37.png)
  • Hãy cùng xem xét một ví dụ cụ thể về cách thức hoạt động của CMK:
    • Tương tác đầu tiên của bạn với KMS sau khi chọn một region sẽ là tạo ra một khóa, cụ thể là Khóa chính của khách hàng - CMK
      • Bạn chạy hoạt động tạo khóa và một vùng chứa logic khóa chính của khách hàng (customer master key logical container) được tạo, chứa tài liệu khóa vật lý hỗ trợ. Đây là điều quan trọng mà KMS tạo ra, lưu trữ và quản lý.
      • Khóa chính của khách hàng không bao giờ được lưu trữ ở dạng liên tục khi không được mã hóa, những gì KMS sẽ làm là lấy khóa chính của khách hàng này và mã hóa nó trước khi nó được lưu trữ liên tục trên container.
    • Tương tác tiếp theo của bạn với KMS có thể là yêu cầu mã hoá một số dữ liệu
      • Để làm điều này, bạn thực hiện gọi Encrypt tới KMS, chỉ định khóa để sử dụng và cung cấp một số dữ liệu để mã hóa.
      • KMS chấp nhận dữ liệu và giả định rằng bạn có quyền sử dụng khóa chính của khách hàng bạn vừa chỉ định
      • KMS giải mã khóa đó và sử dụng nó để mã hóa dữ liệu văn bản thuần túy mà bạn đã cung cấp và sau đó trả lại dữ liệu đó cho bạn.
    • Tại một thời điểm nào đó trong tương lai, bạn sẽ muốn giải mã dữ liệu.
      • Để làm điều đó, bạn gọi một hoạt động giải mã, bao gồm dữ liệu mà bạn muốn giải mã.
      • KMS không cần bạn phải cho biết khóa chính của khách hàng sẽ sử dụng cho các hoạt động giải mã. Thông tin đó đã được mã hóa bên trong bản mã hoá của dữ liệu mà bạn muốn giải mã. Vì vậy, tất cả những gì bạn cần làm là gọi Decrypt và chuyển văn bản mã hoá vào KMS
      • Giả sử rằng bạn có quyền giải mã, KMS sẽ giải mã khóa chính của khách hàng, và sau đó nó sẽ sử dụng khóa này để giải mã bản mã và trả lại dữ liệu đó cho bạn.

Không có điểm nào trong toàn bộ quá trình này, khóa chính của khách hàng rời khỏi KMS, không có điểm nào nó được lưu trữ trong container ở dạng văn bản thuần túy. Bạn có thể có quyền tạo khóa để sử dụng nó để mã hóa dữ liệu và giải mã hoặc bạn chỉ có thể có một trong những quyền đó. Bạn có thể có quyền mã hóa dữ liệu, nhưng không giải mã dữ liệu hoặc bạn có thể có toàn quyền quản lý KMS

Key Policies

![alt text](https://kipalog.kaopiz.com/uploads/0a1d/a919/Screen Shot 2021-10-21 at 23.57.01.png)

CloudHSM (Hardware Security Module)

CloudHSM 101

![alt text](https://kipalog.kaopiz.com/uploads/7b55/1ba4/Screen Shot 2021-10-22 at 21.37.06.png)

  • AWS CloudHSM là một mô-đun bảo mật phần cứng dựa trên đám mây (HSM = Hardware Security Module) cho phép bạn dễ dàng tạo và sử dụng các khóa mã hóa của riêng bạn trên AWS Cloud
    • KMS => AWS manages the software for encryption
    • CloudHSM => AWS provisions encryption hardware
  • Dedicated Hardware
  • Bạn quản lý hoàn toàn các khóa mã hóa của riêng mình (không phải AWS). AWS cung cấp phần cứng cho CloudHSM nhưng họ không có quyền truy cập vào nó. Trong trường hợp mất quyền truy cập vào thiết bị HSM, không có cách nào dễ dàng để lấy lại quyền truy cập vào thiết bị đó.
  • Thiết bị HSM có khả năng chống giả mạo, tuân thủ FIPS 140-2 Level 3
  • Truy cập thông qua Industry Standard APIs: PKCS#11, JCE (Java Cryptography) Extensions, CNG (Microsoft CryptoNG) Extensions
  • Trước đây, không có sự chồng chéo thực sự giữa CloudHSM và KMS, chúng hoàn toàn khác nhau. Nhưng gần đây, bạn có thể sử dụng một tính năng của KMS, được gọi là kho khóa tùy chỉnh (custom key store), và kho khóa tùy chỉnh này có thể sử dụng CloudHSM tích hợp với KMS.
  • Hỗ trợ cả mã hóa đối xứng và không đối xứng (SSL/TLS keys)
  • Không có bậc miễn phí
  • Phải sử dụng CloudHSM Client Software
  • Redshift hỗ trợ CloudHSM để mã hóa cơ sở dữ liệu và quản lý key
  • Lựa chọn tốt để sử dụng với mã hóa SSE-C ![alt text](https://kipalog.kaopiz.com/uploads/4033/41d9/Screen Shot 2021-09-18 at 19.58.20.png)

CloudHSM Diagram

  • AWS sẽ quản lý phần cứng cho chúng ta, nhưng sau đó chúng ta sẽ được cung cấp một thiết bị CloudHSM và thiết bị đó dành riêng cho chúng ta.
  • Vì vậy, nếu chúng ta mất các khóa mã hóa, AWS không thể khôi phục thiết bị cho chúng ta. Đó thực sự là trách nhiệm của chúng ta, vì vậy hãy thận trọng khi sử dụng.
  • Để quản lý các khóa này và mọi thứ bạn cần có CloudHSM Client, ứng dụng này sẽ truy cập thiết bị CloudHSM để bạn quản lý khóa của mình, chúng sẽ có kết nối được mã hóa để chia sẻ thông tin an toàn .
  • Bạn có trách nhiệm quản lý mọi thứ bên trong thiết bị của mình, AWS không thể giúp bạn một khi đã cung cấp cho bạn phần cứng bạn cần. Do đó, xét về quyền IAM, điều duy nhất AWS có thể làm về IAM là giúp bạn tạo, mô tả và xóa cụm Cloud HSM của mình.
  • Bất cứ điều gì trong cụm CloudHSM của bạn, đó là trách nhiệm của riêng bạn. Vì vậy, bằng cách sử dụng phần mềm CloudHSM, bạn có thể quản lý các khóa ( tạo, đọc, cập nhật, xóa khóa) và cũng có thể quản lý người dùng có quyền truy cập vào các khóa này. Nó rất giống với một cơ sở dữ liệu mà AWS sẽ cung cấp cho bạn chính cơ sở dữ liệu đó và bạn phải quản lý những người dùng bên trong nó. Nó không hoàn toàn đúng như vậy, không hoàn toàn giống với Cloud HSM, nhưng bạn có thể hiểu được. Bạn phải quản lý tất cả bảo mật trong thiết bị của mình và AWS không thể giúp bạn điều đó. ![alt text](https://kipalog.kaopiz.com/uploads/4d06/de28/Screen Shot 2021-09-18 at 19.59.03.png)

Cách thức hoạt động

![alt text](https://kipalog.kaopiz.com/uploads/559a/610f/Screen Shot 2021-10-22 at 21.52.20.png)

  • Các thiết bị CloudHSM được triển khai trên VPC do AWS quản lý
  • Chúng được đưa vào các VPC do khách hàng quản lý bằng cách sử dụng ENI (Elastic Network Interface)
  • HSM theo mặc định không phải là một thiết bị có tính khả dụng cao. Để đảm bảo HA, chúng ta cần triển khai nhiều thiết bị HSM trên nhiều AZ và định cấu hình chúng thành một cụm
  • Một ứng dụng khách CloudHSM Client cần được cài đặt trên các EC2 instance, sẽ được định cấu hình để truy cập CloudHSM
  • Trong khi AWS cung cấp các thiết bị HSM, chúng ta với tư cách là khách hàng sẽ chịu trách nhiệm quản lý các khóa
  • AWS có thể cung cấp các bản cập nhật phần mềm trên thiết bị HSM, nhưng những bản cập nhật này sẽ không ảnh hưởng đến phần lưu trữ mã hóa

CloudHSM – High Availability

• Các cụm CloudHSM được trải rộng trên Multi AZ (HA) • Tuyệt vời cho tính khả dụng và bền vững ![alt text](https://kipalog.kaopiz.com/uploads/58b5/b232/Screen Shot 2021-09-18 at 19.59.22.png)

CloudHSM Use Cases

![alt text](https://kipalog.kaopiz.com/uploads/7c37/448f/Screen Shot 2021-10-22 at 21.59.29.png)

  • Theo mặc định, không có tích hợp gốc (native integration) giữa CloudHSM với dịch vụ AWS, điều này có nghĩa là không thể sử dụng CloudHSM cho S3 SSE, chẳng hạn. CloudHSM có thể được sử dụng để mã hóa phía máy khách trước khi tải dữ liệu lên S3
  • CloudHSM có thể được sử dụng để giảm tải quá trình xử lý SSL / TLS cho các máy chủ web
  • Cơ sở dữ liệu Oracle từ RDS có thể thực hiện Mã hóa dữ liệu minh bạch (Transparent Data Encryption - TDE) bằng cách sử dụng CloudHSM
  • CloudHSM có thể được sử dụng để bảo vệ các khóa riêng tư cho Tổ chức phát hành chứng chỉ (Certificate Authority - CA)

CloudHSM vs KMS

FeatureAWS KMSAWS CloudHSM
TenancyUses multi-tenant key storageSingle tenant key storage, dedicated to one customer
KeysKeys owned and managed by AWSCustomer managed Keys
EncryptionSupports only symmetric key encryptionSupports both symmetric and asymmetric encryption
Cryptographic AccelerationNoneSSL/TLS Acceleration Oracle TDE Acceleration
Key Storage and ManagementAccessible from multiple regions.
Centralized management from IAM
Deployed and managed from a customer VPC.
Accessible and can be shared across VPCs using VPC peering
Free Tier AvailabilityYesNo
  • Nếu FIPS 140-2 level 3 được đề cập, thì đó là đám mây HSM, còn FIPS 140-2 level 2 thì là KMS
  • Nếu tích hợp với AWS được đề cập, thì có lẽ nó sẽ là KMS, còn nếu bạn cần sử dụng các API mã hóa Tiêu chuẩn Công nghiệp, thì đó có thể là CloudHSM.

Ref


Tags

© 2021, All Rights Reserved.

Quick Links

Liên hệ quảng cáoThông tinLiên hệ

Social Media