如何规范化存储在AWS Secrets Manager上的私钥

时间:2019-10-17 15:37:37

标签: amazon-web-services aws-cli aws-secrets-manager

我将我的秘密存储为字符串,但是当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-----

5 个答案:

答案 0 :(得分:2)

您需要通过几步将输出(|)传递给管道

  1. 要从json中仅返回键的值,请使用jq ".SecretString"
  2. 要设置公用密钥的格式,请使用cut -b 2- |tr -d '"' |sed -En "s/\\\n/\n/pg"

这将返回您想要的内容。

还请注意,您将希望将private.pem设为只读。 (chmod 400 private.pem

在夏季,完整命令如下所示:

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

答案 1 :(得分:1)

另一种选择是对存储的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

即使您不想对base64进行编码,执行--query --output文本操作也可能使解析起来更简单。

答案 2 :(得分:0)

我想出了一个解决方案,该方案利用秘密文件中的秘密内容作为纯文本存储。

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

    aws secretsmanager get-secret-value --secret-id privatekey --query 
    'SecretString' --output text > private.pem
    

pem文件现在将正确格式化

    -----BEGIN RSA PRIVATE KEY-----
    MIIG3DCCBM
    -----END RSA PRIVATE KEY-----

答案 3 :(得分:0)

如果你愿意,你可以试试我的应用https://github.com/ledongthuc/awssecretsmanagerui

我创建此 UI 是为了通过 UI 将受保护的文件上传到 AWS Secrets manager,以简化一切并避免字符错误。希望对您的案例有用。

答案 4 :(得分:0)

我为 AWS 秘密管理器创建了一个 UI。所以你可以用它来上传和下载保持完整格式的文件 https://github.com/ledongthuc/awssecretsmanagerui