Могу ли я использовать Amazon AWS Lambda в качестве безопасного анклава для доверенных вычислений?

Я хотел бы использовать AWS Lambda для выполнения вычислений от имени третьей стороны, а затем доказать им, что я сделал это так, как задумал. Доказательством может служить криптографически подписанный дайджест тела функции, запроса и ответа. В идеале Amazon подписывает дайджест своим собственным закрытым ключом и публикует свой открытый ключ для проверки подписи. Идея похожа на "безопасный анклав", который новые чипы Intel предоставляют через SGX (Software Guard Extensions).

В существующей службе Lambda есть некоторые необходимые компоненты. Например, ответ GetFunction включает в себя поле CodeSha256, которое однозначно идентифицирует реализацию функции. А Amazon API Gateway позволяет вам отправлять HTTPS-запросы в службу Lambda, что может дать подтверждение в стиле TLSNotary содержимого запроса-ответа. Но чтобы сделать это правильно, я думаю, что AWS Lambda должна предоставить подпись напрямую.

Microsoft Azure работает над надежными программными анклавами ("криплетами") в своем проекте Bletchley: https://github.com/Azure/azure-blockchain-projects/blob/master/bletchley/bletchley-whitepaper.md https://github.com/Azure/azure-blockchain-projects/blob/master/bletchley/CryptletsDeepDive.md

Возможно ли что-то подобное с нынешней AWS Lambda?

3 ответа

Давайте сначала дадим некоторые определения: Lambda - это не сервер, а сервис, который запускает ваш код. он не предоставляет никакой подписи напрямую, а скорее то, что вы настраиваете для него в AWS.

Secure Enclave - это одна из реализаций или тип TPM (Trusted Platform Module), это можно сделать разными способами, а Secure Enclave - один из лучших. Короткий ответ на ваш вопрос: да, это можно сделать, если вы внедрите необходимый код и добавите все необходимые настройки, SSL и т. Д.

Я бы посоветовал вам прочитать следующее: http://ieeexplore.ieee.org/document/5703613/?reload=true

И если вы хотите иметь TPM из коробки, вы можете использовать проект Microsoft: https://github.com/Microsoft/TSS.MSR

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

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

Для первого случая - вам нужен язык с доступом к источнику. Как и в Python, вы можете получить его, подписать и вернуть или сохранить где-нибудь.

Второй случай - я бы использовал тегирование.

Есть и другое решение проблемы с использованием IAM. Вы можете предоставить роль IAM для своего клиента, у которого есть доступ на чтение к исходному коду Lambda. Используя общедоступную конечную точку лямбда (та, которая выглядит как ) — вы можете заверить клиента, что запрос напрямую обращается к этой конкретной лямбда-функции.

Роль IAM, доступная вашему клиенту, имеет разрешения на выполнение следующих действий:

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

Все, что нужно сделать вашему клиенту, — это настроить на своей стороне аудит лямбда-выражений, используя заданную роль IAM. Они могут настроить периодический cron, который загружает все версии вашей лямбды по мере ее обновления. Если у вас есть процесс предварительной проверки, его можно легко настроить против их предупреждений.

Обратите внимание, что это зависит от добросовестной работы «AWS» и следующих основных предположений:

  1. AWS Lambda выполняет код, для которого он настроен.
  2. API управления AWS возвращают правильные ответы.
  3. Время до оповещения разумное. Это проще, так как вы также можете загрузить предыдущие версии лямбда-кода.

Все это разумные предположения.

Другие вопросы по тегам