O Security Center oferece suporte à conexão de clusters K8s (Kubernetes) auto-gerenciados para gerenciamento centralizado e detecção de riscos de segurança. Este tópico descreve como conectar um cluster K8s auto-gerenciado.
Limites de versão
-
Assinatura: Ultimate (caso sua edição atual não ofereça suporte a este recurso, upgrade).
NotaCertifique-se de que a edição de proteção do servidor corresponda à edição adquirida. Para mais informações, consulte Bind a server protection edition.
-
Pagamento conforme o uso: O pagamento conforme o uso de Host and Container Security está ativado (caso não esteja ativado, purchase).
NotaO nível de proteção do servidor deve estar definido como Full Protection for Hosts and Containers. Para mais informações, consulte Bind a server protection level.
Restrições
As restrições de região para integração são as seguintes:
Se o tipo de rede do cluster K8s auto-gerenciado for VPC, você só poderá conectar o cluster nas regiões China (Hangzhou), China (Beijing), China (Shanghai), China (Shenzhen) e China (Hong Kong).
Se o tipo de rede do cluster K8s auto-gerenciado for rede pública, não há restrições de região.
Pré-requisitos
Um cluster K8s deve estar configurado no servidor.
O Docker deve estar instalado.
-
Caso queira usar o recurso de análise de exposição do cluster, você também deve concluir as seguintes configurações de rede com base no modo de implantação do seu cluster e nas configurações da política de controle de acesso. Para mais informações, consulte Analyze cluster exposure.
-
Se o seu cluster K8s estiver implantado em uma cloud híbrida e não puder ser acessado diretamente pela rede pública, configure regras de encaminhamento de tráfego para garantir a conectividade de rede antes de conectar o cluster ao Security Center.
-
Se houver políticas de controle de acesso configuradas para o seu cluster, certifique-se de que o pool de endereços IP da região onde os contêineres residem esteja adicionado à lista de permissões das políticas de controle de acesso.
-
Adicione um cluster Kubernetes auto-gerenciado ao Security Center
Faça login no console do Security Center.
No painel de navegação à esquerda, escolha . No canto superior esquerdo do console, selecione a região onde o ativo a ser protegido está localizado: Chinese Mainland ou Outside Chinese Mainland.
Na aba Cluster, clique em Self-built cluster access.
-
No painel Self-built cluster management, clique em Self-built cluster access, configure as informações sobre o cluster K8s auto-gerenciado que você deseja conectar e, em seguida, clique em Generate Command.
Parâmetro
Descrição
Cluster name
Insira o nome do cluster K8s auto-gerenciado. Exemplo: text-001.
Expiration Time
Selecione o tempo de expiração do comando usado para conectar o cluster K8s auto-gerenciado.
Group
Escolha o grupo do cluster após a conexão (ou seja, o grupo ao qual pertence o servidor onde o cluster reside).
Service Provider
Defina o provedor do servidor onde o cluster reside.
-
(Opcional) Na seção Enable Log Collection, especifique se deseja ativar a detecção de ameaças baseada em logs do K8s.
Após ativar a detecção de ameaças baseada em logs do K8s, o Security Center pode obter mais logs de auditoria para detectar riscos de segurança de maneira mais abrangente. Antes de ativar a detecção de ameaças, instale os componentes do Logtail no cluster K8s e conclua as configurações relacionadas à auditoria. Para mais informações, consulte Enable log-based threat detection.
-
Faça login no servidor onde o cluster reside, crie um arquivo chamado text-001.yaml, copie o comando gerado para o arquivo e, em seguida, execute o comando
kubectl apply -f text-001.yamlpara conectar o cluster.Por padrão, o comando gerado em Step 4 não conecta nós mestres (master nodes) ou nós com taints. Caso queira conectar nós mestres e nós com taints, modifique as configurações no arquivo YAML com base nas instruções a seguir.
Após conectar um cluster K8s auto-gerenciado, você pode visualizar as informações sobre os clusters conectados na lista de clusters na aba Cluster.
Ative a detecção de ameaças baseada em logs
Se a versão do cluster K8s for 1.16 ou posterior, você pode ativar a detecção de ameaças baseada em logs do K8s para fornecer uma detecção de riscos de segurança mais abrangente para o cluster auto-gerenciado, como a detecção de operações e ataques de alto risco.
Etapa 1. Instale o Logtail
Para mais informações, consulte Install Logtail components in a self-managed Kubernetes cluster, especificamente a seção Instale o Logtail.
Etapa 2. Ative a auditoria do cluster
As etapas a seguir são apenas para referência. Para mais informações, consulte Use cluster auditing.
Crie um cluster registrado e conecte o cluster Kubernetes auto-gerenciado a ele. Para mais informações, consulte Create an ACK One registered cluster.
-
Configure o arquivo de política de auditoria nos nós mestres.
Faça login em um nó mestre e edite
/etc/kubernetes/audit-policy.yamlusando o modelo abaixo. Repita esta etapa em todos os outros nós mestres.NotaO valor de
apiVersiondepende da sua versão do Kubernetes:Kubernetes anterior à 1.24: use
audit.k8s.io/v1beta1Kubernetes 1.24 e posterior: use
audit.k8s.io/v1
Para obter detalhes, consulte Notas de lançamento do Kubernetes 1.24.
apiVersion: audit.k8s.io/v1beta1 # Use audit.k8s.io/v1 for Kubernetes >= 1.24 kind: Policy # Suppress events in the RequestReceived stage. omitStages: - "RequestReceived" rules: # High-volume, low-risk requests — not logged. - 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"] # Read-only URLs — not logged. - level: None nonResourceURLs: - /healthz* - /version - /swagger* # Events — not logged. - level: None resources: - group: "" # core resources: ["events"] # Secrets, ConfigMaps, and TokenReviews contain sensitive or binary data — # log metadata only. - level: Metadata resources: - group: "" # core resources: ["secrets", "configmaps"] - group: authentication.k8s.io resources: ["tokenreviews"] # Read requests for known API groups — log request metadata only (responses can be large). - 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" # Write requests for known API groups — log full request and response. - 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" # All other requests — log metadata only. - level: Metadata -
Configure o arquivo do Kube API Server nos nós mestres.
Faça login em todos os nós mestres, um por um, e conclua as seguintes configurações no arquivo do Kube API Server no caminho /etc/kubernetes/manifests/kube-apiserver.yaml:
-
Adicione o parâmetro
--audit-log-*ao comando com base no exemplo a seguir:... 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 ... -
Adicione o parâmetro env
aliyun_logs_audit-*com base no exemplo a seguir:Substitua {cluster_id} no exemplo a seguir pelo ID do seu cluster. Você pode fazer login no console do Security Center e obter o ID do cluster na página Container.
${cluster_id}especifica o ID do cluster. Você pode fazer login no console do Security Center e obter o ID do cluster de destino na coluna Cluster Information na lista de clusters na página Container Assets > Cluster.... 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 -
Monte
/etc/kubernetes/audit-policy.yamlno Pod do API Server conforme mostrado no exemplo a seguir.... 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 ...
-
Etapa 3. Verifique a coleta de logs
Faça login no console do Simple Log Service.
Clique no nome do projeto de destino.
Verifique se os logs relacionados foram coletados no Logstore sob o projeto de destino.
Etapa 4. Ative a detecção de ameaças
Faça login no console do Security Center.
No painel de navegação à esquerda, escolha . No canto superior esquerdo do console, selecione a região onde o ativo a ser protegido está localizado: Chinese Mainland ou Outside Chinese Mainland.
Na aba Cluster, clique em Self-built cluster access.
Encontre o cluster auto-gerenciado para o qual você deseja ativar a detecção de ameaças baseada em logs do K8s. Na coluna Actions, clique em Edit.
-
Na aba Enable Log Collection, selecione Enable Kubernetes Log Reporting to Detect Threats, configure as informações de log de auditoria e, em seguida, clique em Save.
Region of Log Audit Service: Selecione a região na qual os logs de auditoria são armazenados.
Project of Log Audit Service: Insira o nome do projeto criado em Step 1. Install Logtail. Exemplo: k8s-log-custom-sd89ehdq.
Logstore of Log Audit Service: Insira o nome do Logstore criado automaticamente em Step 1. Install Logtail. Exemplo: audit-027b007a7dd11967a9f7e2449d8dc497.