投稿 2024年10月27日
更新 2024年10月27日
専門用語の数:少
AWSの画面上部にある検索画面に「ssm」と入力します。
入力して出てきた「Systems Manager」をクリックします。
左上のハンバーガーボタン(三)をクリックします。
パラメータストアをクリックします。
パラメータの作成をクリックします。
名前にお好きな名前を入力します。
「/」で区切って管理しやすくすることも可能です。
※しなくても大丈夫です
利用枠は標準で問題ないです。
今回セキュアな情報を管理したいため、安全な文字列を選択します。
現在のアカウントを選択します。
デフォルトのキーを使用するので、そのままで大丈夫です。
「alias/aws/ssm」を選択します。
デフォルトのキーを使用するので、そのままで大丈夫です。
セキュアに保存したい値を入力します。
タグを設定しますが、今回は使用しません。
コスト管理やアクセスコントロールに使用します。
最後にパラメータの作成ボタンをクリックして、作成は完了です。
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);
};
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と、
Systems Managerのパラメータストア、
どちらが良いかは調べるといろいろ論争がありますが、
個人的には
自動ローテーションがいらないならSSMパラメータストア
できる限り安いほうがいいならSSMパラメータストア
それ以外はSecrets Managerという印象です。
セキュアな文字列を保存して、Lambdaから使用する方法をまとめました。
昨今いつだれでも攻撃の対象となるため、セキュリティ対策は常に行っていきましょう。
以上、ここまで見ていただきありがとうございます。
皆さまの快適な開発ライフに、ほんの少しでもお役に立てれば幸いです。
コメント一覧