Время подключения к RDS MySql из Lambda с использованием ролей IAM истекло - PullRequest
0 голосов
/ 07 апреля 2019

В настоящее время у меня установлена ​​лямбда-функция для генерации токена на основе его политики 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;
}

Я уверен, что я что-то упустил

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Вам также следует проверить правильность сетевых настроек Lambda.Особенно, если вы используете фреймворк, такой как Chalice, который используется для очистки настроек сети во время развертывания.

0 голосов
/ 07 апреля 2019

Если у вас есть тайм-аут в большинстве случаев, это означает, что у вас нет доступа к вашим услугам.Пожалуйста, проверьте вашу группу безопасности, которую вы назначили для mysql.Для целей тестирования разрешить весь входящий трафик.

...