Edited at

aws kms コマンドでの暗号化文字列の作り方

More than 1 year has passed since last update.


TL;DR

LambdaからS3へアクセスする場合 CredentialをLambdaに持たせる必要があるわけですが、CloudFormation でLambdaを作ってCodePipelineでリリースしている場合 CredentialをConsoleにて登録することができません。

他の方法としては CredentialをLambdaのコードないし設定ファイルに直接記載することが出来ます。しかしそんな機密情報をバージョン管理システムにそのまま入れたくありません。Lambdaには暗号化した文字列を環境変数経由で復号して渡す仕組みがありますのでこれに乗ろうと思います。そのためには、Credentialを暗号化してSAMファイルに保存する必要があります。

そこで、AWS CLIで暗号化文字列を作る手順を書いてみました。確認の便宜のため暗号化して復号する手順にしてみました。


手順

例として、 plaintextabcd1234 という文字列を暗号化したいとします。

環境はWindows7とします。

>aws kms encrypt --key-id <<あなたのアカウントで使える暗号化キーのid>> --plaintext plaintextabcd1234 --query CiphertextBlob --output text  > cipherbase64

>certUtil -f -decode cipherbase64 cipherbin
入力長 = 206
出力長 = 152
CertUtil: -decode コマンドは正常に完了しました。

>aws kms decrypt --ciphertext-blob fileb://cipherbin --query Plaintext --output text > plainbase64

>certUtil -f -decode plainbase64 plain
入力長 = 26
出力長 = 17
CertUtil: -decode コマンドは正常に完了しました。

>type plain
plaintextabcd1234

コマンド実行毎の解説


  1. 暗号化してBASE64エンコーディングされた文字列をcipherbase64というファイルに出力


  2. cipherbase64をデコードし、cipherbin に出力。中身はバイナリファイル。


  3. cipherbin を復号し、BASE64エンコーディングされた文字列を plainbase64 というファイルに出力


  4. plainbase64をデコードし、plain というファイルに出力


  5. plainを出力し内容を確認できる。 内容は plaintextabcd1234 である。

SAMファイルでの環境変数の設定には、cipherbase64の中身を設定すれば良い。


感想

暗号化するときはキーを指定するのですが、復号のときは不要です。この仕組みは追って調べたいかなと。(使えるキーを総当りしているのか、暗号化文字列から暗号化したキーのIDを割り出せるようになっているのか。)

この手順では中間的なファイルが4個もあるので試しに内容確認してみると良いと思います。