Security Center支援接入K8s(Kubernetes)自建叢集進行統一管理和安全風險檢測。本文介紹如何接入K8s自建叢集。
版本限制
使用限制
支援接入的地區限制如下:
自建K8s叢集網路類型為VPC時,僅支援接入華東1(杭州)、華北2(北京)、華東2(上海)、華南1(深圳)和中國香港地區。
自建K8s叢集網路類型為公網時,無地區限制。
前提條件
已在伺服器上搭建K8s叢集。
已安裝Docker。
如需使用叢集暴露分析功能,根據您的叢集部署方式和存取控制策略配置情況,還需完成下述網路設定。更多資訊,請參見叢集暴露分析。
如果您的K8s叢集是通過混合雲的方式部署,且公網不可直接存取,那麼您需要先配置流量轉寄規則,確保網路連通後再進行叢集接入。
如果您的叢集設定了存取控制策略,請確保已將容器所在地區的IP位址集區加入存取控制的白名單。
接入K8s自建叢集
在左側導覽列,選擇。在控制台左上方,選擇需防護資產所在的地區:中國內地或非中國內地。
在叢集頁簽,單擊自建集群接入。
在自建集群管理面板,單擊自建集群接入,配置要接入的K8s自建叢集的資訊,然後單擊產生命令。
配置項
說明
集群名称
輸入自建K8s叢集的名稱,例如:text-001。
到期時間
選擇自建K8s叢集接入命令的到期時間。
分組
選擇叢集接入後的分組(即選擇叢集所在伺服器的分組)。
服務商
選擇叢集所在伺服器的服務商。
(可選)在開啟日誌地區,選擇是否開啟K8s日誌威脅檢測。
開啟K8s日誌威脅檢測,Security Center可以擷取更多的審計日誌以進行更全面的安全風險檢測。開啟威脅檢測前,您需要在K8s叢集中安裝Logtail組件並完成審計相關配置。具體操作,請參見開啟日誌威脅檢測。
登入叢集所在伺服器,建立text-001.yaml檔案,將產生的命令拷貝到該檔案中儲存,然後執行
kubectl apply -f text-001.yaml命令,完成叢集接入。步驟4中產生的命令預設不會接入Master和汙點節點。如果您需要接入Master和汙點節點,請參考下述說明修改YAML檔案配置。
完成K8s自建叢集接入後,您可以在叢集頁簽的叢集列表中查看已接入叢集的資訊。
開啟日誌威脅檢測
K8s叢集版本為1.16及以上時,您可以通過開啟K8s日誌威脅檢測為自建叢集提供更全面的安全風險檢測,例如檢測高危操作、攻擊行為等。
一、安裝Logtail組件
具體操作,請參見安裝Logtail組件(自建Kubernetes叢集)的安裝Logtail章節。
二、開啟叢集審計功能
以下步驟供您參考。更多資訊,請參見啟用叢集API Server審計功能。
已建立註冊叢集,並將自建Kubernetes叢集接入註冊叢集。具體操作,請參見建立ACK One註冊叢集。
在Master節點上配置審計配置策略檔案。
依次登入所有Master節點,在審計配置策略檔案的路徑/etc/kubernetes/audit-policy.yaml,請根據以下內容修改審計配置策略:
說明若您的叢集版本低於1.24,
apiVersion請使用audit.k8s.io/v1beta1,若叢集版本大於等於1.24,則使用audit.k8s.io/v1。更多詳細資料,請參見Kubernetes 1.24版本說明。apiVersion: audit.k8s.io/v1beta1 kind: Policy # Don't generate audit events for all requests in RequestReceived stage. omitStages: - "RequestReceived" rules: # The following requests were manually identified as high-volume and low-risk, # so drop them. - level: None users: ["system:kube-proxy"] verbs: ["watch"] resources: - group: "" # core resources: ["endpoints", "services"] - level: None users: ["system:unsecured"] namespaces: ["kube-system"] verbs: ["get"] resources: - group: "" # core resources: ["configmaps"] - level: None users: ["kubelet"] # legacy kubelet identity verbs: ["get"] resources: - group: "" # core resources: ["nodes"] - level: None userGroups: ["system:nodes"] verbs: ["get"] resources: - group: "" # core resources: ["nodes"] - level: None users: - system:kube-controller-manager - system:kube-scheduler - system:serviceaccount:kube-system:endpoint-controller verbs: ["get", "update"] namespaces: ["kube-system"] resources: - group: "" # core resources: ["endpoints"] - level: None users: ["system:apiserver"] verbs: ["get"] resources: - group: "" # core resources: ["namespaces"] # Don't log these read-only URLs. - level: None nonResourceURLs: - /healthz* - /version - /swagger* # Don't log events requests. - level: None resources: - group: "" # core resources: ["events"] # Secrets, ConfigMaps, and TokenReviews can contain sensitive & binary data, # so only log at the Metadata level. - level: Metadata resources: - group: "" # core resources: ["secrets", "configmaps"] - group: authentication.k8s.io resources: ["tokenreviews"] # Get repsonses can be large; skip them. - level: Request verbs: ["get", "list", "watch"] resources: - group: "" # core - group: "admissionregistration.k8s.io" - group: "apps" - group: "authentication.k8s.io" - group: "authorization.k8s.io" - group: "autoscaling" - group: "batch" - group: "certificates.k8s.io" - group: "extensions" - group: "networking.k8s.io" - group: "policy" - group: "rbac.authorization.k8s.io" - group: "settings.k8s.io" - group: "storage.k8s.io" # Default level for known APIs - level: RequestResponse resources: - group: "" # core - group: "admissionregistration.k8s.io" - group: "apps" - group: "authentication.k8s.io" - group: "authorization.k8s.io" - group: "autoscaling" - group: "batch" - group: "certificates.k8s.io" - group: "extensions" - group: "networking.k8s.io" - group: "policy" - group: "rbac.authorization.k8s.io" - group: "settings.k8s.io" - group: "storage.k8s.io" # Default level for all other requests. - level: Metadata在Master節點上配置Kube API Server檔案。
依次登入所有Master節點機器,在Kube API Server檔案的路徑/etc/kubernetes/manifests/kube-apiserver.yaml,完成以下相關配置:
根據以下樣本添加command參數
--audit-log-*:... spec: containers: - command: - kube-apiserver - --audit-log-maxbackup=10 - --audit-log-maxsize=100 - --audit-log-path=/var/log/kubernetes/kubernetes.audit - --audit-log-maxage=30 - --audit-policy-file=/etc/kubernetes/audit-policy.yaml ...根據以下樣本添加env參數
aliyun_logs_audit-*:您需要將以下樣本中的{cluster_id}替換為您叢集的Cluster ID。您可以登入Security Center控制台,在容器資產頁面擷取叢集的Cluster ID,具體位置請參見下圖。

