|
| 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 |
0 commit comments