查看: 12181|回复: 0

[编程与开发类] 在云上如何安全合规地配置数据库连接信息

[复制链接]

525

主题

727

帖子

13万

积分

奇瑰技术组

Rank: 7Rank: 7Rank: 7

G币
122228
信用
1814
体力
2434

技术大神论坛版主分享大神

发表于 2019-8-19 18:40:49 | 显示全部楼层 |阅读模式
在云上如何安全合规地配置数据库连接信息
概述


在之前文章 如何在阿里云上安全的存放您的配置 - 续 中,我们讲述了云上安全存放配置的方法。基于前文原理,本文将以代码示例方式讲解如何基于配置中心产品 ACM 将应用配置( 以 数据库连接配置 为例)从应用程序代码中解耦,从而达到以下目的:
  • 安全合规:应用程序和生产环境上将不需要发布和持久化任何程序敏感信息
  • 敏捷发布:数据库连接串配置修改动态生效,不需要程序重新发布甚至重启;


示例程序架构和准备工作


文章中的示例将分为以下几个步骤:
  • 配置 ACM和 RAM,设置 ECS RAM Role,并进行 ACM 授权,来授权 ECS 上的应用免 AK/SK(即 AccessKey/SecretKey) 来调用 ACM;
  • 读取配置程序编写:使用 ACM Java SDK 动态读取配置内容,来进行数据库配置。其中:
  • 程序中不含任何敏感配置,如数据库连接串,阿里云 AK/SK等
  • 数据库连接串在 ACM 上动态刷新,应用不停机。

程序代码架构如下图所示:


配置 ECS RAM Role


在ACM程序访问中,用户可设置 AccessKey、SecretKey 属性的方式来访问 ACM 产品,但是在本文中推荐通过“ECS 实例角色”的方式来访问ACM。该方式动获取临时凭证,提高安全性和降低运维成本,凭证周期由 ACM SDK 自动维护,应用运行时只需设置 JVM 参数“-Dram.role.name=ramRoleName”,ramRoleName”, ramRoleName 为授予该 ECS 的 RAM 角色名称,如 ECS-RAM。运行命令如下:
引用
java -jar -Dram.role.name=ECS-RAM sample-1.0-SNAPSHOT-jar-with-dependencies.jar



关于如何设置 ECS 实例角色,请参考“ECS 实例角色”文章。为减少文章篇幅,本文不赘述了。

读取配置程序编写


该章节分为三个部分:
  • 在 ACM 中初始化 ACM 连接,用户仅需填写配置信息,无需填写 AK/SK 敏感信息;
  • 读取 ACM 配置,并监听配置变化;
  • 相关业务代码编写,根据需求建立数据库连接并查询数据;


在程序中初始化 ACM,并读取相关配置

  • namespace:命名空间 ID,在控制台“命名空间详情”的“命名空间ID”处可以获取到
  • endpoint: ACM 连接域,在控制台“命名空间详情”的“End Point”处可以获取到

引用
private void initACM() {
    Properties properties = new Properties();
    String namespace = "1ca01ca0-11b0-1e01-0df1-d1010101bc10";
    String endpoint = "acm.aliyun.com";
    properties.put("endpoint", endpoint);
    properties.put("namespace", namespace);
    ConfigService.init(properties);
}





通过 ACM 获取配置并监听配置变化


获取数据库连接配置的内容,并且添加配置监听 器。当数据库连接配置的内容需要变更,在 ACM 控制台修改后,程序实时接收到新的内容,新的数据库连接也实时生效,不中断程序的运行。
  • dataId:刚刚新建配置时 Data ID 所填写的值
  • group:刚刚新建配置时 Group 所填写的值,默认为“DEFAULT_GROUP”,隐藏在“更多高级选项”中

引用
private void initJDBCProperties() throws ConfigException {
    String dataId = "com.alibaba.cloud.acm:jdbc-sample.properties";
    String group = "DEFAULT_GROUP";
    properties = ConfigService.getConfig2Properties(dataId, group, 3000);
    // 添加配置监听
    ConfigService.addListener(dataId, group, new ConfigChangeListener() {
        @Override
        public void receiveConfigInfo(String content) {
            Properties properties = new Properties();
            try {
                properties.load(new StringReader(content));
            } catch (IOException e) {
                LOGGER.error("addListener", e);
            }
                SampleApp.this.properties = properties;
        }
    });
}




建立数据库连接并查询数据


从 ACM 获取到的连接数据库所需的地址、用户名、密码,通过 MySQL JDBC 驱动包“mysql-connector-java”与 MySQL 服务建立连接。接着,再查询“user”表的总记录数,返回给函数调用者。
注: 程序中使用的连接信息为ACM中保存的最新的数据库连接信息,连接信息通过上面的ACM的监听配置程序进行动态刷新,从而保证为最新。
引用
private int count() {
    String url = properties.getProperty("jdbc.url");
    String username = properties.getProperty("jdbc.username");
    String password = properties.getProperty("jdbc.password");
    Connection connection = null;
    Statement statement = null;
    ResultSet resultSet = null;
    try {
        connection = DriverManager.getConnection(url, username, password);
        statement = connection.createStatement();
        resultSet = statement.executeQuery("select count(*) from `user`");
        if (resultSet.next()) {
            return resultSet.getInt(1);
        }
    } catch (SQLException e) {
        LOGGER.error("count", e);
    } finally {
        close(connection, statement, resultSet);
    }
    return 0;
}





测试运行


如果你按照本片文章前面工作,完成了 ECS RAM Role 设置和授权以后,可在不设置任何 AK/SK 情况下,将程序实例打包成可执行 jar 后,上传到对应的 ECS 环境上运行即可。当程序运行时,如 如何在阿里云上安全的存放您的配置 - 续 文章所描述的,程序将自动获取临时凭证访问 ACM,凭证周期由 ACM SDK 自动维护。应用运行时只需设置 JVM 参数“-Dram.role.name=ramRoleName”,ramRoleName”,ramRoleName 为授予该 ECS 的 RAM 角色名称,如 ECS-RAM。运行命令如下:
引用
java -jar -Dram.role.name=ECS-RAM sample-1.0-SNAPSHOT-jar-with-dependencies.jar

本代码示例通过 ACM 控制台配置 JDBC 的连接属性,再使用 ACM Java SDK 读取配置内容,与 MySQL 建立连接,查询“用户”数据,最后将结果打印出来,控制台输出内容如下:
引用
总记录数: 9

注:如果是在您自己电脑上或本地测试,需要手动设置 AccessKey、SecretKey 属性,才可以访问 ACM 产品,目前支持三种设置方式,本示例可使用环境变量,如下:
引用
spas_accessKey=xxx
spas_secretKey=xxx






上一篇:seo作弊有哪些方法呢,站群外链建设
下一篇:SEO优化排名的基础
我们尊重所有会员!只要你付出了,大家都会看在眼里,态度决定一切!
感谢您对奇瑰资源论坛的关注与支持!希望各位朋友帮忙一起宣传下社区,好社区需要大家的推广.谢谢!
目前,很多网站和论坛盗用或者利用奇瑰资源论坛免费发布的资源搞所谓的vip或者销售,请谨防上当受骗!
一分钱一分货,好货不便宜,便宜没好货,记住这句,你上当受骗的概率基本为0,贪便宜就已经为你受骗打下基础!
特别说明:奇瑰资源论坛是正规网站,严格遵守相关法律法规,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

举报处理中心|站长论坛 ( 粤ICP备18094825号-1|网站地图 知道创宇云安全

© 2014-2019 Qi Gui.  Powered by Discuz! X3.4

1
QQ