首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何规范存储在AWS机密管理器上的私钥

如何规范存储在AWS机密管理器上的私钥
EN

Stack Overflow用户
提问于 2019-10-17 15:37:37
回答 5查看 26K关注 0票数 33

编辑:截至2020年2月,似乎已经修复了这个错误。不再需要BASE64ing和其他wise。

我将秘密存储为字符串,但当然,当aws存储秘密时,它会删除空白和换行。在此基础上,它用json包装了值。

当我运行aws secretsmanager get-secret-value --secret-id my-private-key > private.pem时,它会返回类似的内容。

代码语言:javascript
复制
{
    "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

  • 中获取值,将字符串重新格式化,使其更像

代码语言:javascript
复制
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-01-06 20:34:41

我想出了一种解决方案,将秘密存储在秘密管理器中作为纯文本。

  1. 将秘密以纯文本形式存储在秘密管理器中。他们的控制台将有JSON括号,但我删除了这些。
  2. 使用cli将秘密输出作为纯文本。现在,文本中的\n和\s将转换为它们应该是的换行符和空格。

保密管理器获取秘密值秘密id私钥查询'SecretString‘输出文本> private.pem

现在将正确格式化pem文件。

代码语言:javascript
复制
    -----BEGIN RSA PRIVATE KEY-----
    MIIG3DCCBM
    -----END RSA PRIVATE KEY-----
票数 6
EN

Stack Overflow用户

发布于 2019-11-07 16:06:25

另一种选择是对PEM进行base64编码以进行存储:

对密钥进行编码:

代码语言:javascript
复制
$ cat private_key 
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
$ base64 private_key > encoded_private_key

$ cat encoded_private_key
LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQphc2RrbW5hc2Vma2xqenNka2ZmanNsZGtnZmpsemttc2RmbGtOT1RBUkVBTEtFWWFzZGRram5zZmRsenhkZnZsa21kZ2dvPQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=

把钥匙拿回来:

代码语言:javascript
复制
$ base64 -D encoded_private_key
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----

编辑:假设秘密是base64编码的,这将有效:

编码和推送:

代码语言:javascript
复制
aws secretsmanager create-secret --name my-private-key --secret-string `base64 private.pem`

拉出和解码:

代码语言:javascript
复制
aws secretsmanager get-secret-value --secret-id my-private-key --query 'SecretString' --output text |base64 -D > private.pem

执行--查询输出文本的操作可能会使解析变得更简单,即使您也不希望base64对其进行编码。

票数 37
EN

Stack Overflow用户

发布于 2019-10-17 15:37:37

您需要通过几个步骤完成输出。

要返回来自json的密钥的值,使用jq ".SecretString"

  • To格式,公钥使用cut -b 2- |tr -d '"' |sed -En "s/\\\n/\n/pg"

这将返回你想要的。

还请注意,您希望使private.pem成为只读的。(chmod 400 private.pem)

总之,完整的命令如下所示:

代码语言:javascript
复制
aws secretsmanager get-secret-value --secret-id my-private-key | jq ".SecretString" |cut -b 2- |tr -d '"' |sed -En "s/\\\n/\n/pg" > private.pem
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58436229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档