Упражнение. Ограничение сетевого доступа

Завершено

Пользователи подключаются к серверу приложений, чтобы вводить заказы, обновлять свою учетную запись и выполнять аналогичные действия. Сервер приложений, в свою очередь, обновляет базу данных с этими изменениями. Так как у пользователей есть персональные данные, хранящиеся в базе данных, важно обеспечить доступ только из доверенных и необходимых ресурсов. Существует несколько способов управления доступом к базе данных SQL через сеть.

Правила брандмауэра

База данных SQL Azure имеет встроенный брандмауэр, который разрешает и запрещает сетевой доступ как к самому серверу баз данных, так и к отдельным базам данных. Изначально брандмауэр База данных SQL блокирует весь общедоступный доступ к База данных SQL Azure. Чтобы получить доступ к серверу базы данных, сначала нужно указать одно или несколько правил брандмауэра для IP-адресов уровня сервера, которые обеспечивают доступ к базе данных SQL Azure. Используйте правила брандмауэра для IP-адресов, чтобы определить разрешенные диапазоны IP-адресов из Интернета. Кроме того, нужно указать, разрешено ли приложениям Azure пытаться подключиться к базе данных SQL Azure.

Правила брандмауэра настраиваются на уровне сервера или базы данных. Правила, в частности, определяют, какие сетевые ресурсы разрешены для установления подключения к базе данных. В зависимости от уровня применяются следующие правила:

  • Правила брандмауэра на уровне сервера
    • Разрешение доступа службам Azure
    • Правила IP-адресов
    • Правила виртуальной сети
  • Правила брандмауэра на уровне базы данных
    • Правила IP-адресов

Примечание.

Служба "Хранилище данных SQL" поддерживает правила брандмауэра для IP-адресов только на уровне сервера и не на уровне базы данных.

Ознакомьтесь с тем, как работают эти правила.

Правила брандмауэра на уровне сервера

Эти правила разрешают клиентам доступ ко всему серверу Azure SQL Server, то есть ко всем базам данных на одном логическом сервере. Существует три типа правил, которые могут применяться на уровне сервера.

Правило Разрешить доступ службам Azure разрешает службам в Azure подключаться к вашей базе данных SQL Azure. Если это правило включено, оно разрешает подключение со всех общедоступных IP-адресов Azure. В это взаимодействие входят все платформы как услуги (PaaS) Azure, например Служба приложений Azure и Служба контейнеров Azure, а также виртуальные машины Azure с исходящим доступом к Интернету. Это правило можно настроить, включив или выключив его в области брандмауэра на портале, или с помощью правила IP-адреса, у которого указано значение 0.0.0.0 в качестве начального и конечного IP-адреса.

На схеме показано, как разрешить доступ к сети служб Azure.

Это правило используется при наличии приложений, работающих в службах PaaS в Azure, таких как Azure Logic Apps или Функции Azure, которым требуется доступ к База данных SQL Azure. Многие из этих служб не имеют статического IP-адреса, поэтому это правило гарантирует возможность подключения к базе данных.

Внимание

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

Правила IP-адресов — это правила, которые основаны на конкретных диапазонах общедоступных IP-адресов. IP-адреса, которые подключаются из разрешенного диапазона общедоступных IP-адресов, разрешены для подключения к базе данных.

Схема представляет правило IP-адреса.

Эти правила можно использовать, если у вас есть статический общедоступный IP-адрес, который должен получить доступ к базе данных.

Правила виртуальной сети позволяют явно разрешать подключение из указанных подсетей в одной или нескольких виртуальных сетях Azure. Правила виртуальной сети могут обеспечить более широкий доступ к базам данных и могут быть предпочтительным вариантом. Так как адресные пространства виртуальной сети Azure являются частными, вы можете эффективно устранить уязвимость к общедоступным IP-адресам и безопасному подключению к этим адресам, которые вы управляете.

Схема представляет правило виртуальной сети.

Используйте правила виртуальной сети, если у вас есть виртуальные машины Azure, которым требуется доступ к базе данных.

Для правил уровня сервера все эти правила можно создавать и обрабатывать с помощью портала, PowerShell, интерфейса командной строки и transact-SQL (T-SQL).

Правила брандмауэра на уровне базы данных

Эти правила разрешают доступ к отдельной базе данных на логическом сервере и хранятся в самой базе данных. Для правил уровня базы данных можно настроить только правила IP-адресов. Они работают так же, как на уровне сервера, но относятся только к базе данных.

Схема представляет правило сети IP-адресов базы данных.

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

Недостаток правил на уровне базы данных — возможность использовать только правила IP-адресов. Эти правила могут ограничивать гибкость и увеличить административные издержки.

Правила брандмауэра уровня базы данных можно создавать и управлять только с помощью T-SQL.

Ограничение сетевого доступа на практике

