1. Certificate Manager
- SSL 인증서를 등록하고 NCP의 서비스(Load Balancer, CDN)와 연계하여 사용할 수 있게 해주는 서비스 입니다.
- 등록된 인증서의 다양한 정보들을 확인할 수 있고 인증서의 만료일이 다가오면 설정해둔 담당자에게 알람을 보낼 수도 있습니다.
2. Certificate Manager 등록
- 이전에 만들어둔 DNS를 통해 SSL 인증서를 발급 받고 Certificate Manager에 등록 및 ALB에 연계하여 사용해보도록 하겠습니다.
2-1. SSL 인증서 발급
1. 인증서 발급을 위해 Web01 서버에서 certbot을 설치합니다.
# Certbot을 설치하기 위해서는 EPEL 저장소가 필요합니다.
# EPEL 저장소를 시스템에 추가합니다.
yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
# Certbot을 설치합니다.
# Certbot은 Let's Encrypt 인증 기관을 통해 무료 SSL/TLS 인증서를 발급하고 자동으로 갱신하는 도구입니다.
yum -y install certbot
2. certbot 명령어로 *.angrycloud.store와 angrycloud.store 도메인을 인증서에 등록하며 , 소유 인증 방식은 dns를 이용합니다.
명령어를 사용하면 이메일을 입력하고 동의를 두 번 누릅니다.
# certbot certonly: Certbot을 사용하여 인증서를 발급하고, 인증서만 발급하고 웹 서버 구성은 변경하지 않음을 나타냅니다.
# --manual: 수동 모드를 사용하도록 설정합니다. 사용자가 DNS 레코드를 직접 추가하고 확인하는 작업이 필요합니다.
# -d *.angrycloud.store -d angrycloud.store: 인증서에 포함할 도메인 이름을 지정합니다. *.angrycloud.store와 angrycloud.store 두 가지 도메인을 인증서에 추가합니다.
# --preferred-challenges dns: DNS 레코드를 통해 도메인 소유권을 확인하는 방법으로, 웹 서버에 영향을 주지 않습니다.
certbot certonly --manual -d *.angrycloud.store -d angrycloud.store --preferred-challenges dns
3. 동의까지 했다면 다음과 같은 메시지가 뜹니다.
DNS에 레코드를 추가해야 하므로 Global DNS로 가겠습니다.
4. Global DNS에서 레코드 추가를 클릭합니다.
5. 3번에서 떴던 메시지 대로 TXT 레코드를 추가합니다.
레코드명 : _acme-challenge
타입 : TXT
TTL : 빠른 적용을 위해 60초
레코드 값 : n74W123G1oGWtyBvLOTk1S0Y4530p83jDAVhCmXdkYo (3번에서 복사)
6. 설정 적용을 클릭합니다.
7. 배포를 클릭합니다.
8. 이제 서버에서 엔터를 한번 누르면 레코드 메시지가 하나 더 나옵니다. 이것도 똑같이 Global DNS에 추가해줍니다.
추가 후 서버에서 바로 엔터를 누르지 말고 9번을 봐주세요.
9. 구글 관리 콘솔 도구상자 (https://toolbox.googleapps.com/apps/dig/#TXT/)로 접속해서 제대로 등록 되었는지 확인합니다.
1번에 레코드명을 넣고 TXT를 클릭하면 하단에 등록했던 값들이 뜹니다.
등록했던 2개의 값이 뜨는 것을 확인합니다.
10. 이제 서버에서 엔터를 누릅니다. 인증서가 생성된 위치를 봐둡니다.
2-2. SSL 인증서 등록
1. 이제 인증서를 등록해야하니 Service -> Security -> Certificate Manager를 클릭합니다.
2. 외부 인증서 등록을 클릭합니다.
3. PEM 인코딩된 Private Key, Certificate Body, Certificate Chain을 넣어줘야 합니다.
이름은 알기쉽게 도메인명으로 넣어주고 키값을 확인하기 위해 서버로 돌아갑니다.
4. 인증서가 생성된 디렉토리로 가서 확인해보면 pem키가 4개 있습니다.
cd /etc/letsencrypt/live/xxxxxxx.xxxx
ls
5. 인증서 등록에서는 Private Key, Certificate Body, Certificate Chain가 필요합니다.
Private Key(인증서 개인키) : privkey.pem
Certificate Body(서버 인증서) : cert.pem
Certificate Chain(루트 인증서, 체인 번들(체인 인증서1,체인 인증서2) : root + chain.pem
chain.pem에는 체인 인증서1과 체인 인증서2만 들어가있기 때문에 루트 인증서를 따로 넣어줄 필요가 있습니다.
루트 인증서는 letsencrypt.org 홈페이지에서 제공중 입니다.
https://letsencrypt.org/certs/isrgrootx1.pem.txt
-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
-----END CERTIFICATE-----
6. 내용에 맞춰 키값들을 넣어주고 추가를 클릭합니다.
7. 인증서가 등록되었습니다. 이제 이 인증서를 ALB에 적용해 HTTPS 통신을 해보겠습니다.
2-3. SSL 인증서 적용
1. Load Balancer 탭으로 들어가 ALB 선택 -> 리스너 설정 변경을 클릭합니다.
2. HTTPS(443)를 추가 해줘야하니 리스너 추가를 클릭합니다.
3. 443 리스너에 대한 기본 설정을 해줍니다.
프로토콜 : HTTPS 통신을 위한 설정이니 HTTPS를 선택합니다.
포트 : HTTPS의 기본 포트인 443을 입력합니다.
SSL Certificate 선택 : 위에서 등록했던 SSL 인증서를 선택 합니다.
TLS 최소지원 버전 : 1.0, 1.1, 1.2 중 원하는 버전을 선택합니다.
Target Group : 타겟 그룹을 3개 생성했었는데 2개는 조건에 의해 분산을 시키는 타겟이니
기본 타겟(test-web-tg)을 선택합니다.
4. 정보 확인 후 확인을 클릭합니다.
5. 추가된 443 리스너에 SSL 인증서가 적용되었습니다.
하지만 이 상태로는 기본 타겟(web-01,02)의 웹(www.angrycloud.store)에만 인증서가 적용되니 다른 타겟들도 적용시키겠습니다.
443 리스너 선택 -> 규칙 조회/변경을 클릭합니다.
6. 규칙 추가를 클릭합니다.
7. 이 부분은 Load Balancer-2 글에서 했던 설정과 동일하게 추가해줍니다.
8. 규칙을 추가해줬다면 이제 지금까지 생성한 도메인 전부에서 HTTPS 통신이 가능합니다.
웹에 접속하여 HTTPS 통신이 되는걸 확인합니다.
9. 전부 SSL 인증서가 적용되어 HTTPS 통신을 하고 있습니다.
그러나 현재 상태로는 HTTP로 접속하면 그대로 HTTP로 접속하므로 HTTP 접속 시 HTTPS로 요청을 넘기게 해보겠습니다.
2-4. HTTPS 리다이렉트
1. ALB의 리스너 설정에서 HTTP(80) 리스너를 선택 후 규칙 조회/변경을 클릭합니다.
2. path 기반 도메인은 기본 도메인에 포함되기 때문에, 리다이렉트 설정을 따로 할 필요가 없습니다.
path 기반 규칙을 제거합니다.
3. blog 먼저 설정해보겠습니다. blog 규칙을 선택 -> 규칙 변경을 클릭합니다.
4. 액션을 수정하고 확인을 클릭합니다.
액션 : Redirection (리다이렉트가 목적이니 Redirection을 선택합니다)
Protocol : HTTPS (HTTPS로 보내야하니 HTTPS를 선택합니다)
Port : 443 (HTTPS의 기본 포트 443을 입력합니다)
5. 수정된 액션을 확인하고 기본 규칙 선택 -> 규칙 변경을 클릭합니다.
6. blog 규칙때와 마찬가지로 수정하고 확인을 클릭합니다.
액션 : Redirection (리다이렉트가 목적이니 Redirection을 선택합니다)
Protocol : HTTPS (HTTPS로 보내야하니 HTTPS를 선택합니다)
Port : 443 (HTTPS의 기본 포트 443을 입력합니다)
7. 이제 blog와 www에 대한 HTTP 요청은 전부 HTTPS로 리다이렉트 됩니다.
8. 443 리스너는 인증서 적용 단계에서 분산 규칙을 추가했기 때문에 모든 80요청은 443으로 보내지고 443의 규칙에 의해 부하분산 됩니다.
9. http로 웹 접속시 https로 접속 되는 것을 확인합니다.
3. SSL 인증서 만료 알람
1. SSL 인증서 만료가 다가올때 알람을 보낼 통보대상을 설정해야하는데 아직 담당자를 추가하지 않았습니다.
Notification Setting -> 통보대상관리를 클릭해서 담당자를 추가해보겠습니다.
2. NCP의 자원을 모니터링하고 알람을 보낼 수 있는 Cloud Insight 메뉴로 들어와졌습니다.
Cloud Insight는 나중에 써보기로하고 일단 대상자 추가를 클릭합니다.
3. 통보대상의 정보를 입력하고 등록을 클릭합니다.
지금 입력한 휴대폰 번호와 이메일로 통보를 받을 수 있습니다.
4. 대상자가 추가되었습니다. Certificate Manager의 Notification Setting 탭으로 돌아갑니다.
5. 담당자 이름에서 관리자를 클릭하면 추가했던 통보대상 목록이 나오는데 웹관리자를 선택하면 등록했던 휴대폰 번호와 이메일 주소가 뜹니다.
통보방법은 SMS + Email, SMS, Email 3가지 중 원하는 것 선택하고 추가 -> 설정 저장을 클릭합니다.
6. 통보대상이 추가되었습니다.
7. 이제 등록된 SSL 인증서의 만료일이 다가오면 통보대상으로 알람이 가게 됩니다.
Certificate Manager에 SSL 인증서를 등록하여 ALB에 적용 및 알람 설정을 해보았습니다.
Web03과 04 서버는 반납하고 다음 글에서는 NCP 서비스들의 성능/운영 지표를 모니터링하며 이벤트 발생 시 알람을 보낼 수 있는 Cloud Insight를 사용해보겠습니다.
Cloud Insight : https://angrycloud.tistory.com/33