概要
- 処理内でアクセスキーIDやシークレットアクセスキーを利用する場面で、実行環境からクレデンシャルを取得したいことがあります
- まだプレビューですが、AWS SDK for Javascript version 3で試してみました
- 最後にv2 での動作も示しました
環境1 (ローカル環境)
- Ubuntu20.04 on WSL2
- AWS CLI v2設定済み
モジュールインストール
- v2では
aws-sdk
モジュールに集約されていましたが、sdk v3では細かくモジュールが分けられているようです- 必要なモジュールのみを組み込むことでサイズ的にも実行(ロード)速度にも貢献する感じでしょうか
npm install @aws-sdk/credential-provider-node
コード
const { defaultProvider } = require('@aws-sdk/credential-provider-node');
(async () => {
const credential = await (defaultProvider())();
console.log(credential);
})();
- デフォルト動作の場合は下記の順序で走査、最初に該当する有効なクレデンシャルを返すようです
- 本番環境の場合はどの情報を採用するのかよく確認が必要ですね
- 環境変数
AWS_PROFILE
で指定されたセクションを ~/.aws/credentialsから読み取る - 環境変数
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
で指定された値 - ~/.aws/credentials の
default
セクション - インスタンスメタデータ
- 環境変数
実行結果
~/.aws/credentials の default
セクション参照パターン
(値はマスクしています)
$ node credential.js
{
accessKeyId: 'AKI*****************',
secretAccessKey: '****************************************',
sessionToken: undefined
}
環境変数 AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
を指定したパターン
$ AWS_ACCESS_KEY_ID=accesskey AWS_SECRET_ACCESS_KEY=secretkey node credential.js
{
accessKeyId: 'accesskey',
secretAccessKey: 'secretkey',
sessionToken: undefined,
expiration: undefined
}
環境2 (AWS Lambda環境)
Lambda環境へはモジュール @aws-sdk/credential-provider-node
が含まれませんので、Layersとしてデプロイして確認しました
sdk v2の場合
- 環境変数
AWS_PROFILE
、AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
を指定した場合も同じ用な挙動になります
const aws = require('aws-sdk');
console.log(aws.config.credentials.accessKeyId);
console.log(aws.config.credentials.secretAccessKey);
$ node credentialv2.js
AKI*****************
****************************************