本日はAWS Lambdaの変数の使い方についてお話いたします。
AWS Lambda関数には環境変数を設定することができ、使用場面としては『コードに機密情報、セキュリティレベルの高い情報を入れたくない』と言う時などに使用されます。それでは、さっそく使い方を紹介いたします。
使い方を紹介した後は実践的な使い方についてご紹介致します。
- 1.実施手順
- 1-1.Lambdaの設定から環境変数を入力
- 1-2.コードに「import os」を入力
- 2.応用編-環境変数を暗号化して見えなくしよう
- 2-1.暗号化用のキーを作成
- 2-2.Lambdaがキーにアクセスするため許可ポリシー作成
- 2-3.環境変数を暗号化しよう
- 2-4.暗号を複合するコードをLambdaに入れよう
実施手順
実施手順はたった以下の2つです。
①Lambdaの設定から環境変数を入力
②コードに「import os」を入力
では実際にやっていきましょう。
1-1.Lambdaの設定から環境変数を入力
以下の画面から環境変数の設定を行っていきます。以下の画面から『編集』ボタンを押します。
すると以下の画面になり、「環境変数の追加」ボタンを押すと以下のように入力欄が出てきます。
以上で環境変数の入力手順は完了です。
1-2.コードに「import os」を入力
環境変数を入力する時はOSモジュールをインストールしなければなりませんので、コードの最初に『import os』を入力します。
そして、環境変数の値を取り出す際は『os.environ[‘環境変数キー’]』を使います。
※以下コードをべた張りする際は、インデントを整えて貼り付けるようお願いします。コードの行頭の空白はスペースになっているのでタブにするようにしてください。
- import os
- def lambda_handler(event, context):
- #valueという変数に環境変数に設定した値を入れます。
- value = os.environ['test']
- #valueの中身を表示します。
- print(value)
2.応用編-環境変数を暗号化して見えなくしよう
環境変数はコードに埋め込みたくない機密的な情報が入ることが多いです。第三者が見れないよう暗号化しましょう。
2-1.暗号化用のキーを作成
まずは暗号化するためのキーを作成します。AWSconsoleにログインし、KMSの画面に行き、「カスタマー管理型のキー」を選択します。基本的にはデフォルト設定で作成していって問題ありませんが、キーポリシー(キーに対するアクセス権が書かれているポリシー)は編集が必要です。キーポリシーの「Allow」の「Action」のフィールドに暗号化が可能になる「kms:Encrypt」を追加しましょう。最後に完了ボタンを押せば作成完了です。
2-2.Lambdaがキーにアクセスするため許可ポリシー作成
今度はLambdaに付けるIAM許可ポリシーです。LambdaからKMSへアクセスできるようLambdaにIAMポリシーを付けてあげる必要があります。 「kms:Decrypt」を許可してあげれば大丈夫です。私は以下のIAM許可ポリシーを作成しLambdaの実行ロールにアタッチしました。Lambdaの実行ロールの確認場所は対象のLambda関数の画面から「設定」タブ>「アクセス権限」>「実行ロール」>「ロール名」で確認できます。
※以下コードをべた張りする際は、インデントを整えて貼り付けるようお願いします。コードの行頭の空白はスペースになっているのでタブにするようにしてください。
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Sid": "VolumeEncryption",
- "Effect": "Allow",
- "Action": [
- "kms:Encrypt",
- "kms:Decrypt",
- "kms:DescribeKey"
- ],
- "Resource": "*",
- }
- }
- ]
- }
2-3.環境変数を暗号化しよう
対象のLambda > 設定 > 環境変数 > 編集 を押して環境変数の編集画面に行きます。 「暗号化の設定」の▶ボタンを押して暗号化画面を展開します。 展開すると「転送時の暗号化に使用するヘルパーの有効化」のチェックボックスが出てきます。 それにチェックを入れると、キーと値の右に「暗号化」のボタンが出てきますのでクリックします。
「転送時の暗号化を行うための AWS KMS キー」に先ほど作成したKMSキーのARNを入力します。 この画面の「シークレットスニペットの復号」は後でコードに埋め込んで復号処理を行いますので、どこかに控えておいた方がよいかもしれません。 以下の画面でKMSキーを入力したら、暗号化ボタンを押します。
値が暗号化されました。保存ボタンを押して設定完了です。
2-4.暗号を複合するコードをLambdaに入れよう
先ほど出てきた「シークレットスニペットの復号」でメモしたコードをそのままべた張りします。
※以下コードをべた張りする際は、インデントを整えて貼り付けるようお願いします。コードの行頭の空白はスペースになっているのでタブにするようにしてください。
- import os
- import boto3
- from base64 import b64decode
- ENCRYPTED = os.environ['test']
- DECRYPTED = boto3.client('kms').decrypt(
- CiphertextBlob=b64decode(ENCRYPTED),
- EncryptionContext={'LambdaFunctionName': os.environ['AWS_LAMBDA_FUNCTION_NAME']}
- )['Plaintext'].decode('utf-8')
- def lambda_handler(event, context):
- #valueという変数に環境変数に設定した値を入れます。
- value = os.environ['test']
- #valueの中身を表示します。
- print(value)
以上で暗号化も完了です。本記事はこれで終了となります。最後までご覧いただきありがとうございました。
[…] 手順はたった2つ AWS Lambda環境変数の使い方!暗号化についても説明します […]