LoginSignup
3
3

More than 3 years have passed since last update.

AWS SDK for JS version3でクレデンシャルを取得する記述

Posted at

概要

環境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);
})();
  • デフォルト動作の場合は下記の順序で走査、最初に該当する有効なクレデンシャルを返すようです
  • 本番環境の場合はどの情報を採用するのかよく確認が必要ですね
    1. 環境変数 AWS_PROFILE で指定されたセクションを ~/.aws/credentialsから読み取る
    2. 環境変数 AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY で指定された値
    3. ~/.aws/credentials の default セクション
    4. インスタンスメタデータ

実行結果

~/.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としてデプロイして確認しました

image.png

sdk v2の場合

  • 環境変数 AWS_PROFILEAWS_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*****************
****************************************
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3