私はこれを私のチームとして頼んで、私はこれに対して頭を打っています。ノードからRDS /オーロラと話すことに固執しました
私は、IAMロールとノードを介してオーロラ/ RDS(Mysql)アクセスを設定しようとしています。
私たちはいくつかのアプローチと、2つの特定のノード/ mysqlライブラリ(https://github.com/mysqljs/mysqlとhttps://github.com/sidorares/node-mysql2)を試しました。
RDS署名者を使用して適切なトークンを生成でき、有効なトークンを取得できます。
次に、以下に示すようにDBに接続しようとします。私たちは、上記のライブラリの両方から多くの異なるアプローチを試してみた - それは我々が(https://github.com/sidorares/node-mysql2/issues/438#issuecomment-255343793あたりなど)mysqlの明確なパスワードを有効にする必要があると思わ
私たちのコードは(与えるか、または取る)である:
var AWS = require('AWS-SDK');
AWS.config.update({ "accessKeyId": "{valid access key}", "secretAccessKey": "{valid secret access key}", "region": "eu-west-1" });
var mysql = require('mysql2');
var signer = new AWS.RDS.Signer({
credentials: new AWS.SharedIniFileCredentials({profile: 'default'}),
region: 'eu-west-1',
hostname: '{rds database host}',
port: 3306,
username: '{rds database username}'
});
signer.getAuthToken({}, function(err, token){
console.log(token);
var connection = mysql.createConnection({
host : '{rds database host}',
user : '{rds database username}',
password : token,
port : 3306,
database: '{rds database}'
,authSwitchHandler: function ({pluginName, pluginData}, cb) {
if (pluginName === 'mysql_clear_password') {
// https://dev.mysql.com/doc/internals/en/clear-text-authentication.html
var password = dbConf.password + '\0';
var buffer = Buffer.from(password);
cb(null, buffer);
} else {
const err = new Error(`Unknown AuthSwitchRequest plugin name ${pluginName}`);
err.fatal = true;
cb(err);
}
}
});
connection.connect(function(err) {
if (err) {
console.error('Database connection failed: ' + err.stack);
return;
}
console.log('Connected to database.');
});
connection.end();
});
Database connection failed: Error: Access denied for user '{dbuser}'@'{ip address}' (using password: YES)
at Packet.asError (C:\Users\Terry.Brown\Desktop\iam-rds-auth\node_modules\mysql2\lib\packets\packet.js:703:13)
at ClientHandshake.Command.execute (C:\Users\Terry.Brown\Desktop\iam-rds-auth\node_modules\mysql2\lib\commands\command.js:28:22)
at Connection.handlePacket (C:\Users\Terry.Brown\Desktop\iam-rds-auth\node_modules\mysql2\lib\connection.js:515:28)
at PacketParser.onPacket (C:\Users\Terry.Brown\Desktop\iam-rds-auth\node_modules\mysql2\lib\connection.js:94:16)
at PacketParser.executeStart (C:\Users\Terry.Brown\Desktop\iam-rds-auth\node_modules\mysql2\lib\packet_parser.js:77:14)
at Socket.<anonymous> (C:\Users\Terry.Brown\Desktop\iam-rds-auth\node_modules\mysql2\lib\connection.js:102:29)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:250:12)
at readableAddChunk (_stream_readable.js:237:11)
は、私たちが欠けているステップがありますように感じるが、私はそれが何であるか見当がつかない:
は、我々が得ます。誰かがオーロラ/ rds/iam/nodeのダンスを解決し、どんな指針を与えることができますか?
ありがとう:)
「ssl:Amazon RDS」も追加され、authSwitchHandlerに入ったのは確かですが、まだアクセスが拒否されています。 –
* "有効なものを取得しました" *チェックだけ:どのように "有効"と判断していますか? –
AWS cliツールとコード経由でトークンを生成しました。トークン内の構造とセマンティクスは同じように見えます。私は 'valid'がおそらくより適切な用語だと思う - それは構文的に正しいと思われる - それが有効であり働いているかどうか、私たちは明らかにまだ分かっていない。 –