【AWS】SSMを使ってLambdaでセキュアな文字列を扱う

投稿 2024年10月27日

更新 2024年10月27日

専門用語の数:

【AWS】SSMを使ってLambdaでセキュアな文字列を扱う

~ 目次 ~

パラメータストア作成方法

Lambda

パラメータストアとSecrets Manger

まとめ

パラメータストア作成方法

Systems Managerを開く

検索

AWSの画面上部にある検索画面に「ssm」と入力します。

検索結果

入力して出てきた「Systems Manager」をクリックします。

パラメータストアを作成

初期画面

左上のハンバーガーボタン(三)をクリックします。

ハンバーガーメニュー

パラメータストアをクリックします。

パラメータ

パラメータの作成をクリックします。

パラメータを作成

パラメータの詳細

名前

名前にお好きな名前を入力します。

「/」で区切って管理しやすくすることも可能です。
※しなくても大丈夫です

利用枠

利用枠は標準で問題ないです。

タイプ

今回セキュアな情報を管理したいため、安全な文字列を選択します。

KMS キーソース

現在のアカウントを選択します。
デフォルトのキーを使用するので、そのままで大丈夫です。

KMS キー ID

「alias/aws/ssm」を選択します。
デフォルトのキーを使用するので、そのままで大丈夫です。

値

セキュアに保存したい値を入力します。

タグ

タグ

タグを設定しますが、今回は使用しません。

コスト管理やアクセスコントロールに使用します。

最後にパラメータの作成ボタンをクリックして、作成は完了です。

Lambda

取得処理

Lambdaからは下記処理で取得できます。

import {GetParameterCommand, SSMClient} from "@aws-sdk/client-ssm"; export const handler = async (event, context, callback) => { // パラメータストアの名前定義 const ssmParameterName = "/lambda/api-key"; // SSMクライアント const ssmClient = new SSMClient({ region: "ap-northeast-1", }); // パラメータストアに保存したセキュアな文字列取得 const apiKey = await ssmClient .send( new GetParameterCommand({ Name: ssmParameterName, WithDecryption: true, }), ) .then((response) => response.Parameter.Value); console.log("APIキー", apiKey); };

IAMポリシー

Lambdaに必要なIAMポリシーは以下の通りです。

Decryptは暗号化されたものを復号するため、
GetParameterがパラメータストアから取得する権限です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:Decrypt", "ssm:GetParameter" ], "Resource": [ "arn:aws:kms:ap-northeast-1:{アカウントID}:key/{KMSキーID}", "arn:aws:ssm:ap-northeast-1:{アカウントID}:parameter/lambda/api-key" ] } ] }

パラメータストアとSecrets Manager

セキュアな文字を保存する際にSecrets Managerと、

Systems Managerのパラメータストア、

どちらが良いかは調べるといろいろ論争がありますが、

個人的には


自動ローテーションがいらないならSSMパラメータストア

できる限り安いほうがいいならSSMパラメータストア


それ以外はSecrets Managerという印象です。

まとめ

セキュアな文字列を保存して、Lambdaから使用する方法をまとめました。

昨今いつだれでも攻撃の対象となるため、セキュリティ対策は常に行っていきましょう。


以上、ここまで見ていただきありがとうございます。

皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。

コメント一覧

コメントがまだありません

コメントを投稿してみる

コメント(必須※500文字以内)

お名前(必須※30文字以内)

※日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)