LoginSignup
1
0

More than 5 years have passed since last update.

EC2に割り当てられたIAM Roleのcredential情報からAccessKeyId, SecretAccesskeyを取得するgulp task

Posted at

EC2インスタンスに割り当てられたIAM Role権限で、EC2上でgulp.taskを動作させる場合の一時AccessKeyId, SecretAccessKeyの取得方法.

gulpの拡張タスクなどで、accessKeyId, SecretAccessKeyを指定するよう要求されるtaskがあります。IAM ユーザとしてアクセスキー等が発行されていない場合でも、EC2インスタンスに割り当てられたIAM Roleから一時アクセスキーを取得し、実行することができるようになります。

var AWS = require("aws-sdk");

gulp.task('updateCredentials', function() {
  return new Promise((resolve, reject)=>{
    var metadata = new AWS.MetadataService();
      metadata.request('/latest/meta-data/iam/security-credentials/',function(err,rolename){
        if(err) reject(err);
        // console.log(rolename);
        metadata.request('/latest/meta-data/iam/security-credentials/'+rolename,function(err,data) {
          if(err) reject(err);
          // console.log(data);
          var credentials = JSON.parse(data);
          AWS.config.update({
            accessKey: credentials.AccessKeyId,
            secretAccessKey: credentials.SecretAccessKey,
            sessionToken: credentials.Token,
          });
          console.log('update credentials.');
          resolve();
        });
    });
  });
});

gulpで直せすaccessKeyId, SecretAccessKeyを参照する必要がない場合は、以下のような方法で
credentialsを更新します。

gulp.task('updateCredentialsEC2', function() {
  AWS.config.credentials = new AWS.EC2MetadataCredentials({
    // httpOptions: { timeout: 5000 }, // 5 second timeout
    // maxRetries: 10, // retry 10 times
    // retryDelayOptions: { base: 200 } // see AWS.Config for information
  });
  AWS.config.credentials.refresh(function() {
    return Promise.resolve();
  });
});
1
0
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
1
0