Mã hóa phía Client

Mã hóa phía Client

  1. Chạy lệnh dưới đây để tạo file text
sudo echo "Sample Secret Text to Encrypt" > samplesecret.txt

Server Side Encryption 2. Cấp thêm quyền cho Instance để thực hiện tạo key

  1. Tại trang Create policy
  • Click Service.
  • Nhập kms vào ô tìm kiếm.
  • Click KMS Server Side Encryption
  1. Trong phần Actions
  • Thêm quyền GenerateDataKey
    • Nhập GenerateDataKey vào ô tìm kiếm
    • Chọn GenerateDataKey Server Side Encryption
  • Làm tương tự với các quyền Encrypt, Decrypt, TagResource, UntagresourceGenerateDataKeyWithoutPlainText
  1. Trong phần Resources
  • Click Resources
  • Chọn Specific
  • Tại mục key Chọn Any in this account
  • Click Next:Tags Server Side Encryption
  1. Tại trang Add tags
  • Click Next:Review Server Side Encryption
  1. Tại trang Review policy
  • Tại mục Name, nhập KMSWorkshop-AdditionalPermissions
  • Click Create Policy Server Side Encryption
  1. Thực hiện attach policy mới tạo KMSWorkshop-AdditionalPermissions vào role KMSWorkshop-InstanceInitRole
  1. Trong phần Permissions policies
  • Click Add permissions.
  • Click Attach policies. Server Side Encryption
  1. Trong phần Other permissions policies
  • Nhập KMSWorkshop-AdditionalPermissions vào ô tìm kiếm, nhấn Enter
  • Chọn KMSWorkshop-AdditionalPermissions.
  • Click Attach policies. Server Side Encryption
  1. Chạy lệnh dưới đây để tạo Data key
aws kms generate-data-key --key-id alias/ImportedCMK --key-spec AES_256 --encryption-context project=workshop

Server Side Encryption

  • Kết quả trả về là chuối JSON với các trường giá trị quan trọng:
    • Giá trị Data key dạng Plain text dạng mã b64
    • Giá trị KeyID của Data key, thông tin được sử dụng cho việc mã hóa thông tin Plain text của Data key
    • CipherTextBlob là thông tin Data Key đã được mã hóa và ở dạng mã b64
  1. Chạy lệnh dưới đây để thực hiện decode thông tin Data key dạng Plain text và Encrypted (do chúng đang ở dạng mã b64) rồi lưu ra các file tương ứng datakeyPlainText.txt và datakeyEncrypted.txt
echo '<Plantext value of the JSON file in step 11>' | base64 --decode > datakeyPlainText.txt
echo '<CipherTextBlob value of the JSON file in step 11>' | base64 --decode > datakeyEncrypted.txt

Server Side Encryption 13. Chạy lệnh dưới đây để mã hóa file Text samplesecret.txt chúng ta đã tạo trước đó. Đầu ra thu được là file encryptedSecret.txt với nội dung đã được mã hóa AES256.

openssl enc -e -aes256 -in samplesecret.txt -out encryptedSecret.txt -k fileb://datakeyPlainText.txt

Server Side Encryption 14. Chạy lệnh dưới đây để kiểm tra nội dung file Text sau khi mã hóa

openssl enc -e -aes256 -in samplesecret.txt -out encryptedSecret.txt -k fileb://datakeyPlainText.txt

Server Side Encryption 15. Chạy lệnh dưới đây để thực hiện xóa file Data key dạng Plain text và chỉ giữ lại file Data key dạng Encrypted, đảm bảo best pratice.

rm datakeyPlainText.txt

Server Side Encryption

Theo best practice về bảo mật dữ liệu, sau khi mã hóa dữ liệu ta sẽ phải xóa Data Key dạng Plain Text. Do vậy khi cần Giải mã file Text đã được Encrypted, thì phải Giải mã file Data key dạng Encrypted nằm trong file datakeyEncrypted.txt để có đc Data key dạng Plain text.

16. Chạy lệnh dưới đây để thực hiện giải mã file datakeyEncrypted.txt.

aws kms  decrypt --encryption-context project=workshop --ciphertext-blob fileb://datakeyEncrypted.txt

Server Side Encryption 17. Chạy lệnh dưới đây để thực hiện decode thông tin Data key mã b64 để có được file Data Key dạng Plain text hoàn chỉnh

echo '<Plantext value of the JSON file in step 16>' | base64 --decode > datakeyPlainText.txt

Server Side Encryption 18. Chạy lệnh dưới đây để thực hiện decrypt file Text đã được mã hóa sử dụng thư viện OpenSSL với file Data Key dạng Plain text

openssl enc -d -aes256 -in encryptedSecret.txt -k fileb://datakeyPlainText.txt

Server Side Encryption 19. Chạy lệnh dưới đây để thực hiện xóa file Data key dạng Plain text và chỉ giữ lại file Data key dạng Encrypted, đảm bảo best pratice.

rm datakeyPlainText.txt

Server Side Encryption