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:
-----BEGIN RSA PRIVATE KEY-----
asdkmnasefkljzsdkffjsldkgfjlzkmsdflkNOTAREALKEYasddkjnsfdlzxdfvlkmdggo=
-----END RSA PRIVATE KEY-----
Vous devez pipe (|) la sortie à quelques étapes
jq ".SecretString"
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
Je suis proposé une solution qui tire parti de stocker un secret dans Secrets Manager en tant que texte brut.
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-----