amazon-web-services - 如何规范存储在 AWS Secrets Manager 上的私钥
问题描述
编辑:截至 2020 年 2 月,AWS 似乎已修复此错误。不再需要 BASE64ing 和其他方式。
我将我的秘密存储为字符串,但当然,当 aws 存储秘密时,它会删除空格和换行符。最重要的是,它将值包装在 json 中。
当我运行aws secretsmanager get-secret-value --secret-id my-private-key > private.pem
它返回类似的东西。
{
"Name": "ai-data-devops-ansible-deploy-key",
"VersionId": "fedafe24-d3eb-4964-9a8f-7f4ecb375a35",
"SecretString": "-----BEGIN RSA PRIVATE KEY-----\nasdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=\n-----END RSA PRIVATE KEY-----\n",
"VersionStages": [
"AWSCURRENT"
],
"CreatedDate": 1568147513.11,
"ARN": "arn:aws:secretsmanager:us-east-1:13726472r4:secret:my-private-key-XQuwafs"
}
所以我需要:
- 剥离从json中获取值
- 重新格式化字符串,使其更像
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
解决方案
另一种选择是对 PEM 进行 base64 编码以进行存储:
对密钥进行编码:
$ cat private_key
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
$ base64 private_key > encoded_private_key
$ cat encoded_private_key
LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQphc2RrbW5hc2Vma2xqenNka2ZmanNsZGtnZmpsemttc2RmbGtOT1RBUkVBTEtFWWFzZGRram5zZmRsenhkZnZsa21kZ2dvPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
取回钥匙:
$ base64 -D encoded_private_key
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
编辑:假设秘密是 base64 编码,这将工作:
编码和推送:
aws secretsmanager create-secret --name my-private-key --secret-string `base64 private.pem`
拉取和解码:
aws secretsmanager get-secret-value --secret-id my-private-key --query 'SecretString' --output text |base64 -D > private.pem
执行 --query --output 文本可能会使解析变得更简单,即使您也不想对其进行 base64 编码。
推荐阅读
- java - Quarkus 测试中的嵌入式 postgres 无法连接
- c# - 如何从数据视图中选择单个分组列?
- reactjs - 无法删除firebase / firestore中数组内具有确定值的对象
- sql - MSaccess 搜索不一致的记录
- android - 使用天数在日历中设置开始和结束日期
- mysql - MySQL,根据工作日将值从一个表传输到另一个表
- kivy - 为什么 Kivy 说 Unresolved reference 'Myapp'?
- c - 为什么我的程序打印的是 0 而不是预期的值?(C)
- pagination - Faunadb如何对按时间戳排序的索引进行分页
- c++ - 为什么在不需要时进行零初始化