云安全中心支持接入K8s(Kubernetes)自建集群进行统一管理和安全风险检测。本文介绍如何接入K8s自建集群。
版本限制
使用限制
支持接入的地域限制如下:
自建K8s集群网络类型为VPC时,仅支持接入华东1(杭州)、华北2(北京)、华东2(上海)、华南1(深圳)和中国香港地域。
自建K8s集群网络类型为公网时,无地域限制。
前提条件
已在服务器上搭建K8s集群。
已安装Docker。
如果您的K8s集群是通过混合云的方式部署,且公网不可直接访问,那么您需要先配置流量转发规则,确保网络连通后再进行集群接入。
如果您的集群设置了访问控制策略,请确保已将容器所在地域的IP地址池加入访问控制的白名单。
接入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。