Rundeck社区版部署ECS Fargate时用户丢失及替代管理方案咨询
Rundeck社区版用户管理替代方案(解决容器更新用户丢失问题)
挂载持久化存储保留realm.properties
这是最直接的现有方案优化:在ECS任务定义里,把/home/rundeck/server/config目录挂载到EFS、EBS或者NAS这类持久化存储上。容器更新时,存储卷里的realm.properties不会被重置,用户信息就能保留。不需要改认证逻辑,只需要调整容器挂载配置。JDBC数据库存储用户信息
把用户、角色、权限存在外部数据库(比如MySQL、PostgreSQL),数据库用持久化实例(比如RDS),容器更新完全不影响数据。需要修改shiro.ini配置替换默认的PropertiesRealm:- 在
shiro.ini的[main]段添加JDBCRealm配置,示例:[main] # 配置数据源 dataSource = com.mysql.cj.jdbc.MysqlDataSource dataSource.url = jdbc:mysql://your-rds-host:3306/rundeck_auth?useSSL=false&serverTimezone=UTC dataSource.user = rundeck_db_user dataSource.password = your-db-pass # 配置JDBCRealm jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm jdbcRealm.dataSource = $dataSource # 认证查询:根据用户名查加密后的密码 jdbcRealm.authenticationQuery = SELECT password FROM users WHERE username = ? # 角色查询:根据用户名查所属角色 jdbcRealm.userRolesQuery = SELECT role_name FROM user_roles WHERE username = ? # 权限查询:根据用户名查权限 jdbcRealm.permissionsQuery = SELECT permission FROM user_permissions WHERE username = ? # 配置密码加密匹配器(比如MD5,和你存储密码的加密方式一致) credentialsMatcher = org.apache.shiro.authc.credential.HashedCredentialsMatcher credentialsMatcher.hashAlgorithmName = MD5 credentialsMatcher.hashIterations = 2 jdbcRealm.credentialsMatcher = $credentialsMatcher # 替换默认Realm securityManager.realms = $jdbcRealm - 在数据库中创建对应的表:
users表:username(主键)、password(加密后的密码)user_roles表:username、role_nameuser_permissions表:username、permission
- 在
使用嵌入式H2数据库(仅测试环境)
Rundeck默认用嵌入式H2存储一些数据,也可以配置它来存用户信息。但要把H2的存储文件挂载到持久化卷,不然容器更新还是会丢。配置方式类似JDBC,只是数据源换成H2的JDBC URL,比如jdbc:h2:/home/rundeck/server/data/rundeck_auth;DB_CLOSE_ON_EXIT=FALSE,然后挂载/home/rundeck/server/data目录到持久化存储。不过H2不适合生产环境,只建议测试用。
内容的提问来源于stack exchange,提问作者skp15
相关产品推荐
相关产品推荐

