web-dev-qa-db-fra.com

Comment normaliser une clé privée stockée sur le gestionnaire AWS Secrets

Edit: à partir de 2020 février, AWS semble avoir corrigé ce bogue. La base64ing et d'autres sages ne sont plus nécessaires.


J'ai mon secret comme une chaîne, mais bien sûr, lorsque AWS stocke le secret, il élimine l'espace blanc et les pauses de la ligne. En plus de cela, il enveloppe la valeur dans Json.

Quand je cours aws secretsmanager get-secret-value --secret-id my-private-key > private.pem Cela revient quelque chose comme.

{
    "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"
}

J'ai donc besoin de:

  • Strip obtenir la valeur de JSON
  • Reformater la chaîne pour être plus comme
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
11
Josh Beauregard

Vous devez pipe (|) la sortie à quelques étapes

  1. Pour retourner juste la valeur de la clé de l'utilisation JSON jq ".SecretString"
  2. Formater l'utilisation de la clé publique cut -b 2- |tr -d '"' |sed -En "s/\\\n/\n/pg"

Cela retournera ce que vous voulez.

Notez également que vous voudrez faire une lecture privée.pem Lecture uniquement. (chmod 400 private.pem)

En été, le commandement complet ressemblera à:

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
2
Josh Beauregard

Je suis proposé une solution qui tire parti de stocker un secret dans Secrets Manager en tant que texte brut.

  1. Stockez le secret dans Secrets Manager en tant que texte brut. La console aura des crochets JSON, mais j'ai enlevé ceux-ci.
  2. Utilisez le CLI pour obtenir la sortie secrète comme texte brut. Maintenant, les\n et\s dans le texte seront convertis en pauses de la ligne et les espaces sont censés être censés être

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

Le fichier PEM sera maintenant correctement formaté

    -----BEGIN RSA PRIVATE KEY-----
    MIIG3DCCBM
    -----END RSA PRIVATE KEY-----
0
lauren.b