Systems Manager Parameter StoreのパラメータをLambdaで取得する

スポンサーリンク
ハンズオン
スポンサーリンク

はじめに

AWS Lambdaを使って機密情報や設定値を管理する際、コードや環境変数を直接埋め込んでしまうと「本当にこれで安全なのか?」と不安を感じたことはありませんか?

特にAPIキーやデータベース接続情報など、漏洩すると大きなリスクがあるデータの管理は慎重にならざるを得ません。

そんな悩みを解決するのが、AWS Systems Manager Parameter Store です。

このサービスを使えば、機密情報を簡単かつ安全に管理し、Lambda関数や他のAWSリソースで利用できます。

本記事では、Parameter Storeに格納したパラメータをLambda関数から安全に取得する方法を、具体的なコード例と設定手順とともに紹介します。

環境構成

本記事で紹介するサービスの環境構成は以下の通りです。

AWS Systems Manager Parameter Storeとは?

AWS Systems Manager Parameter Store は、アプリケーションの設定情報や機密データを安全に管理できるサービスです。

主な特徴は以下の通りです

  • 安全性: AWS Key Management Service (KMS) と統合されており、機密情報を暗号化(SecureString 型)して保存可能。
  • 柔軟性: 機密情報だけでなく、アプリケーション設定のような非機密情報(StringStringList)も管理可能。
  • スケーラブル: 大規模な環境でも設定情報を一元管理可能。
  • 統合性: AWS LambdaやEC2などのAWSサービスと簡単に連携可能。

これにより、アプリケーションコード内で機密情報をハードコードする必要がなくなり、セキュリティリスクを大幅に軽減できます。

同様のサービスでAWS Secrets Managerがあります。以下の記事でそれぞれの特徴を解説しています。

AWS Secrets ManagerとAWS Systems Manager Parameter Storeの違い

1. Parameter Storeにパラメータを保存する

パラメータの種類

AWS Systems Manager Parameter Storeでは、以下の3種類のパラメータタイプをサポートしています。

タイプ 説明
String 平文のデータを保存するシンプルな形式
StringList カンマ区切りの平文データリストを保存する形式
SecureString AWS Key Management Service (KMS) で暗号化されたデータ
APIキーや認証情報などの機密情報の管理に使用
認定資格でもSecrets Managerと絡めてよく出題されます
  1. AWSマネジメントコンソールで AWS Systems Manager > パラメータストア を開きます。
  2. パラメータの作成 をクリック。
  3. 以下を入力:
    • 名前: NormalString
    • 利用枠: 標準
    • タイプ: 文字列
    • データ型: text
    • : NormalStringValue
  4. パラメータを作成をクリックして保存します。
  5. マイパラメータに追加されます。

暗号化されたパラメータ(SecureString 型)

  1. パラメータの作成 をクリック。
  2. 以下を入力:
    • 名前: EncryptedString
    • 利用枠: 標準
    • タイプ: 安全な文字列
    • KMSのキーソース: 現在のアカウント
    • KMSキーID: alias/aws/ssm
    • : EncryptedStringValue


  3. パラメータを作成をクリックして保存します。
  4. マイパラメータに追加されます。

それぞれのarnをメモで控えておいてください。

2. Lambda関数でParameter Storeの値を取得する

次に、保存したパラメータをAWS Lambdaで取得する方法を見ていきます。

まずはLambda関数を作成していきます。

Lambda関数の作成

  1. ランタイムをpython3.13を指定してLambda関数を作成します。
  2. コードの設定
    以下のコードをコピペしてください。コピペしたらDeployをしてコードを反映させてください。
import boto3
import sys

def get_parameter(parameter_name: str, with_decryption: bool = True) -> str:
    """
    AWS Systems Manager Parameter Store からパラメータを取得します。

    :param parameter_name: 取得するパラメータの名前
    :param with_decryption: 暗号化されたパラメータの場合に復号するかどうか
    :return: パラメータの値
    """
    try:
        # SSM クライアントの作成
        ssm_client = boto3.client('ssm')

        # パラメータの取得
        response = ssm_client.get_parameter(
            Name=parameter_name,
            WithDecryption=with_decryption
        )
        return response['Parameter']['Value']
    except Exception as e:
        print(f"エラーが発生しました: {e}", file=sys.stderr)
        sys.exit(1)

def lambda_handler(event, context):
    # ユーザー入力
    parameter_name1 = "NormalString"
    parameter_name2 = "EncryptedString"

    # パラメータを取得して表示
    parameter_value1 = get_parameter(parameter_name1)
    print(f"パラメータ1の値: {parameter_value1}")
    parameter_value2 = get_parameter(parameter_name2)
    print(f"パラメータ2の値: {parameter_value2}")
  1. 設定タブ>一般設定からタイムアウトの時間を3秒から10秒に変更してください。

Lambda関数のIAMロールの設定

Lambda関数がParameter Storeからパラメータを取得するIAMポリシーが必要です。こちらのポリシーをLambda関数のIAMロールにアタッチします。

まずはLambda関数のIAMロールを開きます。

Lambda関数の設定タブ>一般設定を選択し、編集を選択してください。画面最下部にIAMロールへのリンクがあります。

IAMロールを開いたら、インラインポリシーの作成を選択して以下のIAMポリシーを作成してください。

Parameter Storeのパラメータを取得を許可するポリシー

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ssm:GetParameter",
            "Resource": [
                "arn:aws:ssm:<region>:<AWSアカウント番号12桁>:parameter/NormalString",
                "arn:aws:ssm:<region>:<AWSアカウント番号12桁>:parameter/EncryptedString"
            ]
        }
    ]
}

動作確認

Lambda関数のテストタブからテストを実行すると以下が出力されます。

通常のパラメータや暗号化されたパラメータを両方とも取得できました。

5. まとめ

AWS Systems Manager Parameter Storeを利用することで、機密情報(SecureString)から通常の設定情報(String、StringList)まで、アプリケーションで必要な情報を安全に一元管理できます。

Parameter Storeのメリット:

  • 機密情報を暗号化して保存可能
  • 非機密情報も統一的に管理可能
  • AWS Lambdaなどとの簡単な統合

特に、暗号化されたパラメータを安全に取り扱える点は、セキュリティを重視するアプリケーションにとって非常に有用です。ぜひこの記事を参考に、Lambdaでのパラメータ管理を実現してください。

Parameter StoreのSecure StringとSecret Managerの違いについて知りたい方は以下の記事を参考にしてください。

AWS Secrets ManagerとAWS Systems Manager Parameter Storeの違い

今回の記事の内容についてはAWSの認定資格でも出題される内容です。より詳しく知りたい方は参考書などで理解を深めてみてください。

 

 

タイトルとURLをコピーしました