接入K8s自建集群
云安全中心支持接入K8s(Kubernetes)自建集群进行统一管理和安全风险检测。本文介绍如何接入K8s自建集群。
版本限制
使用限制
支持接入的地域限制如下:
自建K8s集群网络类型为VPC时,仅支持接入华东1(杭州)、华北2(北京)、华东2(上海)、华南1(深圳)和中国香港地域。
自建K8s集群网络类型为公网时,无地域限制。
前提条件
接入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集群)。
登录日志服务控制台。
创建Project。具体操作,请参见创建Project。
建议创建一个以
k8s-log-custom-
开头的Project,例如k8s-log-custom-sd89ehdq。登录您的Kubernetes集群。
执行如下命令安装Logtail及其他依赖组件。
重要请确保用于执行脚本的机器中,已安装kubectl命令。
目前,alibaba-log-controller组件只支持Kubernetes 1.6及以上版本。
如果您不需要CRD功能,可以删除
alibaba-cloud-log-all/templates/alicloud-log-config.yaml
文件,然后重新执行下述命令。
下载安装包并解压。
中国地域
wget https://logtail-release-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/kubernetes/0.4.0/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
海外地域
wget https://logtail-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/kubernetes/0.4.0/alibaba-cloud-log-all.tgz; tar xvf alibaba-cloud-log-all.tgz; chmod 744 ./alibaba-cloud-log-all/k8s-custom-install.sh
修改配置文件
./alibaba-cloud-log-all/values.yaml
。# ===================== 必需要补充的内容 ===================== # 目标Project名称。 SlsProjectName: # Project所属地域。 Region: # Project所属阿里云账号ID,需使用双引号("")包裹。 AliUid: "11**99" # 阿里云账号或RAM用户的AccessKey ID和AccessKey Secret,需具备AliyunLogFullAccess权限。 AccessKeyID: AccessKeySercret: # 自定义集群ID,命名只支持大小写,数字,短划线(-)。 ClusterID: # ========================================================== # 是否开启指标采集相关组件,可选参数: true、false, 默认true。 SlsMonitoring: true # 网络类型,可选参数:Internet、Intranet,默认使用Internet。 Net: Internet
命令中各参数说明如下所示,请根据实际情况替换。
参数
说明
SlsProjectName
配置为您在步骤2中创建的Project名称。
Region
您的Project所在的地域ID。例如华东1(杭州)的地域ID为
cn-hangzhou
。更多信息,请参见开服地域。AliUid
您的阿里云账号(主账号)ID,需使用双引号包裹(""),例如
AliUid: "11**99"
。如何获取,请参见获取日志服务所在的阿里云账号(主账号)ID。AccessKeyID
您的阿里云账号的AccessKey ID。推荐使用RAM用户的AccessKey,并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权。
AccessKeySercret
您的阿里云账号的AccessKey Secret。推荐使用RAM用户的AccessKey并授予RAM用户AliyunLogFullAccess权限。相关操作,请参见创建RAM用户及授权。
ClusterID
自定义集群ID,命名只支持大小写,数字,短划线(-)。该参数对应后面操作中的
${your_k8s_cluster_id}
。重要不同的Kubernetes集群,请勿配置相同的集群ID.。
SlsMonitoring
是否开启指标采集相关组件,可选项:
true(默认值):开启。
false:不开启。
Net
网络类型。可选项:
Internet(默认值):公网。
Intranet:内网。
安装Logtail及其他依赖组件。
bash k8s-custom-install.sh; kubectl apply -R -f result
安装完成后,在该Project下自动创建如下日志服务资源。
请勿删除名为
config-operation-log
的Logstore。在自建Kubernetes集群上安装时,默认为Logtail授予
privileged
权限,主要为避免删除其他Pod时可能出现的container text file busy
错误。更多信息,请参见Bug 1468249、Bug 1441737和 issue 34538。
二、开启集群审计功能
以下步骤供您参考。更多信息,请参见在注册集群中使用集群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 ...
- 根据以下示例添加command参数
三、验证日志采集结果
登录日志服务控制台。
单击目标Project名称。
查看相关日志是否已采集到目标Project下的日志库(Logstore)。
四、开启威胁检测
登录云安全中心控制台。在控制台左上角,选择需防护资产所在的区域:中国或全球(不含中国)。
在左侧导航栏,选择 。
在集群页签,单击自建集群接入。
找到需要开启K8s日志威胁检测的自建集群,在操作列单击编辑。
在开启日志页签,选中开启K8S日志上报进行威胁检测,配置审计日志信息,然后单击保存。
审计日志Region:选择审计日志的存储地域。
审计日志Project:输入一、安装Logtail组件中创建的Project名称。例如:如k8s-log-custom-sd89ehdq。
审计日志LogStore:输入一、安装Logtail组件中自动创建的LogStore名称。例如:audit-027b007a7dd11967a9f7e2449d8dc497。