Как предотвратить утечку конфиденциальных данных через API Gateway
Wei Liu
March 3, 2023
Зачем нужно защищать конфиденциальные данные
Конфиденциальные данные, также известные как секретные данные, в основном относятся к данным, утечка которых может вызвать серьезные проблемы для бизнеса, правительств и частных лиц. Это включает, но не ограничивается данными о бизнес-операциях, личной идентификационной информацией и т.д.
Для предприятий конфиденциальные данные напрямую связаны с информационной безопасностью. Например, утечка таких данных, как ключи и сертификаты, может иметь разрушительные последствия для репутации организации, привести к финансовым потерям и даже к юридической ответственности.
Для частных лиц утечка конфиденциальных данных может раскрыть информацию, начиная от номеров социального страхования до банковских данных. Кража вашей личности может привести к навязчивой рекламе, испорченной кредитной истории, юридическим проблемам и различным видам мошенничества, совершенным от вашего имени.
Какие конфиденциальные данные содержатся в API-шлюзе
API-шлюз, как входной пункт бизнес-трафика, часто содержит большое количество конфиденциальных данных, таких как API-ключи, токены для аутентификации и т.д. Поэтому повышение безопасности и предотвращение утечки конфиденциальных данных является важным аспектом работы API-шлюза, помимо базовых функций балансировки нагрузки и маршрутизации трафика.

Как API-шлюз защищает конфиденциальные данные
Основная идея заключается в следующем:
-
Размещение конфиденциальных данных в защищенной зоне и строгий контроль доступа.
-
Улучшение системы управления рисками для контроля аномального поведения и соблюдения бизнес-требований.
-
Обеспечение обезличивания или шифрования конфиденциальных данных.
Далее мы рассмотрим, как Apache APISIX защищает конфиденциальные данные в API-шлюзе.
Практика Apache APISIX в защите конфиденциальных данных
Apache APISIX — это проект с открытым исходным кодом фонда Apache Software Foundation и в настоящее время самый активный проект API-шлюза с открытым исходным кодом. Как полностью динамический, реального времени, высокопроизводительный API-шлюз, Apache APISIX предоставляет богатые функции управления трафиком, такие как балансировка нагрузки, динамический апстрим, канареечные выпуски, разрыв цепи, аутентификация, наблюдаемость и т.д.
Кроме того, пользователи могут настраивать функции Apache APISIX, создавая собственные плагины. Благодаря активному сообществу и растущему числу разработчиков, количество плагинов Apache APISIX увеличивается с каждым днем, и некоторые из них содержат конфиденциальную информацию, например, конфигурации плагина jwt-auth secret и private_key. Для предотвращения несанкционированного доступа к этим данным необходимо использовать зашифрованное хранение.
Для повышения безопасности APISIX и лучшей защиты конфиденциальности пользователей, в версии 3.1.0 была введена функция Global Data Encryption. При разработке новых плагинов с этой функцией разработчикам достаточно указать данные, которые необходимо зашифровать, в схеме, и APISIX автоматически зашифрует их при записи в контрольную плоскость и расшифрует при чтении на плоскости данных.

Рассмотрим конкретный пример.
Когда шифрование данных не включено
- Отправка конфигурации
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "foo", "plugins": { "basic-auth": { "username": "foo", "password": "bar" } } }'
- Состояние конфиденциальных данных в etcd
etcdctl get /apisix/consumers/foo {"username":"foo","update_time":1675414313,"create_time":1674009211,"plugins":{"basic-auth":{"username":"foo","password":"bar"}} }
Мы видим, что поле password хранится в открытом виде, и его легко скомпрометировать.
Когда шифрование данных включено
- Включите
data_encryptionвconfig.yaml:
apisix: data_encryption: enable: true keyring: -edd1c9f0985e76a2
- Включите плагины, поддерживающие шифрование данных, например,
basic-auth
curl http://127.0.0.1:9180/apisix/admin/consumers -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "username": "foo", "plugins": { "basic-auth": { "username": "foo", "password": "bar" } } }'
- Тестирование плагина
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "methods": ["GET"], "uri": "/get", "plugins": { "basic-auth": {} }, "upstream": { "type": "roundrobin", "nodes": { "httpbin.org": 1 } } }'
Успешный доступ
curl -i -ufoo:bar http://127.0.0.1:9080/get HTTP/1.1 200 OK ...
Ошибка доступа, неверный пароль
curl -i -ufoo:test http://127.0.0.1:9080/get HTTP/1.1 401 Unauthorized ... {"message":"Invalid user authorization"}
Плагин работает корректно.
- Состояние конфиденциальных данных в etcd
etcdctl get /apisix/consumers/foo {"create_time":1674009211,"update_time":1674009211,"plugins":{"basic-auth":{"password":"+kOEVUuRc5rC5ZwvvAMLwg=","username":"foo"}},"username": "foo"}
Мы видим, что поле password успешно зашифровано, и даже если данные будут утеряны, хакеры не смогут их использовать.
Заключение
API-шлюз содержит множество конфиденциальных данных, поэтому необходимо принимать эффективные меры для их защиты. В этой статье на примере APISIX показано, как защитить конфиденциальные данные с помощью функции Global Data Encryption, чтобы гарантировать, что никакие конфиденциальные данные не хранятся в открытом виде. Это позволяет предотвратить утечку данных, даже если все данные в etcd будут скомпрометированы, что значительно повышает безопасность APISIX.
Кроме того, помимо шифрования конфиденциальных данных, APISIX также поддерживает хранение конфиденциальной информации в сторонних сервисах, таких как Secret Manager, что еще больше повышает уровень безопасности.
Надеемся, что эта статья поможет вам лучше понять, как защитить конфиденциальные данные в API-шлюзе и обеспечить информационную безопасность в бизнесе.