云安全中心支持接入K8s(Kubernetes)自建集群進行統一管理和安全風險檢測。本文介紹如何接入K8s自建集群。
版本限制
使用限制
支持接入的地域限制如下:
自建K8s集群網絡類型為VPC時,僅支持接入華東1(杭州)、華北2(北京)、華東2(上海)、華南1(深圳)和中國香港地域。
自建K8s集群網絡類型為公網時,無地域限制。
前提條件
已在服務器上搭建K8s集群。具體操作,請參見從零搭建K8s集群。
已安裝Docker。具體操作,請參見安裝Docker。
如果您的K8s集群是通過混合云的方式部署,且公網不可直接訪問,那么您需要先配置流量轉發規則,確保網絡連通后再進行集群接入。
指定一臺ECS服務器,將其訪問流量轉發到第三方K8s集群API Server所在的IDC服務器上。
例如:將執行轉發任務的ECS服務器10.0.XX.XX中A端口的流量,轉發至第三方K8s集群API Server所在的IDC服務器192.168.XX.XX的B端口。
CentOS 7命令
使用firewallcmd:
firewall-cmd --permanent --add-forward-port=port=<A端口>:proto=tcp:toaddr=<192.168.XX.XX>:toport=<B端口>
使用iptables:
# 開啟端口轉發 echo "1" > /proc/sys/net/ipv4/ip_forward # 設置端口轉發 iptables -t nat -A PREROUTING -p tcp --dport <A端口> -j DNAT --to-destination <192.168.XX.XX>:<B端口>
Windows命令
netsh interface portproxy add v4tov4 listenport=<端口A> listenaddress=* connectaddress=<192.168.XX.XX > connectport=<端口B> protocol=tcp
如果您的集群設置了訪問控制策略,請確保已將容器所在地域的IP地址池加入訪問控制的白名單。
地域
公網IP
私網IP
華東1(杭州)
47.96.166.214
100.104.12.64/26
華東2(上海)
139.224.15.48、101.132.180.26、47.100.18.171、47.100.0.176、139.224.8.64、101.132.70.106、101.132.156.228、106.15.36.12、139.196.168.125、47.101.178.223、47.101.220.176
100.104.43.0/26
華北1(青島)
47.104.111.68
100.104.87.192/26
華北2(北京)
47.95.202.245
100.104.114.192/26
華北3(張家口)
39.99.229.195
100.104.187.64/26
華北5(呼和浩特)
39.104.147.68
100.104.36.0/26
華南1(深圳)
120.78.64.225
100.104.250.64/26
華南3(廣州)
8.134.118.184
100.104.111.0/26
中國香港
8.218.59.176
100.104.130.128/26
日本(東京)
47.74.24.20
100.104.69.0/26
新加坡
8.219.240.137
100.104.67.64/26
美國(硅谷)
47.254.39.224
100.104.145.64/26
美國(弗吉尼亞)
47.252.4.238
100.104.36.0/26
德國(法蘭克福)
47.254.158.71
172.16.0.0/20
英國(倫敦)
8.208.14.12
172.16.0.0/20
印度尼西亞(雅加達)
149.129.238.99
100.104.193.128/26
接入K8s自建集群
登錄云安全中心控制臺。在控制臺左上角,選擇需防護資產所在的區域:中國或全球(不含中國)。
在左側導航欄,選擇 。
在集群頁簽,單擊自建集群接入。
在自建集群管理面板,單擊自建集群接入,配置要接入的K8s自建集群的信息,然后單擊生成命令。
配置項
說明
集群名稱
輸入自建K8s集群的名稱,例如:text-001。
過期時間
選擇自建K8s集群接入命令的過期時間。
分組
選擇集群接入后的分組(即選擇集群所在服務器的分組)。
服務商
選擇集群所在服務器的服務商。
(可選)在開啟日志區域,選擇是否開啟K8s日志威脅檢測。
開啟K8s日志威脅檢測,云安全中心可以獲取更多的審計日志以進行更全面的安全風險檢測。開啟威脅檢測前,您需要在K8s集群中安裝Logtail組件并完成審計相關配置。具體操作,請參見開啟日志威脅檢測。
登錄集群所在服務器,新建text-001.yaml文件,將生成的命令拷貝到該文件中保存,然后執行
kubectl apply -f text-001.yaml
命令,完成集群接入。說明上述text-001.yaml、
kubectl apply -f text-001.yaml
中的text-001為集群名稱的示例。實際操作時,請使用實際設置的集群名稱替換text-001。完成K8s自建集群接入后,您可以在集群頁簽的集群列表中查看已接入集群的信息。
開啟日志威脅檢測
K8s集群版本為1.16及以上時,您可以通過開啟K8s日志威脅檢測為自建集群提供更全面的安全風險檢測,例如檢測高危操作、攻擊行為等。
一、安裝Logtail組件
具體操作,請參見安裝Logtail組件(自建Kubernetes集群)的安裝Logtail章節。
二、開啟集群審計功能
以下步驟供您參考。更多信息,請參見啟用集群API Server審計功能。
已創建注冊集群,并將自建Kubernetes集群接入注冊集群。具體操作,請參見通過控制臺創建注冊集群。
在Master節點上配置審計配置策略文件。
依次登錄所有Master節點,在審計配置策略文件的路徑/etc/kubernetes/audit-policy.yaml,請根據以下內容修改審計配置策略:
apiVersion: audit.k8s.io/v1beta1 # This is required. 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。您可以登錄云安全中心控制臺,在容器資產頁面獲取集群的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。