Ниже (сокращенно шаблон CloudFormation) я пытаюсь настроить AWS лямбда-функцию для получения значения из AWS Secrets Manager, внедренного в его среду:
Resources:
Function:
Type: AWS::Serverless::Function
Properties:
Environment:
Variables:
SECRET_KEY: !Sub '{{resolve:secretsmanager:${Secret}:SecretString:KEY}}'
Secret:
Type: AWS::SecretsManager::Secret
Properties:
Name: 'very-secret-thing'
SecretString: '{"KEY":"dummy"}'
При создании стека с использованием этого шаблона, все идет как положено. Затем я go и изменяю значение секрета вне CloudFormation, так как я бы не хотел, чтобы секрет проверялся в системе контроля версий. Это вполне возможно, и документация подразумевает, что значение секрета не будет затронуто при последующих обновлениях стека CloudFormation, если я не буду изменять фиктивное значение для SecretString
в шаблоне.
Итак, после установки фактического секрета в консоли AWS мне нужно инициировать повторное развертывание функции Lambda, чтобы новое значение секрета было разрешено CloudFormation и установлено в среде функции. Как мне это сделать?
Выполнение aws cloudformation deploy
завершается неудачно с сообщением: Без изменений для развертывания.
Я подозреваю, что CloudFormation сравнивает «сырую» версию шаблон с тем, что было развернуто последним, без предварительного разрешения ссылок на Secrets Manager. Это тот случай? И есть ли какая-то хитрость для принудительного разыменования ранее?
Сноска. Мне хорошо известно, что использование Secrets Manager таким образом приведет к отображению секретного значения в AWS Lambda Console, и что получение значения от Secrets Manager во время выполнения будет более безопасным подходом. Это просто выходит за рамки того, что я надеюсь сделать.