Можно ли создать две секретные строки в одном секрете CloudFormation SecretsManager? - PullRequest
1 голос
/ 18 октября 2019

Я хочу создать секрет SecretsManager с двумя значениями, сгенерированными на лету. Возможно ли это и как мне это сделать?

Например, если бы я хотел, чтобы окончательный секрет выглядел так в JSON, как бы выглядел yaml CloudFormation?

{
  "password": "<Generated Value>",
  "serviceId": "fd07f2ab-96bd-4c5c-a4a9-9b8c43b666d7",
  "login": "<Different Generated Value>"
}

Еслиэто часть шаблона CF, который генерирует парольную часть секретной строки, как бы я также сгенерировал динамическое поле 'login'?

#This is a Secret resource with a randomly generated password in its SecretString JSON.
MySecretA:
  Type: 'AWS::SecretsManager::Secret'
  Properties:
    Name: MySecretForAppA
    Description: "This secret has a dynamically generated secret password and login."
    GenerateSecretString:
      SecretStringTemplate: '{"service-id": "<some guid>"}'
      GenerateStringKey: "password"
      PasswordLength: 30
      ExcludeCharacters: '"@/\'

Ответы [ 2 ]

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

Похоже, что ресурс AWS::SecretsManager::Secret генерирует только один секрет.

Я не смог найти способ обратиться к фактическому содержанию секрета через !Ref, который позволил бы двум секретамгенерироваться, затем ссылаться и объединяться в другом ресурсе. Единственное доступное значение !Ref - это ARN секрета.

Таким образом, я не смог найти способ создать два секрета в одном ресурсе.

1 голос
/ 22 октября 2019

Ресурс AWS :: SecretsManager :: Secret не поддерживает создание нескольких случайных ключей в одном секрете. Один из способов сделать это сегодня - использовать собственный ресурс CloudFormation (см. https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html).. Вы можете написать собственный лямбда-ресурс, который генерирует две случайные строки и выполняет PutSecretValue для секрета с новыми значениями.

Другой возможный вариант - заставить CloudFormation генерировать два секрета (один для имени пользователя и один для пароля). Я бы не рекомендовал этот подход, поскольку каждый раз, когда вам нужен секрет, вам нужно будет выполнить два извлечения, и это удваивает ваши затраты на AWS Secrets Manager.

...