Sergey aca2365080 Updated cloud-init for Firezone VM | 1 год назад | |
---|---|---|
.. | ||
firezone | 1 год назад | |
images | 1 год назад | |
keycloak-config | 1 год назад | |
keycloak-deploy | 1 год назад | |
main | 1 год назад | |
settings | 1 год назад | |
README.md | 1 год назад |
Решение разворачивает в Yandex Cloud облачную инфраструктуру для организации Remote access VPN: защищенного доступа пользователей к облачным ресурсам на основе WireGuard VPN. Решение поддерживает несколько вариантов популярных Identity Providers для сценариев Single Sign-On пользователей в корпоративной федерации пользователей.
После развертывания решения в Yandex Cloud создаются следующие компоненты:
Название | Описание |
---|---|
Firezone ВМ | Open-source ПО Firezone на основе WireGuard VPN для организации VPN доступа |
Кластер баз данных | Сервис Managed Service for PostgreSQL для работы Firezone ВМ и Keycloak ВМ |
Keycloak ВМ | Open-source ПО Keycloak для Single Sign-On аутентификации пользователей в корпоративной федерации пользователей, например Active Directory |
Firezone - это open-source решение для организации удаленного доступа VPN, обладающее следующими основными возможностями:
Для аутентификации пользователей в Firezone можно использовать несколько вариантов популярных Identity Providers: https://www.firezone.dev/docs/authenticate/. В данном решении в качестве примера выбрана реализация с Keycloak.
Как пользователь подключается к VPN:
Инструкция для пользователя по подключению VPN: https://www.firezone.dev/docs/user-guides/client-instructions/
Документация по Firezone:
Перед выполнением развертывания нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт
Проверьте наличие учетной записи в облаке с правами admin
на каталог
Проверьте квоты в облаке, чтобы была возможность развернуть ресурсы в сценарии:
Посмотреть справочную информацию по количеству ресурсов, создаваемых в сценарии
Ресурс | Количество |
---|---|
Виртуальные машины | 2 |
vCPU виртуальных машин | 4 |
RAM виртуальных машин | 12 ГБ |
Диски | 2 |
Объем SSD дисков | 110 ГБ |
Подсети | 2 |
Статические публичные IP-адреса | 2 |
Группы безопасности | 2 |
Сертификат Certificate Manager | 1 |
Зона DNS | 1 |
Кластер Managed Service for PostgreSQL | 1 |
Объём SSD-хранилища для кластера PostgreSQL | 10 ГБ |
Количество vCPU для кластера PostgreSQL | 2 |
Объём памяти для кластера PostgreSQL | 8 |
Перед развёртыванием решения уже должны существовать следующие объекты:
ns1.yandexcloud.net.
ns2.yandexcloud.net.
На вашей рабочей станции склонируйте репозиторий yandex-cloud/yc-solution-library-for-security
из GitHub и перейдите в папку сценария remote-access-vpn
:
git clone https://github.com/yandex-cloud/yc-solution-library-for-security.git
cd yc-solution-library-for-security/network-sec/remote-access-vpn
Настройте окружение для развертывания (подробности):
export YC_TOKEN=$(yc iam create-token)
Заполните файл output.tf
в папке settings
вашими значениями. Обязательные параметры для изменения отмечены в таблице.
Посмотреть детальную информацию о заполняемых значениях
Название | Описание | Тип | Пример | Требует изменения |
---|---|---|---|---|
domain | Доменное имя (второго и первого уровня, разделенное точкой) для виртуальных машин Firezone и Keycloak | string |
"example.com" |
да |
folder_id | ID каталога для размещения компонент решения | string |
"b1gentmqf1ve9uc54nfh" |
да |
vpc_id | ID облачной сети для размещения компонент решения | string |
"enp48c1ndilt42veuw4x" |
да |
trusted_ip_for_mgmt | Список публичных IP адресов/подсетей, с которых разрешено подключение по SSH к Firezone и Keycloak ВМ. Используется во входящем правиле групп безопасности. | list(string) |
["A.A.A.A/32", "B.B.B.0/24"] |
да |
firezone | ||||
subdomain | Поддомен для Firezone ВМ | string |
"vpn" |
|
subnet | Значение CIDR подсети для Firezone ВМ | string |
"192.168.1.0/24" |
|
vm_username | Имя пользователя для Firezone ВМ | string |
"admin" |
|
admin_email | Email администратора (логин) для доступа к веб-интерфейсу администратора Firezone | string |
"admin@example.com" |
да |
version | Версия Firezone для развертывания | string |
"0.7.32" |
|
wg_port | UDP порт для протокола WireGuard | string |
"51820" |
|
postgres | ||||
db_ver | Версия кластера PostgreSQL, используемого для хранения данных Firezone и Keycloak | string |
"15" |
|
db_user | Имя пользователя в кластере PostgreSQL | string |
"dbadmin" |
|
db_kc_name | Название базы данных для хранения данных Keycloak в кластере PostgreSQL | string |
"kc-db" |
|
db_firezone_name | Название базы данных для хранения данных Firezone в кластере PostgreSQL | string |
"firezone-db" |
|
keycloak | ||||
subdomain | Поддомен для Keycloak ВМ | string |
"kc" |
|
subnet | Значение CIDR подсети для Keycloak ВМ | string |
"192.168.2.0/24" |
|
port | Номер порта для обращения к Keycloak ВМ по HTTPS | string |
"8443" |
|
image_folder_id | ID каталога, в котором хранится образ Keycloak | string |
"b1g4n62gio32v96mdvrb" |
нет |
image_name | Имя образа Keycloak | string |
"keycloak" |
нет |
vm_username | Имя пользователя для Keycloak ВМ | string |
"admin" |
|
admin_user | Имя администратора (логин) для доступа к веб-интерфейсу администратора Keycloak | string |
"admin" |
|
le_cert_name | Имя сертификата для Keycloak в Yandex Certificate Manager | string |
"kc" |
|
test_user | Тестовый пользователь для проверки SSO в Keycloak и подключения к VPN | |||
name | Имя тестового пользователя (логин) для проверки SSO в Keycloak | string |
"user" |
|
Email тестового пользователя, который будет добавлен в Firezone после успешной аутентификации в Keycloak | string |
"user@example.com" |
да |
Перейдите в папку main
cd main
Выполните инициализацию Terraform:
terraform init
Проверьте список создаваемых облачных ресурсов:
terraform plan
Создайте ресурсы:
terraform apply
Ожидайте окончание создания ресурсов. Обработка запроса на выдачу сертификата в сервисе Let's Encrypt может выполняться до 30 минут.
После завершения процесса terraform apply в командной строке будут выведены URL-адреса для подключения к веб-интерфейсам Firezone и Keycloak, а также учетные записи администраторов Firezone и Keycloak. В дальнейшем эту информацию можно будет посмотреть с помощью команды terraform output
.
Посмотреть информацию о развернутых ресурсах
Название | Описание | Пример значения |
---|---|---|
firezone_admin_credentials |
Учетная запись администратора Firezone | "admin_email" = "admin@example.com" "admin_password" = "EP!f#YAfdaxd" |
firezone_url |
URL для веб-интерфейса Firezone | "https://vpn.example.com" |
keycloak_admin_credentials |
Учетная запись администратора Keycloak | "admin_username" = "admin" "admin_password" = "Ns?3lvB*HvHD" |
keycloak_url |
URL для веб-интерфейса Keycloak | "https://kc.example.com:8443/admin" |
Для вывода sensitive
значения указывайте его в команде terraform output
, например: terraform output firezone_admin_credentials
.
После завершения развертывания Firezone и Keycloak виртуальных машин перейдите в папку keycloak-config
, чтобы выполнить настройку Keycloak для сценария интеграции Keycloak с Firezone и Single Sign-On.
cd ../keycloak-config
Выполните инициализацию Terraform:
terraform init
Проверьте список создаваемых облачных ресурсов:
terraform plan
Создайте ресурсы:
terraform apply
После завершения процесса terraform apply в командной строке будет выведена информация для настройки интеграции Firezone и Keycloak, а также учетная запись тестового пользователя для проверки SSO в Keycloak и подключения к VPN. В дальнейшем эту информацию можно будет посмотреть с помощью команды terraform output
.
Посмотреть информацию о развернутых ресурсах
Название | Описание | Пример значения |
---|---|---|
keycloak_config_for_firezone |
Параметры для настройки интеграции Firezone и Keycloak | "client_id" = "firezone" "client_secret" = "Wxy2nthDXiMD42xmcD2mLgGxtjWbSDDc" "discovery_document_uri" = "https://kc.example.com:8443/realms/firezone/.well-known/openid-configuration" |
test_user_credentials |
Учетная запись тестового пользователя для проверки SSO в Keycloak и подключения к VPN | "test_user_name" = "user" "test_user_password" = "IfV6OvIKqzzn" |
Для вывода sensitive
значения указывайте его в команде terraform output
, например: terraform output test_user_credentials
.
После настройки Keycloak с помощью Terraform продолжите настройку Firezone.
https://firezone_url
, где firezone_url
- вывод команды terraform output firezone_url
в папке main
.terraform output firezone_admin_credentials
в папке main
.SETTINGS -> Defaults
для изменения настроек по умолчанию.Allowed IPs
укажите, для каких облачных IP подсетей (укажите через запятую адреса подсетей/маски) VPN клиенты будут направлять трафик в VPN туннель. Пример: 192.168.1.0/24, 192.168.2.0/24
.DNS Servers
укажите адреса DNS серверов, которые будут использоваться VPN клиентами. Если не планируется переназначения у клиента этих DNS адресов, то удалите информацию в этом поле. Пример: 192.168.1.2, 192.168.2.2
.Save
для применения настроек.SETTINGS -> Security
для изменения настроек безопасности.Allow unprivileged device configuration
, чтобы пользователь не мог изменить через пользовательский веб-интерфейс Firezone сетевые настройки для VPN клиента.Auto disable VPN
. Это позволит при удалении пользователя в Identity Provider (Keycloak в данном примере) отключить его VPN подключения.Add OpenID Connect Provider
для добавления Keycloak.OIDC Configuration
заполните поля:
Config ID
: keycloakLabel
: KeycloakOIDC scopes
: openid email profile offline_accessClient ID
: firezoneClient secret
: client_secret
из вывода terraform output keycloak_config_for_firezone
в папке keycloak-config
(значение указать без кавычек)Discovery Document URI
: discovery_document_uri
из вывода terraform output keycloak_config_for_firezone
в папке keycloak-config
(значение указать без кавычек)Redirect URI
: оставить пустымAuto-create users
для автоматического добавления пользователей в Firezone после их успешной аутентификации в KeycloakSave
в разделе OIDC Configuration
для применения настроек.Установите на своё устройство клиент WireGuard с сайта WireGuard. Дальнейшие шаги по настройке клиента WireGuard приведены на примере ОС Windows. Для других ОС название элементов интерфейса клиента может отличаться.
Перейдите в браузере по адресу https://firezone_url
, где firezone_url
- вывод команды terraform output firezone_url
в папке main
. Если у вас активна сессия администратора в веб-интерфейсе Firezone, то предварительно выполните Log Out
. Нажмите Sign in with Keycloak
. Произойдет редирект на веб-страницу Keycloak для Single Sign-On.
Войдите с учетной записью тестового пользователя из вывода команды terraform output test_user_credentials
в папке keycloak-config
.
После успешной аутентификации в веб-интерфейсе Firezone с тестовым пользователем добавьте устройство, с которого будет устанавливаться VPN подключение. Для этого нажмите Add Device
.
В открывшемся окне можете изменить название устройства и добавить его описание. Нажмите Generate Configuration
.
Появится окно с VPN конфигурацией для устройства. Нажмите Download WireGuard Configuration
для скачивания файла конфигурации. В приложении WireGuard для Android или iOS можно также отсканировать QR-код с этой страницы для добавления VPN туннеля.
Важно: не закрывайте это окно, пока не скачаете конфигурационный файл или не отсканируете QR-код. После закрытия окна VPN конфигурацию для устройства больше не получится посмотреть в веб-интерфейсе Firezone.
Добавьте новый VPN туннель (Import tunnel(s) from file
) в приложении WireGuard, используя скачанный конфигурационный файл.
Активируйте туннель нажатием на Activate
.
Проверьте на своём устройстве в командной строке с помощью ping 192.168.1.1
сетевую связность с шлюзом из облачной подсети firezone
. Вы подключились с помощью VPN туннеля к облачной инфраструктуре.
Чтобы удалить ресурсы, созданные с помощью Terraform:
keycloak-config
и выполните команду terraform destroy
.main
и выполните команду terraform destroy
.Внимание
Terraform удалит все ресурсы, созданные в этом сценарии, без возможности восстановления.