从 Lambda 中的 dotnet 核心代码 运行 到 MySQL 的 AWS IAM 身份验证

AWS IAM Authentication to MySQL from dotnet core code running in Lambda

我有一个用 dotnet core 2.1 编写的 lambda 函数。此代码使用 Oracle MySql 提供程序 (v8.0.19)。 MySQL RDS (v5.7.26) 是 运行 配置为使用 AWSAuthenticationPlugin 的用户,如下面链接的 AWS 文章中所述。

我可以使用普通 username/password 组合连接到此 RDS,但我想改用 IAM 身份验证。本文介绍如何在 linux 服务器上使用 mysql 客户端执行此操作:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Connecting.AWSCLI.html

我已经创建了 IAM 策略,并且能够通过 RDSAuthTokenGenerator.GenerateAuthToken 在 lambda 函数中加载令牌。连接字符串构建如下:

MySqlConnection c = new MySqlConnection();
MySqlConnectionStringBuilder csb = new MySqlConnectionStringBuilder();
csb.Server = "dbinstanceName.xxx.us-xxx-1.rds.amazonaws.com";
csb.Port = 3306;
csb.Database = "Database";
csb.UserID = "DatabaseUserName";
csb.Password = RDSAuthTokenGenerator.GenerateAuthToken("dbinstanceName.xxx.us-xxx-1.rds.amazonaws.com", 3306, "DatabaseUserName");
csb.SslMode = MySqlSslMode.VerifyFull;
c.ConnectionString = csb.ConnectionString;

当我将此标记作为连接字符串中的密码值传递时,出现异常:

"errorType": "MySqlException", "errorMessage": "Authentication method 'mysql_clear_password' not supported by any of the available plugins."

这篇 MySQL 文章介绍了客户端明文可插入身份验证 (https://dev.mysql.com/doc/refman/5.7/en/cleartext-pluggable-authentication.html),但是我不知道如何在 dotnet 的 MySQL 提供程序中启用此插件。

任何人都可以建议一种在 dotnet 核心中以明文形式在连接字符串中发送此 RDS 令牌的方法吗?我似乎无法弄清楚这是如何完成的。

我能够使用不同的 MySQL 提供商完成这项工作。如果您遇到困难,请尝试改用 MySqlConnector 提供程序:

https://mysqlconnector.net/

有了这个提供程序,我不必更改上面 code/connection 字符串的任何内容。

希望这对其他人有帮助。