#mysql #node.js #aws-lambda #amazon-rds #amazon-iam
#mysql #node.js #aws-lambda #amazon-rds #amazon-iam
Вопрос:
Я следовал этому руководству [1] для подключения к кластеру Aurora RDS из функции JavaScript lambda с использованием аутентификации IAM. Я могу получить токен аутентификации, но не могу использовать токен для подключения к базе данных. Кроме того, я следовал этим инструкциям [2], чтобы получить токен аутентификации из CLI, а затем использовать токен для подключения командного инструмента ‘mysql’. Все хорошо из командной строки, это как бы говорит мне, что я правильно выполнил все шаги из [1].
Однако я застрял. Хотя я могу получить токен аутентификации из моего lambda, я не могу использовать его для подключения к моей базе данных. Мой lambda написан на Java Script, а используемый мной драйвер mysql — [3]. Этот драйвер, похоже, несовместим с аутентификацией IAM. Вот почему я думаю, что:
-
в [1] приведен пример для Python, где используется драйвер mysql. В примере инструкции указывают использовать
auth_plugin="mysql_clear_password"
и драйвер, который я использую [3], из документов, я не могу найти опцию, которая соответствует «auth_plugin». Чем ближе, тем больше флаг с именем PLUGIN_AUTH, но документы для [3] говорят:
Uses the plugin authentication mechanism when connecting to the MySQL server. This feature is not currently supported by the Node.js implementation so cannot be turned on. (Default off)
Похоже, что Node не поддерживает это.
Это фрагмент моего кода:
const mysql = require('mysql');
var config = {
host : theHost,
user : theUser,
password : token, --------> token previously generated
database : theDataBase
auth_plugin: "mysql_clear_password", --------> this option is not really part of driver [3], I was just trying
something out
ssl: {
ca: '/var/task/rds-combined-ca-bundle.pem' ----------> cert downloaded from [4]
}
};
var connection = mysql.createConnection(config);
Ошибка, которую я получаю, заключается в:
ERROR error connecting: Error: unable to get local issuer certificate
Я проверил, что «/ var /task / rds-combined-ca-bundle.pem» существует. Это часть zip-пакета для моей функции.
Если я удаляю ключ «ssl» из объекта подключения, я получаю:
error connecting: Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol
requested by server; consider upgrading MySQL client
В документах AWS я не могу найти хороший пример использования аутентификации IAM из функции Lambda, реализованной в JavaScript. Итак, мои вопросы:
- Если есть, можете ли вы привести пример функции Lambda, реализованной в Java Script, о том, как подключиться к Aurora с использованием аутентификации IAM?
- Вы знаете, действительно ли [3] не поддерживает аутентификацию IAM?
- Существует ли какой-либо другой драйвер mysql, который действительно совместим с аутентификацией IAM?
Спасибо!
Ссылки:
[3] https://www.npmjs.com/package/mysql
[4]https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
Комментарии:
1. Посмотрите этот пример, я думаю, он должен работать с
mysql2
драйвером. cloudonaut.io /…
Ответ №1:
немного поздно, но в библиотеке mysql есть сертификаты rds в качестве стандарта
к счастью, для решения этой проблемы добавьте «ssl: «Amazon RDS»», который будет использовать встроенные сертификаты
итак, что-то вроде этого
const signer = new AWS.RDS.Signer({
'region': region,
'username': username,
'hostname':host,
'port': port
});
let token = await signer.getAuthToken({})
var config = {
host : host,
user : username,
password : token, --------> token previously generated
database : database
ssl: "Amazon RDS"
};
подробнее см. Документы mysql
https://github.com/mysqljs/mysql#ssl-options
SSL options
The ssl option in the connection options takes a string or an object. When given a string, it uses one of the predefined SSL profiles included. The following profiles are included:
"Amazon RDS": this profile is for connecting to an Amazon RDS server and contains the certificates from https://rds.amazonaws.com/doc/rds-ssl-ca-cert.pem and https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
ps: слово мудрого, aws rds для подключения к узлу немного сложно, есть много других обходных путей, таких как разрешения, включение iam, предоставление пользователям iam возможности следить за, создайте вопрос и отправьте мне сообщение, если у вас есть другие проблемы, и я отвечу на них там