Kupikir aku akan menanyakan ini sebagai timku dan aku berusaha keras untuk menentangnya.
Kami mencoba mengatur akses Aurora/RDS (Mysql) melalui IAM role dan node.
Kami telah mencoba sejumlah pendekatan berbeda, dan dua pustaka node/mysql tertentu (https://github.com/mysqljs/mysql dan https://github.com/sidorares/node-mysql2).
Kami dapat menggunakan RDS Signer untuk menghasilkan token yang sesuai, dan kami mendapatkan token yang valid kembali.
Kami kemudian mencoba terhubung ke DB seperti yang ditunjukkan di bawah ini. Kami telah mencoba dengan sejumlah pendekatan berbeda dari kedua perpustakaan di atas - sepertinya kami perlu mengaktifkan kata sandi hapus mysql (sesuai https://github.com/sidorares/node-mysql2/issues/438#issuecomment-255343793)
Kode kami (memberi atau menerima) adalah:
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();
});
Kita mendapatkan:
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)
Saya merasa ada satu langkah yang kita lewatkan, namun saya tidak tahu langkah apa itu. Adakah yang bisa memecahkan tarian aurora/rds/iam/node dan dapat memberikan petunjuk?
Terima kasih :)