Skip to content

Commit 32eb27b

Browse files
committed
update
1 parent d48087c commit 32eb27b

4 files changed

Lines changed: 86 additions & 0 deletions

File tree

decisions/0039-key-management.md

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
# 39. Key Management
2+
3+
Date: 2017-06-14
4+
5+
## Status
6+
7+
Accepted
8+
9+
## Context
10+
11+
1. 目前有相当多的账户、密码等信息存储在项目配置文件中;
12+
2. 部分项目将敏感信息和项目分离,但所部署的服务器还是能被所有人登录查看;
13+
3. 将服务器登录权限限制在运维手中,需要运维人员维护所有敏感信息的存储与管理,数量线性增长,尤其是支付组涉及的敏感信息更多,每一个新项目都需要运维人员的参与和维护。
14+
15+
## Decision
16+
17+
1. 将服务器登录权限限制在个别人的手中;
18+
2. 使用密码管理服务,确保运维人员只需维护一个秘钥;
19+
3. 使用 Aliyun KMS 而不是自己搭建,节约运维成本。
20+
21+
直接使用KMS加密、解密
22+
23+
![][image-1]
24+
25+
结合我们的需求,我们选用这种方式,使用方式如下
26+
27+
```python
28+
import json
29+
from aliyunsdkcore.client import AcsClient
30+
from aliyunsdkkms.request.v20160120 import EncryptRequest, DecryptRequest
31+
32+
OLD = 'password'
33+
NEW = 'M2U5YzZlNGEtZTczZS00NmM4LWE0YmQtZjI3ODI0MmU4YWJjcEVDZW5SMEtWYjJsdWovdU5ibFNhSk5KS0RqbE9ENTRBQUFBQUFBQUFBQXJOd2dGc2l4S1JpV0tPRUgvbkwvSXVHYU5heCt5eHlFPQ=='
34+
35+
client = AcsClient('id', 'secret', 'cn-beijing')
36+
37+
38+
def en():
39+
request = EncryptRequest.EncryptRequest()
40+
request.set_KeyId('e6116a43-9926-4a66-a781-55fce623c2cb')
41+
request.set_Plaintext(OLD)
42+
response = client.do_action_with_exception(request)
43+
print json.loads(response)['CiphertextBlob']
44+
45+
46+
def de():
47+
request = DecryptRequest.DecryptRequest()
48+
request.set_CiphertextBlob(NEW)
49+
response = client.do_action_with_exception(request)
50+
print json.loads(response)['Plaintext'] == OLD
51+
52+
53+
if __name__ == '__main__':
54+
de()
55+
```
56+
57+
使用信封加密在本地加密、解密
58+
59+
![][image-2]
60+
61+
![][image-3]
62+
63+
## Consequences
64+
65+
1. 直接使用KMS加密、解密会影响启动速度;
66+
2. 一个明文多次加密,产生的密文不同,但所有密文都可以解密为明文。
67+
68+
Refs:
69+
70+
* 使用场景 [https://help.aliyun.com/document\_detail/28937.html][1]
71+
* 什么是信封加密?[https://help.aliyun.com/knowledge\_detail/42339.html][2]
72+
* Python SDK使用说明 [https://help.aliyun.com/document\_detail/53090.html][3]
73+
* KMS SDK source: [https://github.com/aliyun/aliyun-openapi-python-sdk/tree/master/aliyun-python-sdk-kms/aliyunsdkkms/request/v20160120][4]
74+
* 结合KMS实现本地文件加解密 [https://help.aliyun.com/video\_detail/54134.html][5]
75+
* JAVA SDK样例代码 [https://help.aliyun.com/document\_detail/43347.html][6]
76+
77+
[1]: https://help.aliyun.com/document_detail/28937.html
78+
[2]: https://help.aliyun.com/knowledge_detail/42339.html
79+
[3]: https://help.aliyun.com/document_detail/53090.html
80+
[4]: https://github.com/aliyun/aliyun-openapi-python-sdk/tree/master/aliyun-python-sdk-kms/aliyunsdkkms/request/v20160120
81+
[5]: https://help.aliyun.com/video_detail/54134.html
82+
[6]: https://help.aliyun.com/document_detail/43347.html
83+
84+
[image-1]: files/kms-scenario1.png
85+
[image-2]: files/kms-scenario2.1.png
86+
[image-3]: files/kms-scenario2.2.png

decisions/files/kms-scenario1.png

172 KB
Loading
180 KB
Loading
169 KB
Loading

0 commit comments

Comments
 (0)