Налаштування безпечного приватного Docker-реєстру з Nexus та конфігурацією SSL

pic

У сучасному світі контейнеризації Docker революціонізував спосіб розробки, тестування та розгортання додатків. Однак коли йдеться про управління та розповсюдження Docker-образів, публічні репозиторії, такі як Docker Hub, можуть не підходити для підприємств або організацій, які потребують приватності, безпеки та контролю над управлінням своїми образами. У такому випадку вирішенням часто стає приватний Docker-реєстр.

У цій статті ми проведемо вас через процес налаштування безпечного приватного Docker-реєстру за допомогою Sonatype Nexus та конфігурації з SSL, щоб забезпечити безпечну комунікацію для операцій з Docker-образами (push та pull).

Що таке Nexus Repository Manager?

Sonatype Nexus Repository Manager — це відкритий менеджер репозиторіїв, який підтримує різні типи артефактів, включаючи Docker-образи, Maven, npm та інші. Він дозволяє командам безпечно зберігати, керувати та розповсюджувати Docker-образи в межах їх інфраструктури. За допомогою Nexus можна створювати власні Docker-репозиторії та отримувати до них доступ через HTTP або HTTPS.

Налаштувавши Nexus як приватний Docker-реєстр, ви отримаєте:

  • Контроль над Docker-образами: Можливість безпечно зберігати образи, які не доступні публічно.
  • Швидший доступ: Зменшення залежності від зовнішніх репозиторіїв та прискорення процесу розгортання.
  • Індивідуальні робочі процеси: Можливість керувати версіями, доступом та контролем Docker-образів.

Попередні вимоги

Для того, щоб слідувати цьому посібнику, вам буде потрібно:

  • Linux-сервер або віртуальна машина (VM).
  • Docker, встановлений на вашій машині.
  • Nexus Repository Manager, встановлений та запущений.
  • Доменне ім’я або IP-адреса для вашого Nexus-сервера.
  • Базові знання роботи з командним рядком.

Крок 1: Встановлення Nexus Repository Manager

Для початку вам потрібно встановити Nexus Repository Manager. Ви можете запустити Nexus на фізичному сервері або використовувати Docker.

Варіант 1: Використання Docker

Запустити Nexus в Docker-контейнері — це найшвидший спосіб.

docker run -d -p 8081:8081 --name nexus sonatype/nexus3

Ця команда завантажить і запустить Nexus на порту 8081 (стандартний HTTP порт).

Варіант 2: Пряме встановлення

Якщо ви віддаєте перевагу встановленню Nexus безпосередньо, завантажте останню версію з вебсайту Nexus. Після завантаження слідуйте інструкціям щодо встановлення для вашої операційної системи.

Після встановлення Nexus буде доступний за адресою http://<IP>:8081.

Крок 2: Доступ до веб-інтерфейсу Nexus

Якщо Nexus працює, ви можете отримати доступ до веб-інтерфейсу через ваш браузер. Перейдіть за адресою:

http://<IP>:8081

Використовуйте стандартні облікові дані:

  • Логін: admin
  • Пароль: admin123

Після першого входу обов’язково змініть пароль на більш безпечний.

Крок 3: Налаштування Nexus для Docker-реєстру

Тепер, коли Nexus працює, налаштуємо його для хостингу Docker-образів.

  1. Увійдіть в Nexus: Використовуйте облікові дані для входу.
  2. Створіть Docker-репозиторій:
  • У панелі управління Nexus натисніть на вкладку “Repositories” зліва.
  • Виберіть “Create repository”, потім виберіть “docker (hosted)”.
  • Назвіть ваш репозиторій (наприклад, my-docker-repo).
  • Встановіть HTTP порт (за замовчуванням 5000, але ви можете використовувати інший).
  • Включіть SSL, якщо ви хочете налаштувати безпечну комунікацію відразу, але ми розглянемо це на наступному кроці.

3.
**Зберегти репозиторій
: Натисніть “Save” для створення вашого Docker-реєстру.

Крок 4: Увімкнення SSL на Nexus для безпечних операцій з Docker

Тепер, коли ми налаштували наш Docker-репозиторій, давайте забезпечимо його безпеку за допомогою SSL.

Налаштування Nexus для використання SSL:

  • Скопіюйте згенерований файл nexus.keystore до директорії /opt/nexus/ssl/ (або до директорії, де встановлений Nexus).
  • Відредагуйте файл nexus.properties, який знаходиться за шляхом /opt/nexus/etc/.

Додайте таку конфігурацію:

