2017-09-22 7 views
0

私はこれを私のチームとして頼んで、私はこれに対して頭を打っています。ノードからRDS /オーロラと話すことに固執しました

私は、IAMロールとノードを介してオーロラ/ RDS(Mysql)アクセスを設定しようとしています。

私たちはいくつかのアプローチと、2つの特定のノード/ mysqlライブラリ(https://github.com/mysqljs/mysqlhttps://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のダンスを解決し、どんな指針を与えることができますか?

ありがとう:)

+0

「ssl:Amazon RDS」も追加され、authSwitchHandlerに入ったのは確かですが、まだアクセスが拒否されています。 –

+0

* "有効なものを取得しました" *チェックだけ:どのように "有効"と判断していますか? –

+0

AWS cliツールとコード経由でトークンを生成しました。トークン内の構造とセマンティクスは同じように見えます。私は 'valid'がおそらくより適切な用語だと思う - それは構文的に正しいと思われる - それが有効であり働いているかどうか、私たちは明らかにまだ分かっていない。 –

答えて

1

コマンドラインから作業しましたか?誰かがthisを見つけるまで、私はそれで苦労しました。

https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pemをダウンロードし、コマンドラインに--ssl-ca=rds-combined-ca-bundle.pemを追加してください。

AWSのウォークスルーではないように(少なくとも私たちのTAMはそれをそこに置くつもりです)。

それは、コマンドライン上で動作する場合、その後、あなたの接続設定オブジェクトへthisを追加してみてくださいは:

ssl: { 
     ca: fs.readFileSync("/tmp/rds-combined-ca-bundle.pem") 
    }, 

さらにあなたを取得する必要があります。

関連する問題