Stein 오픈스택 클라우드 서버 구축(14) - SSL (HTTPS) 접속 가능한 오픈스택 대시보드 구성하기
blog post
처음 오픈스택 서비스를 구성하면 대시보드가 기본 HTTP (80포트)로 서비스 되는 것을 볼 수 있습니다. 아시다시피 HTTP는 통신 과정에서 세션 암호화를 하지 않기 때문에 여러가지 보안 취약점에 노출될 수 밖에 없습니다. 이에 따라, SSL 암호화 통신을 제공하는 HTTPS로 접근할 수 있도록 대시보드를 재구성해 보겠습니다. 물론 오픈스택 대시보드 역시 HTTPD 기반으로 제공되는 서비스이므로, 기존의 아파치 웹 서버 구성과 크게 다를 바 없습니다.
SSL 통신에서 필요한 요소 중 하나가 바로 인증서 입니다. openssl을 통해 간단하게 인증서를 하나 발급받도록 하겠습니다. 만약 기존에 사용중인 인증서가 있다면 해당 인증서를 사용해도 무관합니다.
먼저 인증서를 저장할 디렉토리를 하나 생성합니다.
[root@Controller ~]# mkdir /etc/httpd/SSL
다음으로 openssl 커맨드를 사용하여 방금 생성한 디렉토리에 인증서를 발급받습니다.
[root@Controller ]# cd /etc/httpd/SSL/
[root@Controller ]# sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/SSL/openstack-selfsigned.key -out /etc/httpd/SSL/openstack
-selfsigned.crt
Generating a 2048 bit RSA private key
.......................................................................+++
.......+++
writing new private key to '/etc/httpd/SSL/openstack-selfsigned.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:KR
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:mycloud.com
Email Address []:
저는 단순 테스트 용도이므로 Country Name(KR), Common Name 정도만 입력하고 나머지는 전부 패스했습니다.
Horizon 대시보드의 local_settings 파일에서 아래와 같이 SSL 관련 옵션을 추가해 줍니다.
[root@Controller ~]# vim /etc/openstack-dashboard/local_settings
...생략...
USE_SSL = True
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
httpd 웹 서비스에서 443포트 구성을 지원하기 위해 관련 모듈이 필요합니다. mod_ssl이 해당 모듈을 지원하므로 설치합니다.
[root@Controller ~]# yum install mod_ssl
다음으로 오픈스택 대시보드의 443포트를 설정해주면 됩니다. openstack-dashboard.conf에서 설정해주면 됩니다. 기존에는 아래와 같이 설정되어 있습니다. (물론 이 글을 보시는 분들의 환경마다 차이가 있을 수 있습니다.)
[root@Controller ~]# vim /etc/httpd/conf.d/openstack-dashboard.conf
WSGIDaemonProcess dashboard
WSGIProcessGroup dashboard
WSGISocketPrefix run/wsgi
WSGIApplicationGroup %{GLOBAL}
WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
Alias /dashboard/static /usr/share/openstack-dashboard/static
<Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi>
Options All
AllowOverride All
Require all granted
</Directory>
<Directory /usr/share/openstack-dashboard/static>
Options All
AllowOverride All
Require all granted
</Directory>
위의 설정에서 아래와 같이 기존 항목은 주석처리하고 443 포트 관련 Virtualhost 정보를 설정합니다.
#WSGIDaemonProcess dashboard
#WSGIProcessGroup dashboard
#WSGISocketPrefix run/wsgi
#WSGIApplicationGroup %{GLOBAL}
#WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
#Alias /dashboard/static /usr/share/openstack-dashboard/static
#<Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi>
# Options All
# AllowOverride All
# Require all granted
#</Directory>
#<Directory /usr/share/openstack-dashboard/static>
# Options All
# AllowOverride All
# Require all granted
#</Directory>
<VirtualHost *:443>
Alias /dashboard/static /usr/share/openstack-dashboard/static
SSLEngine On
SSLCertificateFile /etc/httpd/SSL/openstack-selfsigned.crt
SSLCACertificateFile /etc/httpd/SSL/openstack-selfsigned.crt
SSLCertificateKeyFile /etc/httpd/SSL/openstack-selfsigned.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
Header add Strict-Transport-Security "max-age=15768000"
WSGIDaemonProcess dashboard user=apache group=apache processes=3 threads=10
WSGIScriptAlias /dashboard /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi
WSGIProcessGroup dashboard
RedirectPermanent ^/$ /dashboard
ServerAlias 192.168.0.26
<Directory /usr/share/openstack-dashboard/openstack_dashboard/wsgi>
Options All
AllowOverride All
Require all granted
</Directory>
<Directory /usr/share/openstack-dashboard/static>
Options All
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
443 포트의 VirtualHost를 생성하고 앞서 생성한 인증서 정보를 위의 SSL 관련 옵션에 넣어줍니다.
또 기존 Directory 정보는 전부 443 Virtual Host로 넣어줍니다.
이제 브라우저에서 443 포트로 접근이 가능한지 확인해봅니다.
https로 접속하는 것을 확인할 수 있습니다.