Archery icon indicating copy to clipboard operation
Archery copied to clipboard

添加对AWS Secrets Manager支持及支持Redis SSL连接

Open bobfantansy opened this issue 2 years ago • 6 comments

  1. 支持从AWS Secrets Manager服务中获取username及password. 以支持RDB数据库的密码自动轮换机制。 sql_instance表中添加awsSecretId字段以保存aws secret id. 如果有填写username及password以从AWS获取中为准。

  2. 添加对Redis SSL连接支持。 sql_instance表中添加is_ssl字段,表明是否使用ssl进行连接。目前只支持redis

bobfantansy avatar Jul 17 '23 03:07 bobfantansy

Codecov Report

Patch coverage: 44.44% and project coverage change: -0.04 :warning:

Comparison is base (cdbd12e) 75.14% compared to head (2829fb1) 75.10%.

Additional details and impacted files
@@            Coverage Diff             @@
##           master    #2212      +/-   ##
==========================================
- Coverage   75.14%   75.10%   -0.04%     
==========================================
  Files         105      105              
  Lines       15167    15185      +18     
==========================================
+ Hits        11397    11405       +8     
- Misses       3770     3780      +10     
Impacted Files Coverage Δ
sql/engines/redis.py 75.92% <ø> (ø)
sql/engines/__init__.py 62.18% <37.50%> (-3.84%) :arrow_down:
sql/models.py 96.59% <100.00%> (+0.01%) :arrow_up:

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Do you have feedback about the report comment? Let us know in this issue.

codecov[bot] avatar Jul 17 '23 03:07 codecov[bot]

这个功能是挺好的, 当前因为合规各种 kms 工具都要上, 你这边如果能提供一些泛用型的 kms 就更好了, 就比如说有其他人也想接入某种 kms, 不仅是 aws 的, 应该如何配置实现?

LeoQuote avatar Jul 17 '23 07:07 LeoQuote

建议你先把 redis ssl 支持先提交了, kms 这部分可以下个 pr 讨论.

LeoQuote avatar Jul 17 '23 07:07 LeoQuote

有没有可能 kms 之类的配置写在django 配置,或内置配置表内,一个archery 配置一个,然后数据库中只需勾选是否为 kms 管理用户密码即可。

我理解kms应该是archery有一个access key,然后archery可以正常获取很多db的账号密码了。

LeoQuote avatar Jul 17 '23 14:07 LeoQuote

有没有可能 kms 之类的配置写在django 配置,或内置配置表内,一个archery 配置一个,然后数据库中只需勾选是否为 kms 管理用户密码即可。

我理解kms应该是archery有一个access key,然后archery可以正常获取很多db的账号密码了。

AWS 里的Secrets Manager可以理解为一个保存密钥的一个存储。每一项密钥对应着一个secretid, 可以通过secretid获取密钥的信息。密钥是一个字典,可以包含用户名,密码,URL等。访问secrets manager可以通过AKSK进行访问。但如果在AWS VPC内部访问,一般情况下不会直接分配AKSK,而是使用给予对应EC2 Role或者给相应Pod IRSA从而获取相应的访问权限。我提交的PR对应的就是第二种情况不会显式分配AKSK,避免泄漏。

对应于你提到的适配所有云的情况。每一个instance需要确定使用的是哪个云的服务及对应的secrets id, 如果有多个云Account,或者跨云的情况下,确实是需要指定相应的AKSK,这块目前与Archery instance下的aliyun cloud config有点类似,需要指定instance使用的对应的AKSK。

bobfantansy avatar Jul 18 '23 01:07 bobfantansy

明白了,那可能是设计一个表用来存供应商信息,比如kms 表,内部填写供应商类型,access key 和secret(也可以不填自动获取)

然后设置一对多的外键关联到实例。

代码实现上,可以参考查询引擎实现一个AwsKms 的class ,后续其他的kms 可以类比实现。

你可以参考这样实现一下。

LeoQuote avatar Jul 18 '23 02:07 LeoQuote