[英]AWS EC2 IAM Role Credentials
使用適用於 AWS 的 Node sdk,我嘗試使用附加到運行我的 Node 應用程序的 EC2 實例的 IAM 角色提供的憑證和權限。
根據 sdk 文檔,這可以使用EC2MetadataCredentials
類為 sdk 分配配置屬性來完成。
在我使用 sdk 訪問 DynamoDB 實例的文件中,我有配置代碼:
import AWS from 'aws-sdk'
AWS.config.region = 'us-east-1'
AWS.config.credentials = new AWS.EC2MetadataCredentials({
httpOptions: { timeout: 5000 },
maxRetries: 10,
retryDelayOptions: { base: 200 }
})
const dynamodb = new AWS.DynamoDB({
endpoint: 'https://dynamodb.us-east-1.amazonaws.com',
apiVersion: '2012-08-10'
})
但是,當我嘗試訪問 Web 應用程序時,我總是收到一條錯誤消息:
未捕獲的 TypeError:d.default.EC2MetadataCredentials 不是構造函數
未捕獲的 TypeError:_awsSdk2.default.EC2MetadataCredentials 不是構造函數
即使這是文檔中的確切用法! 有什么我想念的小東西嗎?
從文件中刪除credentials
和region
定義會導致另一個錯誤,即:
Error: Missing region|credentials in config
我不知道這是否仍然與您相關,但是您確實需要配置EC2MetadataCredentials,因為它不在默認的ProviderChain中(在sdk中的node_loader.js中搜索新的AWS.CredentialProviderChain([。
似乎您可能擁有舊版本的aws_sdk,因為該代碼對我有用:
import AWS from 'aws-sdk';
...
AWS.config.credentials = new AWS.EC2MetadataCredentials();
我遇到了類似的問題,AWS SDK 沒有獲取憑證。 根據文檔,SDK 應該能夠自動獲取憑據。
如果您將實例配置為使用 IAM 角色,則開發工具包會自動為您的應用程序選擇 IAM 憑證,無需手動提供憑證。
我能夠通過手動獲取憑據並在需要的地方直接提供它們來解決這個問題(在我的例子中是 MongoDB Atlas):
var AWS = require("aws-sdk");
AWS.config.getCredentials(function(err) {
if (err) console.log(err.stack);
// credentials not loaded
else {
console.log("Access key:", AWS.config.credentials.accessKeyId);
}
});
來源: https ://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/global-config-object.html
雖然,為什么 SDK 不自動執行它對我來說仍然是個謎。 一旦我弄清楚,我會更新答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.