使用 Guard 保护应用程序
Guard 是一个运行时安全性解决方案, IBM Cloud® Code Engine 可用于管理应用程序的入局请求和出局响应。 Guard 使用一组按应用程序自动学习的微规则来管理应用程序入局请求和出局响应。 因此,您可以使用 Guard 来识别应用程序异常并支持态势感知。 Guard 还可以阻止不符合预期模式的请求或响应。
在本教程中,部署 Hello World 应用程序并使用 Guard 对其进行保护。
开始之前:
所有 Code Engine 用户都需要具有现收现付帐户。 教程可能会产生成本。 使用 "成本估算器" 可根据您的预计使用量生成成本估算。 有关更多信息,请参阅 Code Engine 定价。
将警戒学习程序应用程序作为每个项目的服务进行部署
Guard-Learner 是一项服务,用于学习项目中每个受到 Guard 保护的应用程序所需的微规则。 要部署 Guard-Learner 应用程序,请在项目中创建该应用程序。 请注意,每个 Code Engine 项目仅创建一次 Guard-Learner 应用程序。
- 通过使用
--v project
选项将应用程序的可视性设置为项目级别,保护应用程序并避免将其暴露给潜在的罪犯。 有关更多信息,请参阅 Code Engine 应用程序的可视性选项。 - 使用
--min 1 --max 1
选项扩展 Guard-Learner 服务以持续运行单个实例。
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。
- 为 Guard 提供项目名称空间及其保护的相应应用程序名称和 URL。
- 向 Guard 提供 Guard-Learner 的 URL。
- 设置
USE_CONFIGMAP=true
以在名为guardian-${SERVICE_NAME}
的 configmap 中维护微规则。 - 请考虑使用
--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 的缺省设置是允许任何请求或响应,并在报告后学习任何新模式。 当应用程序主动为请求提供服务时, Guard 通常需要大约 30 分钟来了解应用程序请求和响应的模式,并构建相应的微规则。 在初始学习周期之后, Guard 仅在检测到行为更改时发送警报。
请注意,在缺省设置中, Guard 会继续学习任何新行为,因此避免在新行为重新发生时重复报告警报。 正确的安全过程应包括查看 Guard 检测到的任何新行为。
Guard 还可以配置为在其他操作方式下操作,例如:
- 初始学习期后从自动学习转向手动微规则管理
- 当请求/响应不符合微规则时阻止这些请求/响应
有关更多信息或故障诊断帮助,请参阅 #code-engine 通道。
清除教程应用程序
完成本教程后,可以除去 Hello World 应用程序, Hello World Guard 和 Guard-Learner ,如以下示例中所示。
ibmcloud ce application delete -n ${SERVICE_NAME}
ibmcloud ce application delete -n ${SERVICE_NAME}-guard
ibmcloud ce application delete -n guard-learner