Рекомендуется использовать правила брандмауэра IP на уровне базы данных, чтобы повысить безопасность и сделать базу данных более переносимой. Используйте правила брандмауэра IP-адресов на уровне сервера для администраторов и если у вас есть несколько баз данных с одинаковыми требованиями к доступу, чтобы не тратить время на настройку каждой базы данных по отдельности.

Ознакомьтесь с тем, как эти правила работают на практике, и как можно защитить доступ к сети, чтобы разрешить только то, что необходимо. Помните, что вы создали База данных SQL Azure логический сервер, базу данных и виртуальную машину appServer Linux, которая выступает в качестве сервера приложений. Этот сценарий часто наблюдается при миграции базы данных в базу данных SQL Azure, когда ресурсам в виртуальной сети требуется доступ к ней. Брандмауэр Базы данных SQL Azure можно использовать во многих сценариях, но это пример, который имеет практическое применение и показывает, как работает каждое правило.

Просмотрите параметры брандмауэра и узнайте, как они работают. Вы используете портал и Cloud Shell для этих упражнений.

Созданная база данных в настоящее время не разрешает доступ из каких-либо подключений. Этот ограниченный доступ основан на командах, выполняемых для создания логического сервера и базы данных. Убедитесь, что нет доступа.

  1. В Cloud Shell подключитесь по протоколу SSH к виртуальной машине Linux, если еще не установили такое подключение. Замените nnn.nnn.nnn.nnn значением publicIpAddress из предыдущего урока.

    ssh nnn.nnn.nnn.nnn
    
  2. Повторно выполните sqlcmd команду, полученную ранее, чтобы попытаться подключиться к базе данных. Замените [server-name] именем сервера. Замените [username] и [password] на ADMINUSER учетные данные, указанные в предыдущем уроке. Сохраняйте одинарные кавычки вокруг имени пользователя и пароля, чтобы оболочка не неправильно интерпретировала специальные символы.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

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

    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login timeout expired.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : TCP Provider: Error code 0x2AF9.
    Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible.Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    

Предоставьте доступ, чтобы можно было подключиться.

Использование правила разрешения доступа службам Azure на уровне сервера

Так как у виртуальной машины есть исходящий доступ к Интернету, можно использовать правило "Разрешить доступ к службам Azure", чтобы разрешить доступ к виртуальной машине.

  1. Войдите в портал Azure с помощью той же учетной записи, с помощью которую вы активировали песочницу.

  2. В поле Поиск ресурсов, служб и документов в верхней части выполните поиск по имени сервера базы данных — server-name. Выберите сервер SQL Server.

  3. В области сервера SQL Server в меню слева в разделе Безопасность выберите Сеть.

  4. Прокрутите список вниз до пункта Исключения, установите флажок Разрешить доступ к серверу службам и ресурсам Azure, а затем выберите Сохранить. Подождите, пока система не подтвердит это изменение.

  5. Снова в сеансе SSH попробуйте подключиться к базе данных.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Сейчас это должно получиться. Если подключение выполнено успешно, вы увидите командную строку sqlcmd.

    1>
    

Вы открыли подключение, но этот параметр в настоящее время разрешает доступ из любого ресурса Azure, включая ресурсы за пределами подписки. Ограничьте этот доступ дальше, чтобы ограничить доступ к сети только ресурсам, которые находятся в вашем элементе управления.

Использование правила IP-адресов на уровне базы данных

Правила IP-адресов на уровне базы данных разрешают доступ к отдельной базе данных на логическом сервере. Используйте его для предоставления доступа к статичным IP-адресам виртуальной машины appServer .

Чтобы создать правило IP уровня базы данных, необходимо выполнить некоторые команды T-SQL. Создайте правило базы данных с помощью следующего соглашения, где вы передаете имя правила, начальный IP-адрес и конечный IP-адрес. Указав одинаковые начальные и конечные IP-адреса, можно ограничить доступ к одному IP-адресу. Можно развернуть диапазон, если у вас есть более крупный блок адресов, которым требуется доступ.

EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '40.112.128.214', '40.112.128.214'
  1. Пока все еще находится в строке sqlcmd, выполните следующую команду. Замените общедоступный IP-адрес виртуальной машины appServer в обоих расположениях.

    Совет

    При выполнении таких команд T-SQL, как показано ниже, вторая GO строка может не скопироваться в sqlcmd запрос. Возможно, вам потребуется ввести эту часть. Команда T-SQL не будет выполняться без нее GO , поэтому обязательно выполните команду.

    EXECUTE sp_set_database_firewall_rule N'My Firewall Rule', '[From IP Address]', '[To IP Address]';
    GO
    

    После выполнения команды введите exit, чтобы выйти из sqlcmd. Оставаться подключенным по протоколу SSH.

  2. В портал Azure на панели "Сеть" для SQL Server отмените выбор разрешения служб и ресурсов Azure для доступа к этому серверу, а затем нажмите кнопку "Сохранить". Это изменение отключает доступ со всех служб Azure, но вы можете подключиться, так как у вас есть правило IP уровня базы данных для сервера.

  3. Вернитесь в Cloud Shell, на виртуальной машине, к которому вы подключены через SSH, повторите попытку подключения к базе данных.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Сейчас это должно получиться. Если это успешно, появится запрос sqlcmd.

    1>
    

