AWS Systems Manager パラメータストアから秘密情報を取得してLambdaで使用する方法


この記事からわかること

パラメータストアに保存されている秘密情報をLambdaから取得して使用する方法がわかります。

手順

手順の概要は以下の通りです。

  • パラメータストアに秘密情報を追加
  • Lambdaにパラメータストアのアクセス権限を付与
  • Lambdaにパラメータストアを扱う関数を追加

以降ではそれぞれの手順について記載します。

パラメータストアに秘密情報を追加

パラメータストアにパラメータ「/sushi/like/rds」を追加します。
種類は「SecureString」を選択
※DBの接続情報を想定

/sushi/like/rds
{
    "HOST": "host_sushi",
    "DBNAME": "dbname_sushi",
    "USER": "user_sushi",
    "PASSWORD": "password_sushi"
}

Lambdaにパラメータストアのアクセス権限を付与

上記で作成したパラメータの値を取得するためのIAMポリシー「get_rds_param」を作成します
下の例では扱うことができるパラメータを「/sushi/like/rds」のみに制限しています。
作成したポリシーをLambdaのIAMロールに付与してあげます。

get_rds_param
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:GetParameter*"
            ],
            "Resource": "arn:aws:ssm:ap-northeast-1:123456789012:parameter/sushi/like/rds"
        }
    ]
}

Lambdaにパラメータストアを扱う関数を追加

Lambdaに関数get_parametersを追加します。
変数PARAM_PATHに使用したいパラメータ名を記載してください。

lambda_function.py
import json
import boto3

# SSM region
REGION = 'ap-northeast-1'
PARAM_PATH = '/sushi/like/rds'

def lambda_handler(event, context):

    param_dict = get_parameters(PARAM_PATH)
    print(param_dict)


# パラメータストアからパラメータを取得する関数
def get_parameters(param_path):
    ssm = boto3.client('ssm', region_name=REGION)
    response = ssm.get_parameters(
        Names=[
            param_path,
        ],
        WithDecryption=True # SecureStringを復号する場合はTrue
    )
    return json.loads(response['Parameters'][0]['Value'])

手順は以上です

Lambda実行結果

パラメータが取得できていることが確認されました。