AKS - 应避免以 root 用户身份运行容器

问题描述 投票:0回答:1

我可以在 Microsoft Defender for Cloud 中看到以下建议

enter image description here

受影响的资源:

enter image description here

但是,我在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
kubernetes keycloak kubernetes-helm azure-aks
1个回答
0
投票

您在使用 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
设置已正确反映。

enter image description here

检查 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

enter image description here

如果您看到类似的情况,那么要解决此问题并确保用户 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
应用相同的方法并进行验证。

enter image description here

enter image description here enter image description here

没有收到任何正在运行的容器作为 root 相关通知。

© www.soinside.com 2019 - 2024. All rights reserved.