С помощью правила на уровне базы данных вы предоставляете доступ к отдельной базе данных. Это правило может быть полезно, если вы хотите сохранить сетевой доступ для каждой базы данных. Если несколько баз данных используют один и тот же уровень доступа к сети, упростите администрирование с помощью правила на уровне сервера, чтобы разрешить такой же доступ ко всем базам данных на сервере.

Использование правила IP-адресов на уровне сервера

Правила уровня базы данных являются отличным вариантом, но что делать, если на одном сервере несколько баз данных, к которым требуется подключиться виртуальная машина appServer ? Можно добавить правило уровня базы данных в каждую базу данных, но при добавлении дополнительных баз данных может потребоваться больше работы. Чтобы сократить усилия администрирования, разрешите доступ с помощью правила уровня сервера, которое будет применяться ко всем базам данных на сервере.

Используйте правило IP уровня сервера, чтобы ограничить системы, которые могут подключаться.

  1. В командной строке sqlcmd выполните следующую команду, чтобы удалить правило IP-адресов на уровне базы данных.

    EXECUTE sp_delete_database_firewall_rule N'My Firewall Rule';
    GO
    

    После выполнения команды введите exit, чтобы выйти из sqlcmd. Оставаться подключенным по протоколу SSH.

  2. Вернитесь в портал Azure на панели "Сеть" для СЕРВЕРА SQL Server в разделе "Правила брандмауэра" выберите добавить правило брандмауэра. Назовите правило Разрешить appServer, введите общедоступный IP-адрес виртуальной машины appServer для начального IP-адреса и конечного IP-адреса, а затем нажмите кнопку ОК.

  3. Выберите Сохранить.

    Снимок экрана портала Azure: создание правила брандмауэра сервера.

  4. Вернитесь в Cloud Shell на виртуальной машине appServer , повторите попытку подключения к базе данных.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Сейчас это должно получиться. Правило уровня сервера разрешает доступ на основе общедоступного IP-адреса виртуальной машины appServer . Если подключение выполнено успешно, вы увидите командную строку sqlcmd.

    1>
    

    Введите exit, чтобы выйти из sqlcmd. Оставаться подключенным по протоколу SSH.

Вы изолированы подключения только к IP-адресу, указанному в правиле. Это ограничение работает прекрасно, но все равно потребует больше времени от администратора по мере добавления систем, которым требуется подключение. Для этого также требуется статический IP-адрес или IP-адрес из определенного диапазона IP-адресов.

Если IP-адрес является динамическим и изменяется, необходимо обновить правило, чтобы обеспечить подключение. Виртуальная машина appServer в настоящее время настроена с динамическим IP-адресом. Этот IP-адрес, скорее всего, изменится в какой-то момент, прервав доступ, как только это произойдет. Теперь рассмотрим, как в конфигурации могут быть полезны правила виртуальной сети.

Использование правила виртуальной сети на уровне сервера

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

  1. Вернитесь в портал Azure и по-прежнему на панели "Сеть" в разделе "Виртуальные сети" выберите "Добавить правило виртуальной сети".

  2. Откроется диалоговое окно "Создание и обновление правила виртуальной сети". Задайте следующие значения.

    Параметр Значение
    Имя Оставьте значение по умолчанию
    Подписка Подписка Concierge
    Виртуальная сеть appServerVNET
    Имя подсети или префикс адреса appServerSubnet / 10.0.0.0/24
  3. Выберите Включить, чтобы включить конечную точку службы в подсети, а после включения нажмите ОК, чтобы создать правило.

  4. Удалите правило IP-адресов. Выберите меню ... рядом с правилом Разрешить appServer и нажмите команду Удалить, а затем — Сохранить.

  5. Вернитесь в Cloud Shell на виртуальной машине appServer , повторите попытку подключения к базе данных.

    sqlcmd -S tcp:[server-name].database.windows.net,1433 -d marketplaceDb -U '[username]' -P '[password]' -N -l 30
    

    Сейчас это должно получиться. Если это успешно, появится запрос sqlcmd.

    1>
    

То, что вы сделали здесь, эффективно удаляет любой общедоступный доступ к СЕРВЕРУ SQL Server. Он разрешает доступ только из определенной подсети в определенной виртуальной сети Azure. При добавлении дополнительных серверов приложений в этой подсети дополнительная конфигурация не требуется. Любой сервер в этой подсети может подключаться к СЕРВЕРУ SQL Server.

Эта конфигурация ограничивает доступ к службам за пределами области управления и упрощает администрирование при добавлении дополнительных серверов. Это эффективный способ защиты сетевого доступа к Базе данных SQL Azure.