堡垒机架构
- 所有人包括运维、开发等任何需要访问业务系统的人员,只能通过堡垒机访问业务系统
- 回收所有对业务系统的访问权限,做到除了堡垒机管理人员,没有人知道业务系统任何机器的登录密码
- 网络上限制所有人员只能通过堡垒机的跳转才能访问业务系统
- 确保除了堡垒机管理员之外,所有其它人对堡垒机本身无任何操作权限,只有一个登录跳转功能
- 确保用户的操作纪录不能被用户自己以任何方式获取到并篡改
流程分析:
首先,host 与remote_user相互之间没有直接关联,但是要登陆远程主机,要通过用户名密码。一个主机可以有多个远程用户,一个远程用户也可以对应多个主机,这两者之间形成了多对多的关系。就有了如下图形:
group与host之间关联,但同时又要知道对应的remote_user,所group与bind_host之间关联,group可以对应多个host,host分别对就不同remote_user,group对应多个bind_host,一个host与remote_user可以同时属于多个group组,所以group与bind_host又是多对多的关系。如下图形:
堡垒机账户user_profile想直接连某个host与对应remote_user,user_profile可以连多个bind_host,一个bind_host可以让多个user_profile连接,user_profile与bind_host形成了多对多关系。如下图形:
user_profile连接group时,可以允许连接多个group,group又可以让多个user_profile连接,user_profile与group形成多对多关系。如下图形:
联合唯一索引
__table_args__
=
(UniqueConstraint(
'auth_type'
,
'username'
,
'password'
, name
=
'_user_passwd_uc'
),)
错误问题:
sqlalchemy: 'InstrumentedList' object has no attribute 'filter'
出现这样的问题时解决方法:uselist=False
官方文档:http://docs.sqlalchemy.org/en/latest/orm/join_conditions.html