Как нормализовать закрытый ключ, хранящийся в менеджере секретов AWS - PullRequest
2 голосов
/ 17 октября 2019

Мой секрет хранится в виде строки, но, конечно, когда 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-----

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вам нужно передать (|) вывод через несколько шагов

  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 голос
/ 07 ноября 2019

Другим вариантом будет base64 кодировать PEM для хранения:

Кодировать ключ:

$ 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, это будет работать:

Кодирование и push:

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 -вещь с выходным текстом может упростить синтаксический анализ, даже если вы не хотите, чтобы она также кодировалась с помощью base64.

...