Шифрование на стороне клиента DocumentDB

Шифрование на стороне клиента (Client-Side Field Level Encryption, FLE) позволяет шифровать отдельные поля документов перед их отправкой в базу данных. Это гарантирует, что данные остаются зашифрованными даже во время передачи и хранения, и расшифровать их можно только с использованием ключей, доступных на стороне клиента.

Managed Service for DocumentDB поддерживает эту возможность через совместимость с MongoDB Client-Side Field-Level Encryption (CSFLE).

Основные особенности

  • Шифрование на уровне поля — вы можете выборочно шифровать определённые поля в документах (например, номера кредитных карт и адреса), оставляя остальные данные в открытом виде.

  • Управление ключами — ключи шифрования хранятся и управляются на стороне клиента, что снижает риск компрометации данных в случае несанкционированного доступа к базе данных.

  • Алгоритмы шифрования — поддерживаются современные криптографические алгоритмы, такие как AES-256 в режимах GCM или CBC, обеспечивающие высокую степень защиты.

Используемые технологии и библиотеки

Для реализации шифрования на стороне клиента в приложении, взаимодействующем с Managed Service for DocumentDB, вам понадобятся криптографические библиотеки, совместимые с языком программирования вашего проекта. MongoDB предоставляет драйверы с поддержкой FLE , которые интегрируются с популярными библиотеками.

Примеры:

  • Python:

    • PyCryptodome — библиотека для симметричного и асимметричного шифрования, которая поддерживает алгоритмы AES, RSA и др.;

    • cryptography — библиотека с поддержкой современных криптографических примитивов, включая шифрование и управление ключами;

  • Java:

    • Java Cryptography Extension (JCE) — встроенный инструментарий Java для реализации шифрования, включая AES и SHA;

    • Bouncy Castle — расширенная библиотека с поддержкой множества криптографических алгоритмов и форматов;

  • Node.js:

    • crypto — встроенный модуль Node.js, предоставляющий функции для шифрования, хеширования и генерации ключей;

    • node-forge — библиотека для выполнения криптографических операций, таких как шифрование и подпись данных;

  • .NET:

    • System.Security.Cryptography — встроенная библиотека .NET, обеспечивающая доступ к алгоритмам шифрования, таким как AES, RSA, и хешированию.

Пример использования

Для настройки шифрования на стороне клиента в Managed Service for DocumentDB используйте официальный драйвер MongoDB для вашего языка программирования. Например, в Python с использованием библиотек pymongo и PyCryptodome:

from pymongo import MongoClient
from pymongo.encryption import ClientEncryption

# Настройка клиента и ключей
kms_providers = {"local": {"key": b"<your-96-byte-key>"}}  # Пример локального ключа
client = MongoClient("mongodb://<host>:27017")
client_encryption = ClientEncryption(kms_providers, "key_vault_db.key_vault_coll", client)

# Шифрование поля
encrypted_field = client_encryption.encrypt("sensitive_data", algorithm="AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic")

где:

  • <host> — внутренний или публичный IP-адрес сервера, к которому нужно подключиться. Подробнее см. раздел Доступ к кластеру DocumentDB.

Рекомендации

  1. Хранение ключей — используйте защищённые сервисы управления секретами (например, AWS KMS, Azure Key Vault или собственное решение) для хранения ключей шифрования.

  2. Производительность — шифрование на стороне клиента может увеличивать нагрузку на приложение. Тестируйте производительность при работе с большими объёмами данных.

  3. Совместимость — убедитесь, что используемые драйверы MongoDB поддерживают FLE (версии 4.2 и выше).

  4. Шифрование соединения активируйте TLS при создании кластера для защиты данных при передаче между клиентом и сервером DocumentDB.