У меня есть AWS RDS DB с MySQL 5.6.39, с включенной аутентификацией IAM DB.
Прежде всего, я успешно завершил учебное пособие : настройка лямбда-функции для доступа к Amazon RDS вAmazon VPC , и это было моей отправной точкой для следующих шагов.
Я хочу войти в систему с учетными данными IAM и так, следуя this и this учебники я сделал:
Когда я создал экземпляр RDS MySQL, я выбрал Enabling IAM database authentication
.
Создал пользователя с именем lambda
:
CREATE USER 'lambda' IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';
GRANT ALL PRIVILEGES ON test_db.* TO 'lambda'@'%';
FLUSH PRIVILEGES;
Создал политику IAM и прикрепил ее к роли, которую я использовал в качестве роли «Выполнение» для своей лямбда-функции:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"<DB-ARN>/lambda"
]
}
]
}
Создана лямбда-функция:
import sys
import boto3
import logging
import pymysql
#rds settings
rds_host = "<RDS-ENDPOINT>"
username = "lambda"
db_name = "test_db"
logger = logging.getLogger()
logger.setLevel(logging.INFO)
client = boto3.client('rds',region_name='eu-west-2')
token = client.generate_db_auth_token(rds_host,3306, name)
ssl = {'ca': 'rds-combined-ca-bundle.pem'}
logger.info("token: "+ token)
conn = pymysql.connect(rds_host, user=username, passwd=token, db=db_name, connect_timeout=5, ssl=ssl)
logger.info("SUCCESS: Connection to RDS mysql instance succeeded")
def handler(event, context):
...
Я получил следующую ошибку:
error: (1045, "Access denied for user 'lambda'@'<LAMBDA_IP>' (using password: YES)")
В попытке найтиЕсли это была ошибка Python, я использовал AWS CLI из экземпляра EC2 с прикрепленной политикой.
Получить токен:
aws rds generate-db-auth-token --hostname <RDS-ENDPOINT> --port 3306 --username lambda
Подключитесь к БД, используя токен, полученный на последнем шаге:
mysql -h <RDS-ENDPOINT> -u lambda --enable-cleartext-plugin --password='<TOKEN>'
Я получил ту же ошибку:
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'lambda'@'<EC2_IP>' (using password: YES)