AWS Lambda KMSを使って環境変数を暗号化、復号化する(Python)
Lambda内で外部APIを使用する場合などをユースケースとして、環境変数をKMS(AWS Key Management Service)を使って暗号化出来ます。
暗号化した環境変数はLambda関数内でboto3のkms.decrypt()を使って復号化します。
これ、忘れがちというか、AWSマネジメントコンソールにログインしないと見えないんだからと、やらない場合もあるかと思いますが、画面を表示しているだけで見えてしまうのもセキュアじゃないと思うのでやっておいたほうがいいと思います。
ここでは、KMSキーを作成(1USD/月)していますが、Lambdaのデフォルトサービスキーを使用すれば、毎月20,000リクエストまで無料で利用出来ます。
20,000リクエストを超えると、10,000 リクエストあたり 0.03 USDが課金されます。
(2018年1月現在)
目次
KMSの作成
IAMマネジメントコンソールで、[暗号化キー]を選択します。
[キーの作成]ボタンをクリックします。
KMSキーのエイリアスと説明を入力します。
タグを設定します。
作成したキーを使うユーザー、ロールを一覧から選択します。
Lambdaで使用しているIAMロールを選択します。
ポリシーが自動生成されます。
至れり尽くせりです。
Lambdaの設定
AWS Lambdaの環境変数のセクションで、[暗号化の設定]を展開します。
「伝送中に暗号化するKMSキー」と「保管時に暗号化するKMSキー」に先ほど作成したKMSキーを選択します。
「伝送中の暗号化のためのヘルパーの有効化」にチェックを入れると環境変数の横に[暗号化]、[コード]のボタンが現れます。
- [暗号化]ボタンをクリックすると環境変数の値がマスクされ、暗号化されています。
- [コード]ボタンをクリックすると、暗号化した値を復号化するためのコードが表示されます。至れり尽くせりです。
例えばこれをこのままこのようなコードに挿入すれば、暗号化した環境変数が復号化されているのがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import logging import boto3 import os from base64 import b64decode ENCRYPTED = os.environ['redmine_key'] # Decrypt code should run once and variables stored outside of the function # handler so that these are decrypted once per container DECRYPTED = boto3.client('kms').decrypt(CiphertextBlob=b64decode(ENCRYPTED))['Plaintext'] logger = logging.getLogger() logger.setLevel(logging.INFO) def lambda_handler(event, context): logger.info(DECRYPTED) |
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定試験対策 AWS クラウドプラクティショナー」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター3年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
新規アカウントでAWS Budgetsの設定をしました
新規で組織を作ってAWS Budgetsを久しぶりに設定しました。 作成してすぐ …
-
-
AWS Certificate Manager証明書とAmazon Route 53でAmazon API GatewayのAPIのカスタムドメイン名前解決する
AWS Certificate ManagerとAmazon Route 53と …
-
-
AWS Transfer Family S3向けのSFTP対応サーバーをVPCで作成してEIPをアタッチ
EIPの作成 同じリージョンでEIPを作成しておきます。 SFTP対応サーバーの …
-
-
Amazon EC2 インスタンスメタデータサービス(IMDS) v2のみにしました
今さらながらですが、EC2 インスタンスメタデータサービス(IMDS) v2を確 …
-
-
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー」を執筆いたしました
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー」という本の第 …
-
-
AWSセルフマネージドAD環境にリモートデスクトップで接続
AWSクイックスタートのActive Directory Domain Serv …
-
-
AWSアカウント ルートユーザーのMFAが使えなくなったので復旧
AWSのルートユーザーどころか、MFAが使えるログインすべてが使えなくなって焦り …
-
-
S3バケットのデフォルト暗号化はデフォルトだったことを確認しました
S3バケットのデフォルト暗号化は名前のとおりだとデフォルトなので、暗号化を指定し …
-
-
特定AWSアカウント特定リージョンのSQSキューを削除するLambda(Python)
やりたいこと 特定アカウント内特定リージョン内のSQSキューを全部削除したいです …
-
-
AWS Data Pipelineを使ってDynamoDBのアイテムを全件S3バケットに書き出した
ちょっと試してみたくてやってみました。 手順はこちらのチュートリアルを参考にすす …