digiRunner AWS 安全 佈署

使用IaC技術將digiRunner安全佈署在AWS上

詹耀宗 Mark Zhan 2024/11/24 18:21:54
11

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的參數

CloudFormation Sample

------------------------------------------------------------------------------------------------------------

藉由上述的流程,我們使用 IaC 技術快速地將 digiRunner 佈署上 AWS,並且保持了佈署過程中密碼的隱密性,達成密碼不落地的安全性。

 

詹耀宗 Mark Zhan