Бессерверный: обработка расшифровки ключа API в лямбда-функции

Я реализую API, который использует стороннюю библиотеку.

Сторонняя библиотека предоставляет ключ, который необходимо передать в качестве входных данных. Ключ является динамическим и может меняться в зависимости от потребительского/бизнес-сценария. Лямбда-функция должна уметь расшифровывать ключ.

Может ли кто-нибудь предложить способ расшифровки ключа? Я изучаю подход aws-kms на стороне.

Обратите внимание: я записал способ .env для его достижения. Но сегодня мой API используется одним потребителем, следовательно, одним ключом API. Завтра число увеличится (приведет к нескольким ключам), и меня может не быть на месте для сохранения/обновления функции.

Изменить: мне нужно передать некоторую конфиденциальную информацию через полезную нагрузку. Это может быть буквенно-цифровое значение. например {"sender": "+123", "secret": "encrypted_value"} Клиент и сервер должны иметь общий ключ, с помощью которого клиент может зашифровать информацию, а сервер (лямбда-функция) должен ее расшифровать.

Любое предложение было бы здорово! Спасибо!


person Here to Learn.    schedule 02.01.2018    source источник
comment
Что значит расшифровать ключ? Он зашифрован? Если да, то как?   -  person internet_user    schedule 03.01.2018
comment
Да, это будет зашифровано. Возможно, с помощью какого-то механизма aws-kms. Я не очень хорошо разбираюсь в мире aws-kms. Но у меня есть отдельный ключ, который будет передаваться в зашифрованном виде в API. Я бы сделал еще несколько исследований по этой части, прежде чем совершить. Но до тех пор я хотел посмотреть, есть ли стандартный шаблон.   -  person Here to Learn.    schedule 03.01.2018
comment
@ЗдесьУзнай. нет стандартного шаблона для справки, потому что мы не знаем, как и когда ключ зашифрован, кем или с помощью какого алгоритма. Также неясно, почему вызывающая сторона должна нести ответственность за передачу ключа вашему API вместо того, чтобы ваш API выбирал правильный ключ для этой цели на основе учетных данных вызывающей стороны.   -  person Michael - sqlbot    schedule 03.01.2018
comment
@michael-sqlbot Извините за открытый вопрос. Это не ключ для аутентификации самого API. Сторонний API, который я собираюсь использовать, предоставляет отдельный ключ на основе используемой учетной записи. Мне нужен способ передать этот ключ в полезной нагрузке. Небезопасная отправка ключа будет уязвима. Возможно, у меня может быть секрет на глобальном уровне, чтобы зашифровать ключ со стороны клиента и использовать тот же секрет для его расшифровки на стороне лямбда.   -  person Here to Learn.    schedule 03.01.2018
comment
Мне до сих пор непонятно, зачем вы предоставляете ключ клиенту в любой форме, когда вы можете аутентифицировать клиента на основе (отдельного) механизма аутентификации вашего API и на его основе выбирать и использовать правильный ключ.   -  person Michael - sqlbot    schedule 03.01.2018
comment
@michael-sqlbot Рассмотрим сценарий, в котором вы можете отправить уведомление с номера телефона A или номера телефона B на основе значения поля ввода API_access_key. Клиент — это промежуточный сервис, который создается внутри компании. Из примеров полезной нагрузки ключ доступа имеет значение: {сообщение: Hello, access_key: ask101} и {message: Hello, access_key: ask102}. Это не мой собственный ключ API. Это ввод, который будет использоваться для вызова стороннего API.   -  person Here to Learn.    schedule 03.01.2018


Ответы (1)


Стандартный способ сделать что-то вроде того, что вы описали в разделе «редактирование», с помощью KMS:

  1. Клиент вызывает KMS напрямую, чтобы генерировать ключ данных. Клиент вернет ключ в его зашифрованном и простом формате.
  2. Клиент шифрует данные простым ключом, отбрасывает их и отправляет зашифрованные данные и зашифрованный ключ на сервер.
  3. Сервер вызывает KMS decrypt операцию, возвращает простой ключ и использует его для расшифровки данных. Сервер отбрасывает расшифрованный ключ и использует расшифрованные данные по своему усмотрению.

Пожалуйста, дайте мне знать, если вы имели в виду что-то другое, но это довольно стандартный способ использования KMS. Конечно, вам необходимо заблокировать все API-интерфейсы с помощью политик IAM и KMS в соответствии с вашими вариантами использования.

person Viccari    schedule 04.01.2018
comment
Спасибо @Виккари! Я понимаю, что третий пункт в ответе - это то, что я должен делать с функцией Lambda. Спасибо за ссылки на соответствующие статьи в документации AWS. :) - person Here to Learn.; 06.01.2018
comment
Да, эта часть происходит на Lambda. 1) и 2) должно произойти на вашем клиенте. - person Viccari; 06.01.2018