我可以在 Microsoft Defender for Cloud 中看到以下建议
受影响的资源:
但是,我在Keycloak中设置了以下配置
settings = {
// ... other settings ...
"containerSecurityContext.enabled" = "true"
"containerSecurityContext.runAsUser" = "1001"
"containerSecurityContext.runAsNonRoot" = "true"
"containerSecurityContext.allowPrivilegeEscalation"= "false"
// ... other settings ...
}
为什么它仍然认为 keycloak Pod 正在以 root 用户身份运行?我该如何解决这个问题?
更新 - 2024 年 5 月 6 日:
% kubectl get pod keycloak-0 -n keycloak -o jsonpath='{.spec.containers[*].securityContext}'
{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"privileged":false,"readOnlyRootFilesystem":false,"runAsGroup":1001,"runAsNonRoot":true,"runAsUser":1001,"seccompProfile":{"type":"RuntimeDefault"}}%
% kubectl get pod keycloak-0 -n keycloak -o jsonpath='{.spec.securityContext}'
{"fsGroup":1001,"fsGroupChangePolicy":"Always"}%
% kubectl exec -it keycloak-0 -n keycloak -- sh
Defaulted container "keycloak" out of: keycloak, init-quarkus-directory (init)
$ id
uid=1001(keycloak) gid=1001 groups=1001
您在使用 Microsoft Defender for Cloud 时遇到的问题,尽管已将其配置为以非 root 用户身份运行,但仍将您的 Keycloak pod 标记为以 root 用户身份运行,这可能是由多种因素引起的
仔细检查安全上下文设置是否已正确应用并反映在 Pod 和容器级别
kubectl get pod -l app=keycloak -o jsonpath='{.items[*].spec.securityContext} {.items[*].spec.containers[*].securityContext}'
此命令将显示 Pod 及其容器的安全上下文设置。确认
runAsUser
、runAsNonRoot
和 allowPrivilegeEscalation
设置已正确反映。
检查 AKS 设置中是否存在任何可能覆盖部署中指定的安全上下文的集群范围策略或特定配置。检查任何 Pod 安全策略 (PSP) 或其他可能执行不同规则的准入控制器。检查是否有任何可能影响 Pod 执行行为的基于角色的访问控制 (RBAC) 设置或安全策略。
有时,安全建议可能不会在更改后立即更新。如果可能的话,在 Microsoft Defender for Cloud 中强制更新或重新扫描,以确保它反映集群的当前状态。
我感觉您的 Keycloak pod 配置为使用非 root 用户 ID (
1001
) 运行,但组 ID (gid
) 仍为 0
(root)。这可能会导致某些安全工具或策略仍然标记容器,因为该组是 root,即使用户不是。运行以下命令来检查状态-
kubectl exec -it $(kubectl get pod -l app=keycloak -o jsonpath="{.items[0].metadata.name}") -- /bin/bash
如果您看到类似的情况,那么要解决此问题并确保用户 ID 和组 ID 都设置为非 root 值,您需要调整 Kubernetes 部署配置。以下是您如何修改它以包含
runAsGroup
指令,该指令之前未根据您的输出进行设置。
更新您的部署 YAML 以将
runAsUser
和 runAsGroup
显式设置为非根值。
示例
apiVersion: apps/v1
kind: Deployment
metadata:
name: keycloak
labels:
app: keycloak
spec:
replicas: 1
selector:
matchLabels:
app: keycloak
template:
metadata:
labels:
app: keycloak
spec:
securityContext:
runAsUser: 1001
runAsGroup: 1001 # Set GID to a non-root value
runAsNonRoot: true
allowPrivilegeEscalation: false
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:15.0.2
imagePullPolicy: Always
ports:
- containerPort: 8080
securityContext:
runAsUser: 1001
runAsGroup: 1001 # Ensure the container also enforces this GID
runAsNonRoot: true
allowPrivilegeEscalation: false
您可以使用 -
kubectl apply -f keycloak-deployment.yaml
应用相同的方法并进行验证。
没有收到任何正在运行的容器作为 root 相关通知。