LoginSignup
2
0

More than 3 years have passed since last update.

AWS KMSを使ってローカルに鍵を保存せずに暗号化・複合化を行う

Last updated at Posted at 2020-04-02

まとめ

AWS KMS では鍵をローカルで管理することなくテキストの暗号化・複合化を行う機能を提供している。
システムで利用するパスワードなどを暗号化・複合化したいといった「ちょっとした暗号化」が欲しい場合にはこれを利用できる。

なお、効率の面から小規模データ向けの方法。
この記事では取り扱わないが、大量のデータを暗号化・複合化する場合にはKMSに暗号化・複合化で使える鍵を発行してもらってそれを使う。

bashコード

awscli を使って TARGET_TEXT を暗号化・複合化する例。

enc.sh
#!/bin/bash

CMK_ID=<自分のAWSアカウントで利用するKMSのカスタマー管理型のキーのID>
PROFILE=<profileを使いたい場合は入力>
TMPFILE=.tmp-bin

TARGET_TEXT=P@ssW0rd

if [ "$PROFILE" != "" ]; then
  PROFILE_CONTEXT="--profile $PROFILE"
else
  PROFILE_CONTEXT=""
fi

echo start to encrypt "$TARGET_TEXT"

ENCB64=$(aws kms encrypt --key-id ${CMK_ID} --plaintext ${TARGET_TEXT} --output text --query CiphertextBlob ${PROFILE_CONTEXT})

echo encrypted and base64 encoded text: $ENCB64
echo $ENCB64 | base64 -d > ${TMPFILE}

PLAIN_TEXT=$(aws kms decrypt --ciphertext-blob fileb://$(pwd)/${TMPFILE} --output text --query Plaintext ${PROFILE_CONTEXT} | base64 -d)

echo decrypted plain text: $PLAIN_TEXT
出力結果の一例
start to encrypt P@ssW0rd
encrypted and base64 encoded text: AQICAHiclkP1z430sHo4kvwnliLRBAmXEHF1EiUqPErprxdOUwHgofADoFBFs0IwSuYxhQH/AAAAZjBkBgkqhkiG9w0BBwagVzBVAgEAMFAGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM6oisVNzAn1r59h8AAgEQgCOogkCKzVFWtQfXPlAvhhEH0lGjtpL44biYU7ZkGbk1zAcRag==
decrypted plain text: P@ssW0rd
  • aws kms encrypt--plaintext で指定した文字列をAWS KMSに保持している鍵を使って暗号化する
    • 暗号化したデータを base64 エンコードしたものが得られる
    • awscli の出力は ドキュメント から分かる通り複数あるので、暗号化したデータを指す CiphertextBlob のみを --query CiphertextBlob で指定することで取得する
  • aws kms decrypt で暗号化したデータを複合化する
    • fileb:// で指定する場合、基本フルパスなので上記shellではそのためのコードが書かれている
    • 指定するファイルのデータは base64 をでコードしたものである必要がある
    • encryptの場合と同様、--query で必要な部分のみを取得

以上の手順で鍵を自分で管理することなく、暗号化・複合化を行うことができる。

余談

モチベーションは Chalice の .chalice/config.json にパスワードを書こうと思ったのだが、このファイルはコミットしたい、でもパスワードは書きたいのでどうしよう…というところが発端。
他の人がどうしているかを見ると Githubでもディスカッションされている のを見て、その中で紹介されていた内容が実際にできるかどうかを確かめたのがこの記事だったり。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0