本文章同時發佈於:
大家好,繼上篇Week18 - 用Let's Encrypt來為你的網站設定免費的SSL保護吧 - 實作篇實作Let's Encrypt取得憑證的方式後,但家有沒有發現,Let's Encrypt的憑證有效期限非常短只有三個月,如果每三個月就要手動換一次會很麻煩,所以Let's Encrypt有提供自動更新憑證的功能 - Auto-Renew。
我們這次將實作Auto-Renew配合AWS的CLI來更新憑證。
驗證上由於多了一個Load Balancer,所以會複雜些。
與上篇最大的不同,就是不再是直接將DNS指向EC2的Instance,而是指向Load Balancer。
並透過Load Balancer作分流導向EC2的驗證Instance,而Instance驗證完畢後會將憑證上傳至Load Balancer。最後設定Crontab來定時執行這些驗證,以自動化取得與更新憑證。
首先,將Load Balancer的DNS name複製至DNS網站上,並設定CNAME紀錄
創建Target group,讓此Target group會把request導向Instance的3002 port,
將Target group掛載至Load Balancer,這邊即是設定當request網址為api.messfar.com
,就將request導至剛剛所設的Target group
將Instance掛載至Target groupt
將request的導向設定完畢後,我們需要創建AIM來讓收到此request的Instance有能力透過AWS CLI來上傳憑證,所以我們這邊就到IAM頁面來創建此使用者
勾選程式設計方式存取
由於目前的情境不複雜,我們直接選取直接連接現有政策
,並勾選AWSCertificateManagerFullAccess
以下我都沒有特別設定,直接一路點下一步
複製存取金鑰ID
及私密存取金鑰
,稍後設定AWS CLI會使用到
接下來與上篇相同,我們連入此Instance然後透過CertBot驗證
驗證完畢後,我們設定AWS CLI Configure,並把剛剛複製的存取金鑰ID
及私密存取金鑰
貼上,並把Load Balancer的區域也打上
接著我們就可以透過AWC CLI上傳憑證至AWS的Certificate Manager了
$ sudo ./copyCert.sh api.messfar.com ~/w3school-40-weeks/week19
$ ./uploadCert.sh
接著你會得到此憑證的ARN,就是此憑證在AWS的路徑,我們在設定定時更新時,需要將ARN打上,才會更新至此憑證
我們將copyCert.sh
與renewCert.sh
設定至Crontab,讓自動更新可以定時執行
$ sudo vi /etc/crontab
而copyCert.sh
與renewCert.sh
後方的參數分別為
copyCert.sh <你的domain> <你的folder>
renewCert.sh <你的domain> <你的folder> <憑證的ARN>
以下是我的憑證的範例
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 23 * * * root ~/w3school-40-weeks/week19/copyCert.sh api.messfar.com ~/w3school-40-weeks/week19
1 23 * * * ec2-user ~/w3school-40-weeks/week19/renewCert.sh api.messfar.com ~/w3school-40-weeks/week19/ arn:aws:acm:ap-northeast-1:397662572793:certificate/605b09e2-4c57-4c3d-852d-1fa70f08bfb4
把AWS的Certificate Manager掛載至Load Balancer上就可以了,撒花~
謝謝你的閱讀,也歡迎分享討論指證~