无法使用Java SDK和IAM角色/实例配置文件

时间:2018-09-12 16:03:08

标签: mysql amazon-web-services jdbc amazon-iam aurora

我想使用实例配置文件连接到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;
}

}

0 个答案:

没有答案