使用 Guard 保護應用程式安全
Guard 是執行時期安全解決方案,您可以使用 IBM Cloud® Code Engine 來控管應用程式的送入要求及送出回應。 Guard 使用一組每個應用程式自動學習的微規則,來控管應用程式送入要求及送出回應。 因此,您可以使用 Guard 來識別應用程式異常,並支援「情境感知」。 Guard 也可以封鎖不符合預期型樣的要求或回應。
在本指導教學中,部署 Hello World 應用程式並使用 Guard 保護它。
開始之前:
所有 Code Engine 使用者都必須具有「隨收隨付制」帳戶。 指導教學可能會產生成本。 使用「成本預估器」可根據您的預估用量來產生成本預估。 如需相關資訊,請參閱 Code Engine 定價。
將 guard-學習者應用程式部署為個別專案服務
Guard-學習者是一項服務,可學習專案中每一個受保護應用程式的必要微規則。 若要部署 Guard-學習者應用程式,請在專案中建立它。 請注意,每個 Code Engine 專案只能建立一次 Guard-學習者應用程式。
- 透過使用
--v project選項將應用程式的可見性設為專案層次,來保護您的應用程式,並避免將它公開給潛在違規者。 如需相關資訊,請參閱 Code Engine 應用程式的可見性選項。 - 調整 Guard-學習者服務,以使用
--min 1 --max 1選項持續執行單一實例。
ibmcloud ce application create -n guard-learner -v project --min 1 --max 1 -p 8888 -i ghcr.io/ibm/workload-security-guard/guard-learner
範例輸出
Creating application 'guard-learner'...
[...]
Run 'ibmcloud ce application get -n guard-learner' to check the application status.
OK
http://guard-learner.p8abcd4abcd.svc.cluster.local
建立及部署受保護的 Hello World 應用程式
建立 Hello World 應用程式,並指派 project 可見性給它。 在下列範例中,您可以變更應用程式名稱,並設定不同的映像檔及埠。
- 透過使用
--v project選項將應用程式的可見性設為專案層次,來保護您的應用程式,並避免將它公開給潛在違規者。 如需相關資訊,請參閱 Code Engine 應用程式的可見性選項。 - 請考量使用
--min 1選項將最小調整值設定為單一實例。
export SERVICE_NAME="myapp"
ibmcloud ce application create -n ${SERVICE_NAME} -v project -min 1 -p 8080 -i icr.io/codeengine/hello
範例輸出
Creating application 'myapp'...
[...]
Run 'ibmcloud ce application get -n myapp' to check the application status.
OK
http://myapp.p8abcd4abcd.svc.cluster.local
尋找名稱空間和服務 URL
擷取已部署應用程式及專案 Guard-Leaner 的相關資訊。
export NAMESPACE=`ibmcloud ce project current -o json|jq -r .kube_config_context`
export GUARD_URL=`ibmcloud ce application get -n guard-learner -o url`
export SERVICE_URL=`ibmcloud ce application get -n ${SERVICE_NAME} -o url`
echo "The protected service name '${SERVICE_NAME}' namespace '${NAMESPACE}' url '${SERVICE_URL}'"
echo "The guard learner url is '${GUARD_URL}'"
範例輸出
The protected service name 'myapp' namespace 'p8abcd4abcd' url 'http://myapp.p8abcd4abcd.svc.cluster.local'
The guard learner url is 'http://guard-learner.p8abcd4abcd.svc.cluster.local'
透過 Guard 將 Hello World 應用程式公開至網際網路
新增 Hello World 保護,以安全地將 Hello World 應用程式公開至網際網路。
ibmcloud ce application create -n ${SERVICE_NAME}-guard --min 1 -p 22000 \
-e GUARD_URL=${GUARD_URL} \
-e SERVICE_URL=${SERVICE_URL} \
-e SERVICE_NAME=${SERVICE_NAME} \
-e NAMESPACE=${NAMESPACE} \
-i ghcr.io/ibm/workload-security-guard/guard-rproxy
範例輸出
Creating application 'myapp-guard'...
[...]
Run 'ibmcloud ce application get -n myapp-guard' to check the application status.
OK
https://myapp-guard.p8abcd4abcd.us-south.codeengine.appdomain.cloud
您可以透過 Hello World 保護所公開的 URL 來存取受保護的 Hello World 應用程式。
附註:
- 針對您要保護的任何應用程式部署 Guard。
- 將專案名稱空間及其保護的對應應用程式名稱和 URL 提供給 Guard。
- 為 Guard 提供 Guard-學習者的 URL。
- 設定
USE_CONFIGMAP=true,以在名為guardian-${SERVICE_NAME}的配置對映中維護微規則。 - 考量使用
--min 1選項將 Guard 應用程式的最小規模設定為單一實例。
管理 Hello World 應用程式的安全並取得狀況狀態提示
Guard 在應用程式安全狀態中提供狀況狀態提示。 發生安全警示時,您可以在 Guard 的日誌檔中找到它們。
ibmcloud ce application logs -n ${SERVICE_NAME}-guard
範例輸出
[...]
{"level":"warn","message":"SECURITY ALERT! HttpRequest: Headers: KeyVal: Known Key X-B3-Traceid: Digits: Counter out of Range: 25"}
[...]
安全警示在保護日誌檔中顯示為警告,並以字串 SECURITY ALERT!開頭。 保護的預設設定是容許任何要求或回應,並在報告之後學習任何新的型樣。 當應用程式主動處理要求時, Guard 通常需要大約 30 分鐘才能瞭解應用程式要求及回應的型樣,並建置對應的微規則。 在起始學習期間之後, Guard 只會在偵測到行為變更時傳送警示。
請注意,在預設設定中, Guard 會繼續瞭解任何新行為,因此避免在新行為重新發生時反覆地報告警示。 正確的安全程序應該包括檢閱 Guard 偵測到的任何新行為。
保護也可以配置成在其他作業模式下運作,例如:
- 在起始學習期間之後從自動學習移至手動微規則管理
- 當要求/回應不符合微規則時封鎖要求/回應
如需相關資訊或疑難排解說明,請參閱 #code-engine channel。
清除指導教學應用程式
完成本指導教學之後,您可以移除 Hello World 應用程式、Hello World Guard 及 Guard-學習者,如下列範例所示。
ibmcloud ce application delete -n ${SERVICE_NAME}
ibmcloud ce application delete -n ${SERVICE_NAME}-guard
ibmcloud ce application delete -n guard-learner