Вопрос или проблема
Я использую Google Secret Manager для хранения конфиденциальных данных, таких как ключи API, пароли и т.д. Сейчас я подключаюсь к API Google Secret Manager через Oauth2. В будущем мы перемещаем веб-сервер в Google Cloud, чтобы использовать IAM.
На моем веб-сервере (Ubuntu 24.04 с Apache) у меня есть файл secrets.php. В этом файле у меня есть код для подключения и чтения секретов из Google Secret Manager.
Чтобы усилить безопасность, я бы хотел добавить MD5 фразу из secrets.php + URL (www.host.com/secrets.php) в Google Secret Manager. При подключении к Google Secret Manager соединение должно приниматься только в том случае, если MD5 фраза, хранящаяся в Google Secret Manager, совпадает с MD5 фразой файла secrets.php и URL.
Это делает невозможным изменение содержимого файла secrets.php и ограничивает доступ к Google Secret Manager только этим файлом.
Возможно ли это и как этого добиться?
Это делает невозможным изменение содержимого файла secrets.php и ограничивает доступ к Google Secret Manager только этим файлом.
Нет, это не так. Статические значения могут быть тривиально воспроизведены другой программой.
То, что вы спрашиваете, по сути, требует доверительных вычислений, где у вас есть цепочка доверия от запуска до всего программного обеспечения. Это намного сложнее, чем статическая контрольная сумма md5. Это включает в себя сложное программное обеспечение и PKI систему.
Ответ или решение
Теория (Theory)
Google Secret Manager — это удобный инструмент для управления и защиты конфиденциальных данных, таких как API-ключи и пароли. Одним из популярных методов удостоверения подлинности является использование OAuth2, который также поддерживается Google Secret Manager. В будущем, если ваша веб-служба будет перенесена в Google Cloud, вы сможете использовать IAM (управление идентификацией и доступом) для еще большей безопасности. Однако важно понимать, что простое добавление MD5-хэша файла и URL в качестве метода аутентификации может не обеспечить необходимую безопасность. Статический MD5-хэш может быть легко воспроизведен другим программным обеспечением, что открывает возможность для злоумышленников получить неконтролируемый доступ к вашим данным.
Пример (Example)
Рассмотрим типичную ситуацию, когда ваше приложение хранит ряд секретов, доступа к которым необходимо ограничить. На вашем сервере Ubuntu 24.04 под управлением Apache имеется файл secrets.php, который содержит код для подключения и получения данных из Google Secret Manager. Ваша идея заключается в том, чтобы использовать MD5-хэш содержимого этого файла и его URL как дополнительный слой безопасности при подключении к Google Secret Manager. Тем не менее, данное решение — это всего лишь обманчивая иллюзия безопасности. MD5-хэш — это статическая величина, и если кто-либо узнает, как он формируется и какова его ценность, этот человек может воспроизвести его в любом другом приложении или скрипте.
Применение (Application)
Давайте обсудим, какие более надежные методы можно использовать для достижения вашей цели.
-
Использование OAuth2 и IAM: Если возможно, настраивайте доступ к Google Secret Manager на основе IAM, что позволит создать правила строго ограниченного доступа. Например, с помощью OAuth2 вы можете обеспечить динамическое формирование токенов доступа, которые обновляются через определенные временные интервалы, что делает их более сложными для воспроизведения или кражи.
-
Подписанные запросы и JWT (JSON Web Tokens): Используйте подписанные запросы с токенами JWT. Это обеспечит криптографическую проверку и позволит убедиться, что запросы действительно исходят от вашего приложения и не были изменены после подписания.
-
Двухфакторная аутентификация (2FA): Добавление второго слоя аутентификации может значительно улучшить безопасность доступа к Secret Manager.
-
Шифрование на стороне клиента: Рассмотрите возможность использования шифрования на стороне клиента; в этом случае ваши данные будут зашифрованы до того, как они окажутся в Google Secret Manager. Даже в случае утечки данных, злоумышленники не смогут их расшифровать без соответствующего ключа.
-
Мониторинг и аудит доступа: Иногда предупреждение лучше, чем лечение. Настройте систему мониторинга и аудита, чтобы в любое время знать, кто и когда пытался получить доступ к вашим секретам.
-
Trusted Computing и TPM (Trusted Platform Module): Если ваша инфраструктура поддерживает это, вы могли бы использовать связанные программно-аппаратные решения, такие как TPM, чтобы установить доверительные отношения между всеми компонентами вашей среды. Это гарантия того, что только прошедшие проверку компоненты могут получить доступ к вашим данным.
Заключение
Хотя идея использования MD5-хэша кажется привлекательной и простой, реальность такова, что она не обеспечивает достаточной защиты в современных условиях постоянных угроз. Более сложные и проверенные на практике технологии, такие как OAuth2, IAM и TPM, предлагают лучший подход к безопасности ваших данных в Google Secret Manager. Эти технологии обеспечивают уверенность в том, что только авторизованные пользователи и приложения могут получить доступ к вашим секретам, что значительно снижает риск утечки данных.