AWS SAM извлекает секретное значение из Secret Manager с помощью динамических ссылок

Я следил за этот официальный документ от AWS о том, как использовать секреты, которые хранятся в Secret Manager в файле SAM template.yaml, и вот что я сделал:

 Environment:
        Variables:
          DUMMY_VARIABLE: '{{resolve:secretsmanager:dummy/secret:SecretString:key1}}'

Все работает нормально, и я вижу, что секреты извлекаются, однако, если я изменю значение секрета в диспетчере секретов и повторно разверну лямбда-функцию с помощью команды sam deploy, значение переменной среды, поступающее из диспетчера секретов, останется неизменным. .

Я не указываю стадию версии или идентификатор версии, но я могу решить проблему, указав идентификатор версии секрета, как показано ниже:

DUMMY_VARIABLE: '{{resolve:secretsmanager:dummy/secret:SecretString:key3::VERSION_ID_OF_THE_SECRET}}'

Согласно официальному документу AWS:

Если вы не укажете ни этап версии, ни идентификатор версии, по умолчанию будет получена версия со значением этапа версии AWSCURRENT.

Я ожидаю, что он должен взять текущее значение из Secret Manager без указания идентификатора версии и этапа, но, похоже, этого не происходит!


person Benjamin    schedule 27.06.2021    source источник


Ответы (1)


На та же страница есть этот абзац:

Обновление секрета в Secrets Manager не приводит к автоматическому обновлению секрета в CloudFormation. Чтобы CloudFormation обновила динамическую ссылку на secretsmanager, необходимо выполнить обновление стека, которое обновляет ресурс, содержащий динамическую ссылку, либо путем обновления свойства ресурса, содержащего динамическую ссылку на secretsmanager, либо путем обновления другого свойства ресурса. Например, предположим, что в своем шаблоне вы указываете свойство MasterPassword ресурса AWS::RDS::DBInstance как динамическую ссылку secretsmanager, а затем создаете стек из шаблона. Позже вы обновите значение этого секрета в Secret Manager, но не обновите ресурс AWS::RDS::DBInstance в своем шаблоне. В этом случае, даже если вы выполняете обновление стека, значение секрета в свойстве MasterPassword не обновляется и остается прежним значением секрета.

Так что, к сожалению, секретное значение хранится в самом стеке. Вам может потребоваться получить секретное значение явно через API в коде, который должен его использовать.

person Dmitry Mukhin    schedule 30.06.2021
comment
это такое плохое ограничение на мой взгляд. в любом случае, я преодолел эту проблему, явно используя номер версии, полученный от секретного менеджера, и обновляя его при каждом изменении, это уродливая работа, но она работает. - person Benjamin; 30.06.2021
comment
В зависимости от вашего варианта использования у вас могут возникнуть огромные непредвиденные расходы, связанные с запросами SM. Например. частые и очень одновременные лямбды. - person Dmitry Mukhin; 01.07.2021