我想要使用 OpenSSL,透過 AWS Key Management Service (KMS) 金鑰來加密檔案。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
建立 RSA 金鑰對、下載公共金鑰,並建立 AES 256 位元金鑰
請完成以下步驟:
- 建立 RSA 金鑰對。
- 若要下載公共金鑰,請執行 get-public-key AWS CLI 命令:
aws kms get-public-key --key-id your-key-id --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin
注意:將 your-key-id 替換為您的非對稱金鑰 ID。--query 函式會取得公共金鑰,然後將 base64 檔案解碼為 DER 金鑰。
- 執行以下 OpenSSL rand 命令,以建立進階加密標準 (AES) 256 位元金鑰:
openssl rand -base64 32 > key.bin
加密您的資料
請完成以下步驟:
- 使用 key.bin 檔案執行以下 OpenSSL enc 命令:
openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin
注意:將 FILE_TO_ENCRYPT 替換為您的檔案名稱。-pbkdf2 命令僅適用於 OpenSSL 1.1.1。Amazon Linux 2 Amazon Machine Image (AMI) 使用 OpenSSL 1.0.2,且不支援 -pbkdf2 命令。
- 使用 AWS KMS 公共金鑰加密 key.bin 檔案。這會保護您的金鑰資料。只有可存取您 AWS KMS 私有金鑰的使用者,才能存取 key.bin 檔案。若要執行此操作,請執行 OpenSSL pkeyutl 命令:
openssl pkeyutl -in key.bin -out enc.key.bin -inkey RSAPublic.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256
**注意:**pkeyutl 命令使用 AWS KMS API RSAES_OAEP_SHA_256 支援解密的加密演算法。AWS KMS 公共金鑰 RSAPublic.bin 會加密 AES 256 位元金鑰,並建立名為 enc.key.bin 的新檔案。
- 若要加密 key.bin 檔案,讓使用者必須解密 enc.key.bin 檔案才能存取 key.bin,請執行 rm AWS CLI 命令:
aws s3 rm key.bin && rm FILE_TO_ENCRYPT
**注意:**將 FILE_TO_ENCRYPT 替換為您的檔案名稱。
- (選用) 刪除您要加密的原始檔案,讓使用者無法存取該檔案。
您現在擁有以下資源:
- FILE_TO_ENCRYPT.enc 檔案中的加密資料。
- 加密的 AES 256 位元金鑰 enc.key.bin。
- AWS KMS 公共金鑰 RSAPublic.bin。
**注意:**具有加密資料的使用者必須將檔案傳送給您進行解密。
解密您的檔案
若要擷取加密資料,請解密 enc.key.bin,然後使用該金鑰解密 FILE_TO_ENCRYPT.enc 檔案。
**注意:**您必須能夠存取 AWS KMS API,因為 AWS KMS 私有金鑰無法以純文字檢視。
請完成以下步驟:
- 若要解密 enc.key.bin 檔案並將其傳送至 AWS KMS API,請執行 decrypt AWS CLI 命令:
aws kms decrypt --key-id your-key-id --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin
注意:將 your-key-id 替換為您的金鑰 ID。--query 函式會選取純文字,然後將 base64 值解碼至 decryptedKey.bin 檔案。
- 若要輸出解密後的檔案,請在執行以下 OpenSSL enc 命令時使用 decryptedKey.bin 檔案:
openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin
**注意:**將 DECRYPTED_FILE 替換為您的檔案名稱。
- 若要確認加密和解密已順利完成,請比較 DECRYPTED_FILE 和 FILE_TO_ENCRYPT。