... spec: containers: - command: - kube-apiserver - --audit-log-maxbackup=10 - --audit-log-maxsize=100 - --audit-log-path=/var/log/kubernetes/kubernetes.audit - --audit-log-maxage=30 - --audit-policy-file=/etc/kubernetes/audit-policy.yaml ... ... env: - name: aliyun_logs_audit-${cluster_id} value: /var/log/kubernetes/kubernetes.audit - name: aliyun_logs_audit-${cluster_id}_tags value: audit=apiserver - name: aliyun_logs_audit-${cluster_id}_product value: k8s-audit - name: aliyun_logs_audit-${cluster_id}_jsonfile value: "true" image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/kube-apiserver:v1.20.4-aliyun.1根據以下樣本掛載/etc/kubernetes/audit-policy.yaml到API Server Pod。
... spec: containers: - command: - kube-apiserver - --audit-log-maxbackup=10 - --audit-log-maxsize=100 - --audit-log-path=/var/log/kubernetes/kubernetes.audit - --audit-log-maxage=30 - --audit-policy-file=/etc/kubernetes/audit-policy.yaml ... ... env: - name: aliyun_logs_audit-${cluster_id} value: /var/log/kubernetes/kubernetes.audit - name: aliyun_logs_audit-${cluster_id}_tags value: audit=apiserver - name: aliyun_logs_audit-${cluster_id}_product value: k8s-audit - name: aliyun_logs_audit-${cluster_id}_jsonfile value: "true" image: registry-vpc.cn-shenzhen.aliyuncs.com/acs/kube-apiserver:v1.20.4-aliyun.1 ... ... volumeMounts: - mountPath: /var/log/kubernetes name: k8s-audit - mountPath: /etc/kubernetes/audit-policy.yaml name: audit-policy readOnly: true ... ... volumes: - hostPath: path: /var/log/kubernetes type: DirectoryOrCreate name: k8s-audit - hostPath: path: /etc/kubernetes/audit-policy.yaml type: FileOrCreate name: audit-policy ...
三、驗證日誌採集結果
單擊目標Project名稱。
查看相關日誌是否已採集到目標Project下的日誌庫(Logstore)。
四、開啟威脅檢測
在左側導覽列,選擇。在控制台左上方,選擇需防護資產所在的地區:中國內地或非中國內地。
在叢集頁簽,單擊自建集群接入。
找到需要開啟K8s日誌威脅檢測的自建叢集,在操作列單擊編輯。
在開啟日誌頁簽,選中開啟K8S日誌上報進行威脅檢測,配置審計日誌資訊,然後單擊儲存。
審計日誌Region:選擇審計日誌的儲存地區。
審計日誌Project:輸入一、安裝Logtail組件中建立的Project名稱。例如:如k8s-log-custom-sd89ehdq。
審計日誌LogStore:輸入一、安裝Logtail組件中自動建立的LogStore名稱。例如:audit-027b007a7dd11967a9f7e2449d8dc497。