Невозможно подключиться к AWS MySQL с помощью Java SDK и профиля роли / экземпляра IAM - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу подключиться к экземпляру RDS Aurora, используя профиль экземпляра, который использует STS для выполнения роли, поэтому мне не нужно жестко кодировать свой пароль в решении.Я получаю сообщение об ошибке, в котором говорится, что у моего пользователя нет доступа.Однако, когда я жестко кодирую строку подключения с именем пользователя и паролем, я могу подключиться, используя того же пользователя.Я проверил разрешения пользователей БД, и они верны.Я также попытался использовать все разрешения в роли.Я добавил регистрацию, чтобы проверить, что я получаю токен, и я получаю.Любые идеи или помощь приветствуется.Документация Amazon, которой я следовал: https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.Connecting.Java.html

Мой код:

public final class Database {

private static String jdbcUrl = "jdbc:mysql://" + DockerConstants.PersistenceStoreUrl + ":" + DockerConstants.PersistenceStorePort + "/dbname";

private Database() {
}

public static Connection getConnection() throws SQLException {
    return DriverManager.getConnection(jdbcUrl, setMySqlConnectionProperties());
}

static String generateAuthToken(){

    RdsIamAuthTokenGenerator generator = RdsIamAuthTokenGenerator.builder()
        .credentials(InstanceProfileCredentialsProvider.getInstance())
        .region(EC2MetadataUtils.getEC2InstanceRegion())
        .build();

    String authToken = generator.getAuthToken(
            GetIamAuthTokenRequest.builder()
            .hostname(DockerConstants.PersistenceStoreUrl)
            .port(DockerConstants.PersistenceStorePort)
            .userName(DockerConstants.PersistenceStoreUserName)
            .build());
    return authToken;
}


private static Properties setMySqlConnectionProperties() {
    Properties mysqlConnectionProperties = new Properties();
    mysqlConnectionProperties.setProperty("verifyServerCertificate","false");
    mysqlConnectionProperties.setProperty("useSSL", "false");
    mysqlConnectionProperties.setProperty("user", DockerConstants.PersistenceStoreUserName);
    mysqlConnectionProperties.setProperty("password",generateAuthToken());

    return mysqlConnectionProperties;
}

}

...