はじめに
シークレット系の情報をAWSのパラメータストアに格納し,それをNode.jsで呼び出してみました。
この記事はその際の備忘録になります。
誤っている箇所や修正したほうがいい箇所などありましたらコメントいただけますと幸いです。
AWSのパラメータストアとは
AWS System Manager の機能の一つ。
パスワードなどのシークレット系の情報をセキュアに保存することができます。
必要なモジュールのインストール
AWS SDK for JavaScript をインストールします。
$ npm install aws-sdk
AWS SDK for JavaScript とは,AWSのサービスをjavascriptで使用するためのAPIになります。
今回はこのAPIを使用して,パラメータストアから値を取得します。
AWSの認証情報の設定
Node.jsでAWSのサービスを利用するに当たって,認証情報を設定する必要があります。
認証情報の設定方法はいくつかありますが,今回は ~/.aws/credentials
から読み取る方法を使用したいと思います。
今回 ~/.aws/credentials
には,defaultプロファイルとは別に,privateアカウントのプロファイルも記述しておきます。
[default]
aws_access_key_id = <ACCESS_KEY_ID>
aws_secret_access_key = <SECRET_ACCESS_KEY>
[private]
aws_access_key_id = <PRIVATE_ACCOUNT_ACCESS_KEY_ID>
aws_secret_access_key = <PRIVATE_ACCOUNT_SECRET_ACCESS_KEY>
また,~/.aws/config
ファイルには,region
を記述しておきます。
[default]
output = json
region = ap-northeast-1
[profile private]
output = json
region = ap-northeast-1
AWSで新規パラメータを作成
公式ドキュメントを参考に,新規パラメータを作成します。
今回は,~/.aws/credentials
や ~/.aws/config
にprivateというプロファイル名で記述したAWSアカウントのパラメータストアに,sampleというパラメータ名で 'sample' という文字列を保存しました。
実行ファイル作成
上記で作成したsampleというパラメータを取得します。
実行ファイルの完成形
// aws-sdk をロードする前に,環境変数をセットする
// ~/.aws/config の情報を参照できるようにする
process.env.AWS_SDK_LOAD_CONFIG = true;
// 使用するprofileを指定する
process.env.AWS_PROFILE = 'private';
// 環境変数セット完了
// aws-sdk モジュールを読み込む
const AWS = require("aws-sdk");
// 新規 AWS.SSM class を作成
const ssm = new AWS.SSM();
// 'sample' という名前のパラメータを取得
const params = {
Name: 'sample',
WithDecryption: true
};
ssm.getParameter(params, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
下記で各処理について説明していきます。
環境変数の設定
// aws-sdk をロードする前に,環境変数をセットする
// ~/.aws/config の情報を参照できるようにする
process.env.AWS_SDK_LOAD_CONFIG = true;
// 使用するprofileを指定する
process.env.AWS_PROFILE = 'private';
// 環境変数セット完了
// aws-sdk モジュールを読み込む
const AWS = require("aws-sdk");
aws-sdk
モジュールを読み込む前に,環境変数をセットします。
そうすることで,セットした環境変数の設定を元に aws-sdk
モジュールの読み込みが行われます。
セットする環境変数
新規 AWS.SSM クラスを作成
// 新規 AWS.SSM class を作成
const ssm = new AWS.SSM();
AWS.SSM クラスは,Node.js内で AWS System Manager の機能を利用するためのクラスになります。(参考)
パラメータを取得
// 'sample' という名前のパラメータを取得
const params = {
Name: 'sample',
WithDecryption: true // パラメータの値が暗号化されていた場合は復号
};
ssm.getParameter(params, (err, data) => {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
AWS.SSM クラスに用意されている getParameter
メソッドを使用して,パラメータストアから値を取得します。(参考)
paramsに設定できるオプション
- Name : パラメータ名
- WithDecryption : パラメータの値が暗号化されていた場合に復号するかどうかを指定(パラメータの値が文字列または文字列リストの場合は,このオプションは無視されます)
実行
$ node sample.js
{
Parameter: {
Name: 'sample',
Type: 'String',
Value: 'sample',
Version: 1,
LastModifiedDate: 2021-03-23T07:45:35.557Z,
ARN: 'arn:aws:ssm:ap-northeast-1:xxxxxxxxxxxx:parameter/sample',
DataType: 'text'
}
}
参考
AWS 公式
- AWS Systems Manager パラメータストア
- Node.js での認証情報の設定
- Getting started in Node.js
- SDK for JavaScript のセットアップ
- What Is the AWS SDK for JavaScript?