Могу ли я использовать 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» и следующих основных предположений:
- AWS Lambda выполняет код, для которого он настроен.
- API управления AWS возвращают правильные ответы.
- Время до оповещения разумное. Это проще, так как вы также можете загрузить предыдущие версии лямбда-кода.
Все это разумные предположения.