KMS を触ってみる

KMS を触ってみる

参考

手順

  1. マスターキーを発行する
  2. マスターキーを使用してデータキーと暗号化されたデータキーを発行する
  3. データキーでテキストを暗号化する
  4. マスターキーを使って暗号化されたデータキーを複合する
  5. 複合されたデータキーを使ってテキストを複合する

マスターキーを発行する

AWS で KMS を検索して下記の通りに入力しマスターキーを発行してみる。

  • キーを設定

    1. 次の値を設定する。
      • キーのタイプ: 対象
      • キーの使用: 暗号化および復号化
    2. 「次へ」をクリックする。
  • ラベルを追加

    1. 次の値を設定する。
      • エイリアス: alias-hoge
      • 説明: 説明ほげ
    2. 「次へ」をクリックする。
  • キーの管理アクセス許可を定義

    1. 次の値を設定する。
      • キー管理者: 任意のユーザーまたはロールにチェックを入れる
      • キーの削除: デフォルトで「キーの管理者がこのキーを削除できるようにします。」にチェックがついたままにする。
    2. 「次へ」をクリックする。
  • キーの使用アクセス許可を定義

    1. 次の値を設定する。
      • キーユーザー: 任意のユーザーまたはロールにチェックを入れる
    2. 「次へ」をクリックする。
  • 確認

    1. 「完了」をクリックする。

マスターキーを使用してデータキーと暗号化されたデータキーを発行する

aws-cli のバージョンを確認する。

aws --version
aws-cli/1.27.108 Python/3.8.16 Linux/5.4.72-microsoft-standard-WSL2 botocore/1.29.108

KMS の API を用いて、CMK に紐づくデータキーを作成する。
(オプション --key-id には、先ほど作成したマスターキー CMK の ARN を指定する。)

aws kms generate-data-key --key-id arn:aws:kms:ap-northeast-1:123456789012:key/12345678-1234-1234-1234-123456789012 --key-spec AES_256

実行するとターミナルに下記のような値が表示される。

{
    "CiphertextBlob": "xxx",
    "Plaintext": "xxx",
    "KeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/12345678-1234-1234-1234-123456789012"
}
  • Plaintext: データキー
  • CiphertextBlob: 暗号化されて Base64 エンコードされたデータキー
  • KeyId: 暗号化に使用したマスターキー

値をコピーしてデータキーと暗号化されたデータキーを書き出す。

echo [Plaintext の値] > plain-datakey
echo [CiphertextBlob の値] | base64 --decode > encrypted-datakey

データキーでテキストを暗号化する

テキストを配置する。

cat plain-document
KMS完全に理解した。

データキー plain-datakey を用いて aes-256-cbc モードで暗号化して、ファイル encrypted-hogehoge.txt として保存する。

openssl aes-256-cbc -e -in plain-document -out encrypted-document -pass file:plain-datakey
cat encrypted-document
t4�y���r��c�-'��~��

マスターキーを使って暗号化されたデータキーを複合する

暗号化されたデータキーを複合する。

aws kms decrypt --ciphertext-blob fileb://encrypted-datakey --output text --query Plaintext > decrypted-datakey

データキーを作成した時に入手した、暗号化前のデータキーと比較し、データが一致することを確認する。

diff plain-datakey decrypted-datakey

複合されたデータキーを使ってテキストを複合する。

復号後のデータキーを用いて、暗号化したファイルを復号する。元通りになっていることを確認する。

openssl aes-256-cbc -d -in encrypted-document -pass file:decrypted-datakey > decrepted-document

複合後のテキストを確認する。

cat decrepted-document
KMS完全に理解した。