16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWS.config.updateでアクセスキーが設定できないときに見るページ

Posted at

ドハマリしたので覚書。

やりたいこと

AWS.config.updateでAWSへのアクセスキーをセットしたい。
-> STSのassumeRoleでクロスアカウントアクセスしたかった。

よく見るコード

AWS.config.update({
  accessKeyId: "AccessKeyId",
  secretKey: "SecretAccessKey",
  region: "region"
})

起きたこと

.envrcに設定しているprofileが勝って、意図したアカウントにつながらない。

アカウントが変わっているかを確認する方法

こんな感じでaccess keyが変わっているか確認すれば良い。

console.log(AWS.config.credentials.accessKeyId)
AWS.config.update({
  accessKeyId: "AccessKeyId",
  secretKey: "SecretAccessKey",
  region: "region"
})
console.log(AWS.config.credentials.accessKeyId)

意図したとおりに動いたコード

  AWS.config.update({
    credentials: new AWS.Credentials(
      "AccessKeyId",
      "SecretAccessKey"
    ),
    region: "region"
  })

AWS.Credentialsをインスタンス化して入れる方法だと動く。

そもそもの問題

https://github.com/aws/aws-sdk-js/blob/master/lib/config.d.ts#L192-L209 を見ると、よく見かけるコードの方は非推奨扱いになっている。

export abstract class ConfigurationOptions {
    /**
     * AWS access key ID.
     *
     * @deprecated
     */
    accessKeyId?: string
    /**
     * AWS secret access key.
     *
     * @deprecated
     */
    secretAccessKey?: string
    /**
     * AWS session token.
     *
     * @deprecated
     */
    sessionToken?: string

STSでクロスアカウントアクセスするコード

こうすればよさそう。

const AWS = require('aws-sdk')

const arn = 'arn:aws:iam::9999999:role/EXAMPLE'
const sts = new AWS.STS()
sts.assumeRole({
  RoleArn: arn,
  RoleSessionName: 'test'
}).promise().then(data => {
  AWS.config.update({
    credentials: new AWS.Credentials(
      data.Credentials.AccessKeyId,
      data.Credentials.SecretAccessKey,
      data.Credentials.SessionToken
    ),
    region: 'us-west-2'
  })
  const docClient = new AWS.DynamoDB.DocumentClient()
  return docClient.get({
    TableName: 'Test',
    Key: {
      ID: 'hello'
    }
  }).promise()
})
.then(data => console.log(data))
.catch(e => console.log(e))

16
7
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
16
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?