Berjalan di sepanjang jalur peningkatan infrastruktur, saya memutuskan untuk menyelesaikan pertanyaan kuno dan menyakitkan - tanpa isyarat yang tidak perlu, memberikan kesempatan kepada rekan kerja (pengembang, penguji, administrator, dll) untuk mengelola mesin virtual mereka secara mandiri di ovirt. Ovirt memiliki beberapa komponen yang perlu dikonfigurasi untuk menyelesaikan masalah saya: antarmuka web itu sendiri, konsol noVNC, dan pengunggahan gambar disk.
Saya tidak menemukan tombol "Jadikan Buruk", jadi saya tunjukkan tombol mana yang saya putar untuk mengatasi masalah ini. Petunjuk lengkap di bawah potongan:

DISCLAIMER:
Sebelum memulai, saya ingin menarik perhatian Anda pada fakta bahwa untuk beberapa alasan yang tidak saya ketahui, domain infrastruktur dibuat di zona privat lan, lokal, dan seterusnya.
Saya tidak tahu apa yang menghalangi saya menggunakan domain organisasi di zona publik. Misalnya, alih-alih domain Alex-GLuck-Awesome-Company.local, Anda dapat menggunakan domain tersebut dengan aman untuk situs web perusahaan Alex-GLuck-Awesome-Company.com.
Jika Anda takut tidak dapat melacak domain di organisasi Anda, dan ini akan merusak sesuatu, maka dengan hanya 100 rubel setahun Anda dapat membeli domain terpisah untuk infrastruktur aglac.com.
Mengapa lebih menguntungkan menggunakan domain di zona publik:
1. Organisasi Anda memiliki layanan yang dapat diakses publik: vpn, berbagi file (Seafile, Nextcloud), dan lainnya. Menyiapkan enkripsi lalu lintas pada layanan tersebut biasanya agak asal-asalan, dan kami tidak akan melindungi dari serangan MitM karena itu sulit (sebenarnya tidak).
Atau Anda memiliki satu alamat layanan di dalam kantor, dan satu lagi dari Internet, dan koneksi ini perlu dipertahankan, sehingga menyia-nyiakan sumber daya spesialis kami yang terbatas. Ya, karyawan harus mengingat alamat yang berbeda, dan itu merepotkan.
2. Anda dapat menggunakan otoritas sertifikat gratis untuk mengenkripsi layanan internal Anda.
PKI Anda sendiri adalah layanan yang perlu didukung; 100 rubel setahun untuk kesempatan menggunakan PKI dari otoritas sertifikasi gratis lebih dari sekadar membayar waktu karyawan yang dapat menggunakannya untuk tugas lain.
3. Saat menggunakan otoritas sertifikat Anda sendiri, Anda akan menghalangi karyawan dan kolega jarak jauh Anda yang ingin bekerja dengan BYOD (membawa laptop, ponsel, tablet mereka sendiri) dan Anda tidak dapat mengelola perangkat mereka. Mereka menghadirkan Mac, Linux, Android, iOS, Windows - tidak ada gunanya mendukung kebun binatang seperti itu.
Tentu saja ada pengecualian dalam segala hal, dan bank dengan perusahaan keras lainnya yang telah menetapkan kebijakan keamanan tidak akan pernah mampu meningkatkan layanan bagi karyawannya.
Bagi mereka, ada otoritas sertifikasi berbayar yang dapat menandatangani sertifikat CA mereka dengan jumlah tertentu (“layanan penandatanganan root” Google).
Ada alasan lain mengapa lebih menguntungkan menggunakan domain publik (yang terpenting domain itu milik Anda), tetapi artikel ini bukan tentang itu.
Intinya adalah...
PERHATIAN! Jika Anda menambahkan sertifikat Let's Encrypt CA ke daftar tepercaya ovirt, hal ini dapat memengaruhi keamanan sistem Anda!
Hal pertama yang perlu Anda perhatikan adalah mengekspos antarmuka Ovirt ke Internet adalah praktik yang buruk Hal ini tidak masuk akal secara praktis, dan menimbulkan ancaman keamanan tambahan.
Oleh karena itu, Anda perlu mendapatkan sertifikat di salah satu bastion host kami, lalu mentransfer sertifikat dan kunci ke host kami dengan ovirt-engine.
Kami menambahkan alamat eksternal bastion host kami ke dns dengan nama ovirt kami ovirtengine.example.com, saya akan meninggalkan instalasi certbot dan nginx di belakang layar (cara melakukan ini sudah dijelaskan di Habré).
Menyiapkan versi njinx >=1.15.7
/etc/nginx/conf.d/default.conf
server {
server_name _;
listen 80 default_server;
location /robots.txt { alias /usr/share/nginx/html/robots.txt; }
location /.well-known {
root /usr/share/nginx/html;
}
location / {
return 444;
}
}
server {
server_name _;
listen 443 ssl http2 default_server;
location /robots.txt { alias /usr/share/nginx/html/robots.txt; }
location /.well-known {
root /usr/share/nginx/html;
}
ssl_certificate /etc/nginx/ssl/$ssl_server_name/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/$ssl_server_name/privkey.pem;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
# позволяем серверу прикреплять OCSP-ответы, тем самым уменьшая время загрузки страниц у пользователей
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
location / {
return 444;
}
}
Kemudian kami mendapatkan sertifikat dan kunci kami:
certbot certonly --nginx -d ovirtengine.example.com
Arsipkan sertifikat dan kunci kami:
tar Phczf /tmp/ovirtengine.example.com.tgz /etc/letsencrypt/live/ovirtengine.example.com
Unduh arsip dari bastion host dan unggah ke mesin ovirt kami:
scp bastion-host:/tmp/ovirtengine.example.com.tgz /tmp/
scp /tmp/ovirtengine.example.com.tgz ovirtengine.example.com:/
Mari kita beralih ke tujuan
Selanjutnya, kami membongkar arsip kami dan membuat symlink untuk menyederhanakan pemahaman tentang sistem lokasi file:
tar Pxzf /ovirtengine.example.com.tgz && rm -f ovirtengine.example.com.tgz
mkdir -p /etc/letsencrypt/live
ln -f -s /etc/letsencrypt/live /etc/pki/letsencrypt
Kami mengonfigurasi pki bawaan di Ovirt sehingga penyimpanan sertifikat java (openjdk) digunakan untuk memverifikasi sertifikat:
cat << EOF > /etc/ovirt-engine/engine.conf.d/99-setup-pki.conf
ENGINE_HTTPS_PKI_TRUST_STORE="/etc/pki/java/cacerts"
ENGINE_HTTPS_PKI_TRUST_STORE_PASSWORD=""
EOF
Kami mengonversi CA dari let's encrypt ke format der dan menambahkannya ke penyimpanan sertifikat ovirt java trust store (ini adalah wadah yang berisi daftar sertifikat, sistem seperti itu digunakan di java):
openssl x509 -outform der -in /etc/pki/letsencrypt/ovirtengine.example.com/chain.pem -out /tmp/ovirtengine.example.com.chain.der
keytool -import -alias "Let's Encrypt Authority X3" -file /tmp/ovirtengine.example.com.chain.der -keystore /etc/pki/ovirt-engine/.truststore -storepass $(grep '^ENGINE_PKI_TRUST_STORE_PASSWORD' /etc/ovirt-engine/engine.conf.d/10-setup-pki.conf | cut -f 2 -d '"')
rm -f /tmp/ovirtengine.example.com.chain.der
Kami mengedit pengaturan SSL untuk Apache, menambahkan parameter untuk mendukung symlink dan menghapus parameter CA yang dapat digunakan untuk memeriksa sertifikat (secara default, kumpulan sistem CA tepercaya akan digunakan untuk verifikasi):
sed -r -i 's|^(SSLCACertificateFile.*)|#1|g' /etc/httpd/conf.d/ssl.conf
sed -r -i '0,/(^#?SSLCACertificateFile.*)/ s//1nOptions FollowSymlinks/' /etc/httpd/conf.d/ssl.conf
Kemudian, untuk berjaga-jaga, kami mencadangkan file asli yang dihasilkan melalui PKI otomatis ovirt dan menggantinya dengan symlink dengan file dari Let's Encrypt:
ln -f -s /etc/pki/letsencrypt/ovirtengine.example.com/fullchain.pem /etc/pki/ovirt-engine/apache-chain.pem
services=( 'apache' 'imageio-proxy' 'websocket-proxy' )
for i in "${services[@]}"; do
cp /etc/pki/ovirt-engine/certs/$i.cer{,."$( date +%F )".bak}
cp /etc/pki/ovirt-engine/keys/$i.key.nopass{,."$( date +%F )".bak}
ln -f -s /etc/pki/letsencrypt/ovirtengine.example.com/privkey.pem /etc/pki/ovirt-engine/keys/$i.key.nopass
ln -f -s /etc/pki/letsencrypt/ovirtengine.example.com/cert.pem /etc/pki/ovirt-engine/certs/{apache,imageio-proxy,websocket-proxy}.cer
done
Kami memulihkan konteks SElinux pada file dan memulai ulang layanan kami (httpd, ovirt-engine, ovirt-imageio-proxy, ovirt-websocket-proxy):
restorecon -Rv /etc/pki
systemctl restart httpd ovirt-engine ovirt-imageio-proxy ovirt-websocket-proxy
httpd — server web apache
mesin ovirt - antarmuka web ovirt
ovirt-imageio-proxy - daemon untuk mengunduh image disk
ovirt-websocket-proxy - layanan untuk menjalankan konsol noVNC
Semua hal di atas telah diuji pada Ovirt versi 4.2.
Perpanjangan otomatis sertifikat pada ovirt
Menurut praktik keamanan yang baik, tidak boleh ada hubungan antara bastion host dan ovirt, dan sertifikat hanya dikeluarkan untuk 3 bulan. Di sinilah muncul isu kontroversial tentang bagaimana saya melaksanakan perpanjangan sertifikat.
Saya memiliki buku pedoman yang memungkinkan yang dijalankan oleh mandor setiap hari pada jam 5 pagi sesuai jadwal. Buku pedoman ini masuk ke ovirt, memeriksa masa berlaku sertifikat, dan jika tersisa kurang dari 5 hari sebelum masa berlakunya habis, buku pedoman ini masuk ke bastion host dan mulai memperbarui sertifikat.
Setelah memperbarui sertifikat, ia mengarsipkan folder berisi file, mengunduhnya ke host Forman dan mengekstraknya ke host Ovirt. Setelah itu SElinux memulihkan konteks pada file dan memulai ulang layanan kami.
Sumber: www.habr.com
