В настоящее время у меня установлена лямбда-функция для генерации токена на основе его политики IAM.Я успешно генерирую токен, но когда я пытаюсь использовать его для подключения к RDS MySql (5.7.xx), он просто истекает.
Политика IAM (которая связана с ролью, привязанной к лямбдеfunction)
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"rds-db:connect"
],
"Resource": [
"arn:aws:rds-db:us-east-1:<account-id>:dbuser:<db-resource-id>/lambda"
]
}
]
}
Пользователь, созданный в БД:
create user 'lambda' identified with AWSAuthenticationPlugin as 'RDS';
grant all privileges on cbr.* to 'lambda'@'%';
flush privileges;
Вот фрагменты кода для того, что я пытался сделать до сих пор:
private String generateAuthToken() {
RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
.credentials(new DefaultAWSCredentialsProviderChain())
.region(region)
.build();
String authToken = generator.getAuthToken(
GetIamAuthTokenRequest.builder()
.hostname(hostName)
.port(Integer.parseInt(port))
.userName(username)
.build());
return authToken;
}
public String test() throws SQLException {
String currentTime = "Not Set";
String jdbcUrl = "jdbc:mysql://" + hostName + ":" + port;
String token = generateAuthToken();
Connection conn = DriverManager.getConnection(jdbcUrl, username, generateAuthToken());
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("SELECT NOW()");
if (rs.next()) {
currentTime = rs.getString(1);
}
return currentTime;
}
Я уверен, что я что-то упустил