使用IaC技術將digiRunner安全佈署在AWS上
IaC ( Infrasturcture as Code 基礎設施即程碼 ) 是一種以 Code 建構 Infrastructure ( 基礎設施 ) 的方式。
本篇文章介紹如何使用 AWS 的 IaC 服務 CloudFormation 將 digiRunner 安全佈署在AWS上
什麼是CloudFormation ?
AWS CloudFormation 是 AWS 提供的一項 IaC 服務,使用戶能夠以自動化、安全的方式建模和管理基礎架構資源。使用 CloudFormation,開發人員可以使用 JSON 或 YAML 格式作為程式碼腳本來定義和設定 AWS 基礎架構資源。
以下是一小段以YAML腳本來建構 EC2 ( AWS虛擬伺服器 ) 的範本:
Resources:
MyEC2Instance:
Type: AWS::EC2::Instance
Properties:
ImageId: ami-0742b4e673072066f
InstanceType: t3.micro
SecurityGroups:
- !Ref SSHSecurityGroup
SSHSecurityGroup:
Type: AWS::EC2::SecurityGroup
Properties:
GroupDescription: Enable SSH access via port 22
SecurityGroupIngress:
- CidrIp: 0.0.0.0/0
FromPort: 22
IpProtocol: tcp
ToPort: 22
這段腳本指示CloudFormation要建立一台EC2,並且建立 SSHSecurityGroup 來作為這台EC2的防火牆,
接下來只要登入 AWS CloudFormation 的 Console 介面,將這個腳本上傳執行,大約等3分鐘即可建立完成。
------------------------------------------------------------------------------------------------------------
不過本篇的重點是如何「安全」的佈署上 AWS,所以我們先來看看在使用 CloudFormation 腳本時,會遇到那些安全問題。
第一個問題是:安裝佈署的過程中要設定密碼(例如資料庫的密碼),要如何避免用寫死的方式寫在腳本中 ?
第二個問題是:密碼不能以明碼的方式記錄,要如何在佈署上 AWS 的過程中為密碼加密 ?
第三個問題是:digiRunner Admin Console 的使用者登入密碼是由使用者自訂的,但在安裝過程中如何保持隱密且不落地 ?
在整個佈署階段中,可以拆分成幾個部份如下:( 以下是簡化的過程,非實際情況 )
1.初始參數設定 > 2.建構亂數密碼 > 3.將密碼儲存在AWS雲端上 > 4.建構資料庫 > 5.建構digiRunner (Container) > 6.最終設定
我們一一來說明:
1.初始參數設定:在這個階段由使用者自行設定要登入 digiRunner 的密碼(12位數英文+數字+特殊字元)
2.建構亂數密碼:在這個階段由安裝腳本用亂數產生隨機密碼(12位數英文+數字+特殊字元),預備給資料庫使用
3.將密碼儲存在AWS雲端上:將前二步驟 1.2. 的密碼儲存在 AWS 的另一個雲端服務(SSM parameter store)上,產生2組 SSM參數A與B
4.建構資料庫:從 SSM 取得參數B (亂數隨機的密碼),並在建構資料庫的過程中指定這個 SSM參數B 為資料庫密碼
5.建構digiRunner (Container):從 SSM 取得參數B (亂數隨機的密碼),並設定在 properties 裡,讓 digiRunner 可以連到資料庫並啟動成功。
6.最終設定:在這個階段,我們將「資料庫裡的使用者密碼」與「properties 裡的資料庫連線密碼」進行加密
a. 從 SSM 取得參數A ( 使用者自行設定的密碼 ),使用 digiRunner 的 ENC加密API 為這個密碼加密,然後更新 資料庫裡的使用者密碼。
b. 從 SSM 取得參數B ( 亂數隨機的密碼 ),使用 digiRunner 的 ENC加密API 為這個密碼加密,然後更新 properties裡的資料庫連線密碼。
在 CloudFormation 腳本中從 SSM 取得參數A,B 是以參照的位址呈現,所以不會看到實際的密碼內容。
如下圖,在建立資料庫的過程中,密碼指向SSM的參數
------------------------------------------------------------------------------------------------------------
藉由上述的流程,我們使用 IaC 技術快速地將 digiRunner 佈署上 AWS,並且保持了佈署過程中密碼的隱密性,達成密碼不落地的安全性。