Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
wants to merge 7 commits into
base: master
Choose a base branch
from

Conversation

bobfantansy
Copy link
Contributor

@bobfantansy bobfantansy commented Jul 17, 2023

  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

@codecov
Copy link

codecov bot commented Jul 17, 2023

Codecov Report

Patch coverage: 44.44% and project coverage change: -0.04 ⚠️

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%) ⬇️
sql/models.py 96.59% <100.00%> (+0.01%) ⬆️

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

@LeoQuote
Copy link
Collaborator

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

@LeoQuote
Copy link
Collaborator

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

@LeoQuote
Copy link
Collaborator

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

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

@bobfantansy
Copy link
Contributor Author

有没有可能 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。

@LeoQuote
Copy link
Collaborator

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

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

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants