首页 > 解决方案 > 如何规范存储在 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"
}

所以我需要:

-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----

标签: amazon-web-servicesaws-cliaws-secrets-manager

解决方案


另一种选择是对 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 编码。


推荐阅读