19
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Lambdaの環境変数をKMSで暗号化して、Pythonで復号化する

Last updated at Posted at 2017-11-15

今回のお題

IAMの暗号化キーを生成し、その暗号キーを用いてLambdaの環境変数を暗号化する。
暗号化したものをPythonで複合化して、表示してみる。

暗号化キーを作成する

IAM > 暗号化キーを選択する。
スクリーンショット 2017-11-15 23.46.16.png

リージョンを東京に変更する

スクリーンショット 2017-11-15 23.47.48.png

画面上部のキーの作成を押下する

スクリーンショット 2017-11-15 23.48.24.png

エイリアスを入力し、KMSを選択する。

今回はテストなので「test/key」としました。
入力・選択を終えたら、画面下部の「次のステップ」押下
スクリーンショット 2017-11-15 23.49.14.png

タグキーを入力

入力したら画面下部の「次のステップ」押下
スクリーンショット 2017-11-15 23.50.58.png

キー管理者を設定

本来は、ちゃんと設定するのでしょうが、今回はlambdaのデフォルトで用意されている「lambda_basic_execution」を設定しました。
あと、自分のAWSのログインIDも設定します(変更したりできるようにするため)
スクリーンショット 2017-11-15 23.51.55.png

キーの使用者の設定

こちらも同じく「lambda_basic_execution」とAWSの自分のIDを設定しておきます。
スクリーンショット 2017-11-15 23.53.13.png

完了

作成が終えると、キーの一覧に表示されます。
スクリーンショット 2017-11-15 23.55.03.png

Lambdaの環境変数を設定し、暗号化する

サービス > lambdaを選択し、ソースインラインの下にある環境変数に値を入れ、暗号化を設定していきます。

環境変数に値を入れる

スクリーンショット 2017-11-15 23.57.05.png

暗号化の設定を開く

「伝送中の暗号化のためのヘルパーの有効化」のチェックをONにすると、伝送中に暗号化するKMSキーが表示されます。
スクリーンショット 2017-11-15 23.59.28.png

前手順で作成したKMSキーを選ぶ

リスト式ですので、クリックすると設定されている一覧が表示されます。
先ほど作成したKMSキーを選択しましょう。
スクリーンショット 2017-11-16 0.00.37.png

環境変数の暗号化を押下する

KMSキーを設定すると、環境変数に暗号化ボタンが表示されますので、押下します。
スクリーンショット 2017-11-16 0.01.24.png

スクリーンショット 2017-11-16 0.04.45.png

Pythonで環境変数を読み込んでみる。

Lambdaで、下記のようなソースを記載します。

# coding: UTF-8

import os

def lambda_handler(event, context):
    print('~~~~~環境変数表示~~~~~')
    print(os.environ['test'])

保存して、実行します。
ログには、下記のように表示されました。
無事に暗号化できているようです。
スクリーンショット 2017-11-16 0.06.59.png

復号化してみる

復号化は、簡単でした。
下記のようなソースを記載し、実行して見ます。

# coding: UTF-8
from base64 import b64decode
import boto3
import os

def lambda_handler(event, context):
    kms = boto3.client('kms')
    decrypt_text = kms.decrypt(CiphertextBlob=b64decode(os.environ['test']))['Plaintext']
    
    print("~~~~~~~~~~~~~~復号化確認~~~~~~~~~~~~~~~~")
    print(os.environ['test'])
    print(decrypt_text)

実行結果

スクリーンショット 2017-11-16 0.09.48.png

まとめ。

環境変数に対する暗号化・復号化が非常に簡単にできました。
すごい便利ですねこれ。ロールをきちんと考えれば、セキュリティ的にも大丈夫な気がします。

19
17
1

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
19
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?