application-https-port=8443  
ssl.keystore.path=/opt/nexus/ssl/nexus.keystore  
ssl.keystore.password=

Перезапустіть Nexus:

Після збереження конфігурації перезапустіть Nexus, щоб застосувати налаштування SSL:

./bin/nexus restart

Тепер Nexus буде доступний безпечно через HTTPS за адресою https://<IP>:8443.

Налаштування Docker для push та pull з Nexus через HTTPS

Довіряти SSL сертифікату:

Якщо ви використовуєте самопідписаний сертифікат, Docker має довіряти йому. Для цього потрібно додати сертифікат (nexus.crt) до сховища сертифікатів Docker-клієнта:

sudo cp nexus.crt /usr/local/share/ca-certificates/  
sudo update-ca-certificates

Увійти в Nexus Docker Registry:

Запустіть наступну команду для входу в Nexus через HTTPS:

docker login <IP>:8443

Введіть ваші облікові дані Nexus, коли буде запитано.

Push Docker-образів до Nexus:

Позначте ваш Docker-образ з адресою реєстру Nexus і завантажте його:

docker tag myapp:v1 <IP>:8443/myapp:v1  
docker push <IP>:8443/myapp:v1

Pull Docker-образів з Nexus:

Щоб завантажити образ з Nexus, використовуйте:

docker pull <IP>:8443/myapp:v1

(Необов’язково) Зміна пароля через Nexus REST API

Якщо ви бажаєте, ви також можете змінити пароль за допомогою Nexus REST API. Ось як це можна зробити за допомогою простого API виклику:

Використовуйте наступну команду curl для оновлення пароля користувача admin:

curl -u admin:<current-password> -X PATCH "http://<IP>:8081/service/rest/v1/security/users/admin" \  
-H "Content-Type: application/json" \  
-d '{"password": "<new-password>"}'
  • Замініть <current-password> на поточний пароль (наприклад, admin123).
  • Замініть <IP> на IP-адресу або доменне ім’я вашого Nexus-сервера.
  • Замініть <new-password> на новий пароль, який ви хочете встановити для користувача admin.

Після виконання цієї команди пароль буде оновлено, і ви зможете увійти з новим паролем.

(Необов’язково) Налаштування NGINX як зворотного проксі з термінацією SSL

Ви можете покращити безпеку та гнучкість вашої конфігурації, використовуючи зворотний проксі, такий як NGINX, для термінації SSL.

Встановлення NGINX:

sudo apt install nginx

Налаштування NGINX для SSL:

Створіть конфігурацію NGINX для переадресації запитів до Nexus.
Ось приклад конфігурації:

server {  
 listen 443 ssl;  
 server_name <your-domain>;  

 ssl_certificate /etc/nginx/ssl/nexus.crt;  
 ssl_certificate_key /etc/nginx/ssl/nexus.key;  

 location / {  
 proxy_pass http://localhost:8081;  
 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 $scheme;  
 }  
}  

server {  
 listen 80;  
 server_name <your-domain>;  
 return 301 https://$host$request_uri;  
}

Перезапуск NGINX:

Після налаштування NGINX, перезапустіть сервіс:

sudo systemctl restart nginx

Ось Docker команди після налаштування NGINX з SSL для вашого Nexus Repository:

docker login <your-ip>:443  
docker tag <image-name>:<tag> <your-ip>:443/<repository>:<tag>  
docker push <your-ip>:443/<repository>:<tag>  
docker pull <your-ip>:443/<repository>:<tag>

Висновок

Виконуючи кроки, описані вище, ви успішно налаштували безпечний приватний Docker-реєстр за допомогою Sonatype Nexus та налаштували SSL для забезпечення безпечних операцій push і pull. Завдяки SSL, ваші Docker-образи передаються безпечно, що захищає чутливі дані та підвищує надійність і швидкість ваших деплойментів.

Незалежно від того, чи використовуєте ви самопідписаний сертифікат для внутрішнього використання, чи довірений SSL-сертифікат від CA, ця конфігурація забезпечить безпеку вашого Docker-реєстру від потенційних вразливостей, пов'язаних з незашифрованим зв'язком.

Забезпечивши ваш Docker-реєстр, ви не лише отримуєте підвищену безпеку, але й здобуваєте гнучкість і контроль над вашими Docker-образами, адаптуючи їх до конкретних потреб вашої організації.

Перекладено з: Setting Up a Secure Private Docker Registry with Nexus and SSL Configuration

Leave a Reply

Your email address will not be published. Required fields are marked *