前回は OpenSSL を使ってファイルを暗号化する方法を紹介しました。
-
OpenSSLでファイルの暗号化と復号を行う
OpenSSL によるファイルの暗号化・復号を行う機会があったのでメモ。重要な情報が記録されたファイルを保存するときに、 ...
続きを見る
今回は AWS Key Management Service (KMS) と AWS CLI を使ってファイルを暗号化する方法を紹介します。
KMS は、データの暗号化に用いられる暗号鍵の作成、管理、運用のためのマネージドサービスです。KMS は、AWS のさまざまなサービスと統合されていて、各種ストレージやデータベース上のデータの暗号化を簡単に実現できます。今回は AWS CLI から KMS の API を利用してファイルの暗号化を行う方法を紹介します。
目次
KMS の暗号化 API
KMS の API ドキュメントは Actions - AWS Key Management Service にあります。この中にある Encrypt API を使うことで暗号化ができます。この記事を書いた 2020 年 7 月時点では英語のドキュメントしかないのですが、ユースケースのひとつに以下のように書かれています。
You can encrypt small amounts of arbitrary data, such as a personal identifier or database password, or other sensitive information.
個人識別子やデータベースパスワード、その他の機密情報など、少量の任意のデータを暗号化できます。
「少量の任意のデータ」とありますが、暗号化できるデータの容量はカスタマーマスターキー(CMK)とアルゴリズムによって違います。デフォルトは Symmetric CMKs(対称カスタマーマスターキー) で、4096 bytes までのデータを暗号化できます。詳細は Encrypt - AWS Key Management Service を参照。
AWS CLI で暗号化する
AWS CLI から API を実行してファイルを暗号化してみましょう。AWS CLI の encrypt コマンドのドキュメント を見ながら進めます。
aws kms encrypt
コマンドの必須パラメータは以下の通り。
aws kms encrypt --key-id <value> --plaintext <value>
--key-id
オプションにはカスタマーマスターキーを渡します。キーの作成 - AWS Key Management Service を参考に AWS マネジメントコンソールからカスタマーマスターキーを作成しておきます。今回は東京リージョンに alias/my-key
を作成しました。
--plaintext
には暗号化をしたいテキスト情報を渡します。以下のようにテキストファイルを準備します。
echo 'Hello World' > plain.txt
AWS KMS での IAM ポリシーの使用 - AWS Key Management Service を参考に CLI を実行する IAM ユーザーもしくはロールに KMS の暗号化と復号化の権限を付与しておきます。
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt"
],
"Resource": "arn:aws:kms:*:111122223333:key/*"
}
}
準備ができました。コマンドを実行してみましょう。encrypt Examples を参考にします。
aws kms encrypt \
--key-id alias/my-key \
--plaintext fileb://plain.txt \
--output text \
--region ap-northeast-1 \
--query CiphertextBlob | base64 --decode > encrypted.txt
ファイルは fileb://
スキーマでバイナリデータとして渡して、ファイルに書き出す前に base64 でデコードします。詳しくは Examples の後半の説明を確認してください。
コマンドを実行すると encrypted.txt
という暗号化されたファイルができます。バイナリデータになっていて、中身は確認ができません。
AWS CLI で復号する
暗号化したファイルを AWS CLI で復号してみます。詳しくは decrypt — AWS CLI 2 Command Reference を参照。
aws kms decrypt \
--ciphertext-blob fileb://encrypted.txt \
--output text \
--region ap-northeast-1 \
--query Plaintext | base64 --decode > decoded-plain.txt
decoded-plain.txt
が作成されるので、中身を見てみます。
cat decoded-plain.txt
Hello World
暗号化前の状態に戻すことができました。ちなみに、復号するときは --key-id
オプションは不要です。復号するときの --query Plaintext
オプションを省略すると出てきますが、ファイルの中にどの鍵を使って暗号化されたか記録されています。
KMS の暗号化・復号 API はもともと、データキーを暗号化・復号するために作られたもの
AWS Key Management Service の概念 - AWS Key Management Service を読みながら想像した内容になりますが、おそらく KMS の暗号化・復号 API はもともと、データキーを暗号化・復号するためにつくられたものと思われます。より大きな情報や多くの情報を暗号化するには、データキーを使った暗号化が適しています。
データキーを使った暗号化は AWS 暗号化 SDK コマンドラインインターフェイス - AWS 暗号化 SDK を使って行うことができそうです。これはまた試す機会があれば紹介したいと思います。
おわりに
AWS Key Management Service と AWS CLI でファイルを暗号化する方法を紹介しました。小さいファイルしか暗号化ができず、カスタマーマスターキーの料金がかかりますが、AWS KMS の API にアクセスができる環境であれば手軽に暗号化・復号を行うことができます。覚えておくと役に立つことがあるかもしれません。