Развертывание Identity Provider Keycloak на виртуальной машине и Managed PostgreSQL®
В этой лабораторной работе вы развернете Identity Provider Keycloak в облаке Cloud.ru для централизованной аутентификации пользователей. Вы создадите инфраструктуру, настроите подключение к управляемой базе данных Managed PostgreSQL®, опубликуете сервис через Nginx и обеспечите безопасный доступ по HTTPS. В результате вы получите готовый сервис аутентификации, полностью изолированный в собственной VPC и доступный из интернета.
Вы будете использовать следующие сервисы:
-
Виртуальные машины — виртуальная машина в облаке для размещения приложения.
-
Публичный IP-адрес — для доступа к сервису через интернет.
-
Managed PostgreSQL® — управляемая база данных PostgreSQL.
-
VPC сеть — изолированная виртуальная сеть для создания безопасной инфраструктуры.
-
nip.io — бесплатный сервис динамического DNS для получения публичного доменного имени и сертификата. Вы также можете использовать собственное зарегистрированное доменное имя и SSL-сертификат для организации доступа.
-
Nginx — для проксирования запросов и организации защищённого HTTPS-доступа к приложению.
-
Let’s Encrypt — для автоматического получения бесплатного SSL-сертификата.
Шаги:
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
-
Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.
1. Разверните ресурсы в облаке
На этом шаге вы подготовите сеть, группу безопасности, виртуальную машину и кластер Managed PostgreSQL®. Все ресурсы будут расположены в одной VPC, что обеспечит сетевую изоляцию.
-
Создайте виртуальную сеть с названием identity-provider-VPC.
-
Создайте подсеть со следующими параметрами:
-
Название: identity-provider-subnet.
-
VPC: identity-provider-VPC.
-
Адрес: 10.10.1.0/24.
-
-
Создайте группу безопасности с названием identity-provider и добавьте в нее правила:
-
Правило входящего трафика:
-
Протокол: TCP;
-
Порт: 443;
-
Тип источника: IP-адрес;
-
Источник: 0.0.0.0/0.
-
-
Правило входящего трафика:
-
Протокол: TCP;
-
Порт: 80;
-
Тип источника: IP-адрес;
-
Источник: 0.0.0.0/0.
-
-
Правило исходящего трафика:
-
Протокол: Любой;
-
Тип адресата: IP-адрес;
-
Адресат: 0.0.0.0/0.
-
-
-
Создайте виртуальную машину со следующими параметрами:
-
Название: identity-provider.
-
Образ: публичный образ Ubuntu 22.04.
-
VPC: identity-provider-VPC.
-
Подсети: identity-provider-subnet.
-
Подключить публичный IP: оставьте опцию включенной.
-
Тип IP: оставьте прямой IP-адрес.
-
Группы безопасности: SSH-access_ru.AZ-1 и identity-provider.
-
Логин: keycloak.
-
Метод аутентификации: Публичный ключ и Пароль.
-
Публичный ключ: укажите ключ, созданный ранее.
-
Пароль: задайте пароль.
-
Имя хоста: identity-provider.
-
-
Создайте кластер Managed PostgreSQL со следующими параметрами:
-
Имя кластера: identity-provider.
-
Название базы данных: identity_provider_database.
-
Версия PostgreSQL: 16.
-
Режим: Стандарт.
-
Тип: Single.
-
Подсеть: identity-provider-subnet.
-
Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.
-
Убедитесь, что ресурсы созданы и отображаются в личном кабинете:
-
На странице Сети → VPC отображается сеть identity-provider-VPC, а в списке ее подсетей — identity-provider-subnet.
-
На странице Сети → Группы безопасности отображается группа безопасности identity-provider со статусом «Создана».
-
На странице Инфраструктура → Виртуальные машины отображается виртуальная машина identity-provider со статусом «Запущена».
-
На странице Базы данных → Managed PostgreSQL® отображается кластер identity-provider со статусом «Доступен».
2. Настройте окружение виртуальной машины
На этом шаге вы установите необходимые пакеты и подготовите среду для Keycloak.
-
Активируйте сетевой интерфейс:
sudo cloud-init cleansudo cloud-init init -
Обновите систему и установите утилиты:
sudo apt update && sudo apt upgrade -ysudo apt install curl wget unzip software-properties-common -y -
Установите и запустите Nginx:
sudo apt install nginx -ysudo systemctl enable nginxsudo systemctl start nginx -
Установите Java 17:
sudo apt install openjdk-17-jdk -yexport JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> ~/.bashrc -
Установите Certbot:
sudo apt install certbot python3-certbot-nginx -y
3. Настройте защищенный доступ через Nginx
На этом шаге вы зарегистрируете доменное имя, настроите Nginx в качестве защищенного прокси, получите SSL-сертификат и ограничите доступ через межсетевой экран.
-
Создайте конфигурационный файл Nginx:
sudo nano /etc/nginx/sites-available/identity-provider.conf -
Вставьте код, заменив <IP-ADDRESS> на значение публичного IP-адреса виртуальной машины:
server {listen 80;server_name <IP-ADDRESS>.nip.io www.<IP-ADDRESS>.nip.io;location / {proxy_pass http://127.0.0.1:8080;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto https;proxy_set_header X-Forwarded-Host $host;proxy_set_header X-Forwarded-Port 443;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_buffer_size 128k;proxy_buffers 4 256k;proxy_busy_buffers_size 256k;proxy_connect_timeout 60s;proxy_send_timeout 60s;proxy_read_timeout 60s;}} -
Сконфигурируйте межсетевой экран:
sudo ufw allow OpenSSHsudo ufw allow 'Nginx Full'sudo ufw enable -
Активируйте конфигурацию и перезапустите Nginx:
sudo ln -sf /etc/nginx/sites-available/identity-provider.conf /etc/nginx/sites-enabled/identity-provider.confsudo rm -f /etc/nginx/sites-enabled/defaultsudo nginx -tsudo systemctl reload nginx -
Выпустите SSL-сертификат:
sudo certbot --nginx -d <IP-ADDRESS>.nip.io --redirect --agree-tos -m <EMAIL>Где:
-
<IP-ADDRESS> — публичный IP-адрес виртуальной машины.
-
<EMAIL> — email для регистрации сертификата.
-
-
Перейдите по адресу https://<IP-ADDRESS>.nip.io и убедитесь, что браузер отмечает соединение как безопасное.
4. Установите и запустите Keycloak
На этом шаге вы установите Keycloak, настроите подключение к базе данных и запустите сервис как systemd-службу.
-
Загрузите и распакуйте Keycloak:
cd /optsudo wget https://github.com/keycloak/keycloak/releases/download/26.0.2/keycloak-26.0.2.tar.gzsudo tar -xzf keycloak-26.0.2.tar.gzsudo mv keycloak-26.0.2 keycloaksudo chown -R keycloak:keycloak /opt/keycloaksudo chmod o+x /opt/keycloak/bin/ -
Создайте файл конфигурации Keycloak:
sudo nano /opt/keycloak/conf/keycloak.conf -
Вставьте код, заменив значения параметров ниже на свои:
db=postgresdb-username=<POSTGRES-ADMIN-USER>db-password=<POSTGRES-ADMIN-PASSWORD>db-url=jdbc:postgresql://<POSTGRES-IP>/identity_provider_databaseproxy=edgehostname=https://<IP-ADDRESS>.nip.iohttp-enabled=trueproxy-headers=xforwardedhostname-strict=falsehostname-admin=https://<IP-ADDRESS>.nip.iohealth-enabled=truemetrics-enabled=trueГде:
-
<POSTGRES-ADMIN-USER> — имя пользователя кластера Managed PostgreSQL®.
-
<POSTGRES-ADMIN-PASSWORD> — пароль указанного пользователя.
-
<POSTGRES-IP> — приватный IP-адрес кластера.
-
<IP-ADDRESS> — публичный IP-адрес виртуальной машины.
-
-
Соберите приложение:
sudo -u keycloak /opt/keycloak/bin/kc.sh build -
Создайте файл службы systemd:
sudo nano /etc/systemd/system/keycloak.service -
Содержимое файла:
[Unit]Description=Keycloak Identity ProviderAfter=network.targetWants=network.target[Service]Type=simpleUser=keycloakGroup=keycloakEnvironment=JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64Environment=KC_LOG_LEVEL=INFOWorkingDirectory=/opt/keycloakExecStart=/opt/keycloak/bin/kc.sh startExecReload=/bin/kill -s HUP $MAINPIDKillMode=mixedKillSignal=SIGINTTimeoutStopSec=30Restart=alwaysRestartSec=10[Install]WantedBy=multi-user.target -
Создайте временного администратора:
sudo -u keycloak /opt/keycloak/bin/kc.sh bootstrap-admin user -
Запустите сервис:
sudo systemctl daemon-reloadsudo systemctl enable keycloaksudo systemctl start keycloak -
Перейдите по адресу https://<IP-ADDRESS>.nip.io и войдите в администраторскую консоль Keycloak, используя созданные учетные данные.
5. Отключите SSH-доступ
Когда вы развернули и настроили сервис, закройте доступ по SSH для повышения безопасности.
-
В личном кабинете на верхней панели слева нажмите
и выберите Инфраструктура → Виртуальные машины.
-
В списке виртуальных машин выберите identity-provider.
-
Перейдите на вкладку Сетевые параметры.
-
В строке подсети нажмите
и выберите Изменить группы безопасности.
-
Удалите группу SSH-access_ru и сохраните изменения.
-
Убедитесь, что доступа нет — попробуйте подключиться к виртуальной машине по SSH. После отключения доступа по SSH, администрирование сервиса будет доступно через серийную консоль виртуальной машины.
Что дальше
В ходе лабораторной работы вы развернули Keycloak, настроили его взаимодействие с Managed PostgreSQL®, обеспечили безопасный доступ через Nginx и отключили неиспользуемый SSH-доступ.
Узнавайте больше о работе с сервисами и получайте практические навыки управления облаком, выполняя лабораторные работы.
- Перед началом работы
- 1. Разверните ресурсы в облаке
- 2. Настройте окружение виртуальной машины
- 3. Настройте защищенный доступ через Nginx
- 4. Установите и запустите Keycloak
- 5. Отключите SSH-доступ
- Что дальше