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) |
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
EC2 セッションマネージャにEC2インスタンスの一覧から接続できるようになりました
EC2に接続する時に、どうしてもSSHクライアントから接続しないといけない場合を …
-
-
Amazon Linux にnodejsとmongoDBをインストールする
EPEL リポジトリを利用してnodejsとnpmをインストールする [bash …
-
-
Feedlyのフィードを自動でSlackへ投稿する(AWS Lambda , Amazon DynamoDB)
やりたいこと Feedlyで共有したいフィードに特定のタグを付けます。 特定のタ …
-
-
AWS CLIを使用せずにCodeCommitへhttpsで接続する
AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …
-
-
Amazon Q Developer for CLIをmacOSにインストールしました
2025/3/26のAWS Expert Online for JAWSの「Am …
-
-
AWS Client VPNを設定しました
ユーザーガイドのクライアント VPN の開始方法に沿ってやりました。 AWSクラ …
-
-
Systems Manager パブリックパラメータCLIでAWSのサービス数を出力してみました(2020/5/26)
先日のAWSのサービス数を数えてみました(2020/5/23)を見られて、お師匠 …
-
-
Amazon Linux2のCloud9でPython CDKのモジュールインストール
AMIがCloud9AmazonLinux2-2021-02-02T16-48の …
-
-
ヤマムギvol.26 Amazon DynamoDBのデモをしました
今日はAWS認定クラウドプラクティショナー対策本(緑本)に関係するデモをしました …
-
-
Amazon LinuxにRedmine 環境構築(エラーと対応をそのまま記載版)
Amazon Linuxにgit + Redmineの環境を構築してみます。 自 …