Обеспечение безопасности и надежности ваших приложений C#

Сохранять секреты приложений в безопасности разработчикам всегда сложно. Мы хотим работать над основными частями приложения, не отвлекаясь на сохранение секретов. Но безопасность приложения очень важна. Итак, какие способы мы можем использовать, чтобы лучше хранить наши секреты?

Некоторые из распространенных типов секретов, управляемых в приложениях, включают:

  • Ключи API: токены или ключи, используемые для аутентификации и получения доступа к внешним сервисам, таким как облачные платформы или сторонние API.
  • Учетные данные базы данных: сюда входят имена пользователей, пароли и иногда строки подключения, необходимые для доступа к базе данных и взаимодействия с ней.
  • Ключи шифрования: они используются для шифрования и дешифрования данных. Это могут быть данные, хранящиеся в базе данных, или данные, передаваемые между службами.
  • Учетные данные учетной записи службы: имена пользователей и пароли или другие учетные данные для учетных записей, которые приложения используют для запуска или взаимодействия с другими службами.
  • Учетные данные сторонних служб. Если приложение интегрируется со сторонними службами (например, платежными шлюзами, службами электронной почты и т. д.), у него будут учетные данные или токены для этих служб.

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

Пример

Вот простой пример из реальной жизни:

Мы используем базы данных SQL Azure, распределяя их по различным SQL-серверам Azure. Несмотря на то, что каждая база данных поддерживает одну и ту же схему, они предназначены для разных клиентов в соответствии с подходом «одна база данных на каждого арендатора». В каждой базе данных есть хранимая процедура с именем «DailyScheduler», которую необходимо вызывать ежедневно в установленное время. Наша задача — разработать программу, которая циклически проходит через SQL-серверы Azure в нашей подписке, обращается к базам данных на каждом сервере, а затем запускает хранимую процедуру DailyScheduler для каждой базы данных.

Приложение должно использовать API Azure Resource Manager для взаимодействия с ресурсами Azure. Для аутентификации с помощью удостоверения Azure мы можем использовать секретные учетные данные клиента Azure Identity.