OpenSSL を使用して AWS Key Management Service (AWS KMS) キーでファイルを暗号化したいと考えています。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI のエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
RSA キーペアの作成、パブリックキーのダウンロード、AES 256 ビットキーの作成
次の手順を実行します。
- RSA キーペアを作成します。
- パブリックキーをダウンロードするには、AWS CLI コマンド get-public-key を実行します。
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 コマンドを実行して、Advanced Encryption Standard (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 マシンイメージ (AMI) は OpenSSL 1.0.2 を使用しており、-pbkdf2 コマンドはサポートしていません。
- key.bin ファイルを AWS KMS パブリックキーで暗号化します。これにより、重要なデータが保護されます。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 ファイルを暗号化して、ユーザーが key.bin にアクセスするために enc.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 プライベートキーはプレーンテキストでは表示できないため、AWS KMS API へのアクセス権が必要です。
次の手順を実行します。
- enc.key.bin ファイルを復号化して AWS KMS API に送信するには、AWS CLI コマンド decrypt を実行します。
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 を比較します。