O Security Center permite conectar clusters Kubernetes autogerenciados para centralizar a detecção de ameaças e o gerenciamento de riscos. Este tópico descreve como integrar um cluster Kubernetes autogerenciado ao Security Center e, opcionalmente, ativar a detecção de ameaças baseada em logs.
Requisitos de edição
|
Método de faturamento |
Edição necessária |
Requisito no nível do servidor |
|
Assinatura |
Ultimate |
Defina a edição de proteção como Ultimate — consulte Vincular uma edição de proteção a um servidor |
|
Pagamento conforme o uso |
Host and Container Security ativado |
Defina o nível de proteção como Host and Container Protection — consulte Vincular um nível de proteção de servidor |
Se a edição atual não atender ao requisito, faça upgrade do Security Center ou adquira o serviço antes de continuar.
Limitações de região
As restrições regionais aplicam-se apenas a clusters implantados em uma Virtual Private Cloud (VPC):
Clusters baseados em VPC: O cluster deve residir na China (Hangzhou), China (Pequim), China (Xangai), China (Shenzhen) ou China (Hong Kong).
Clusters conectados à Internet: Não há restrições de região.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster Kubernetes em execução no servidor de destino
Docker instalado no servidor
(Para análise de exposição do cluster) Configuração de rede concluída conforme o tipo de implantação — consulte Gerenciar clusters e imagens
Configurar encaminhamento de tráfego para implantações de nuvem híbrida
Se o cluster estiver implantado em uma nuvem híbrida sem acesso pela Internet, configure o encaminhamento de portas em uma instância do Elastic Compute Service (ECS) para rotear o tráfego até o servidor local que executa o API server do cluster. Sem essa configuração, o cluster não se comunica com o Security Center.
Os exemplos abaixo encaminham o tráfego da Porta A na instância ECS 10.0.XX.XX para a Porta B no servidor local 192.168.XX.XX.
CentOS 7 — firewall-cmd
firewall-cmd --permanent --add-forward-port=port=<Port A>:proto=tcp:toaddr=<192.168.XX.XX>:toport=<Port B>
CentOS 7 — iptables
# Enable IP forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
# Add the forwarding rule
iptables -t nat -A PREROUTING -p tcp --dport <Port A> -j DNAT --to-destination <192.168.XX.XX>:<Port B>
Windows — netsh
netsh interface portproxy add v4tov4 listenport=<Port A> listenaddress=* connectaddress=<192.168.XX.XX> connectport=<Port B> protocol=tcp
Adicionar endereços IP do Security Center à lista de permissões
Se houver políticas de controle de acesso no cluster, adicione os endereços IP do Security Center da sua região à lista de permissões. O bloqueio desses endereços impede a comunicação entre o cluster e o Security Center.
|
Região |
Endereço IP público |
Endereço IP privado |
|
China (Hangzhou) |
47.96.166.214 |
100.104.12.64/26 |
|
China (Xangai) |
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 e 47.101.220.176 |
100.104.43.0/26 |
|
China (Qingdao) |
47.104.111.68 |
100.104.87.192/26 |
|
China (Pequim) |
47.95.202.245 |
100.104.114.192/26 |
|
China (Zhangjiakou) |
39.99.229.195 |
100.104.187.64/26 |
|
China (Hohhot) |
39.104.147.68 |
100.104.36.0/26 |
|
China (Shenzhen) |
120.78.64.225 |
100.104.250.64/26 |
|
China (Guangzhou) |
8.134.118.184 |
100.104.111.0/26 |
|
China (Hong Kong) |
8.218.59.176 |
100.104.130.128/26 |
|
Japão (Tóquio) |
47.74.24.20 |
100.104.69.0/26 |
|
Singapura |
8.219.240.137 |
100.104.67.64/26 |
|
EUA (Vale do Silício) |
47.254.39.224 |
100.104.145.64/26 |
|
EUA (Virgínia) |
47.252.4.238 |
100.104.36.0/26 |
|
Alemanha (Frankfurt) |
47.254.158.71 |
172.16.0.0/20 |
|
Reino Unido (Londres) |
8.208.14.12 |
172.16.0.0/20 |
|
Indonésia (Jacarta) |
149.129.238.99 |
100.104.193.128/26 |
Adicionar um cluster Kubernetes autogerenciado ao Security Center
Faça login no console do Security Centerconsole do Security Centerconsole do Security Center. Na barra de navegação superior, selecione a região do ativo: China ou Outside China.
No painel de navegação à esquerda, escolha Assets > Container.
Na aba Cluster, clique em Self-built cluster access.
-
No painel Self-built cluster management, clique em Self-built cluster access. Configure os parâmetros do cluster no painel exibido e clique em Generate Command.
Parâmetro
Descrição
Cluster name
Nome do cluster. Exemplo:
text-001.Expiration Time
Tempo de expiração do comando de integração gerado.
Group
Grupo de atribuição do cluster. Defina como o grupo do servidor onde o cluster está em execução.
Service Provider
Provedor do servidor onde o cluster está em execução.
(Opcional) Na seção Enable Log Collection, escolha se deseja ativar a detecção de ameaças baseada em logs. Quando ativada, o Security Center coleta logs de auditoria adicionais para uma análise de risco mais profunda. Isso exige a configuração prévia dos componentes Logtail e das definições de auditoria do cluster — consulte Ativar detecção de ameaças baseada em logs.
-
Faça login no servidor que executa o cluster. Crie um arquivo YAML com o nome do seu cluster (por exemplo,
text-001.yaml), cole o comando gerado no arquivo e execute:kubectl apply -f text-001.yamlApós a conclusão do comando, o cluster aparecerá na lista de clusters na aba Cluster.
Substitua text-001 tanto no nome do arquivo quanto no comando pelo valor inserido em Cluster name na etapa 4.
Adicionar nós mestres e nós com taints
Por padrão, o comando gerado não agenda pods do DaemonSet em nós mestres ou nós com taints. Para incluir esses nós, adicione tolerâncias ao modelo de pod no arquivo YAML antes de executar kubectl apply.
Para nós mestres — adicione o seguinte em spec > template > spec:
spec:
template:
spec:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
Essa tolerância permite agendar pods do DaemonSet em nós com o taint node-role.kubernetes.io/master:NoSchedule, adicionando os nós mestres ao Security Center como parte do cluster.
Para outros nós com taints — aplique o mesmo padrão de tolerância, correspondendo à chave e ao efeito do taint para cada tipo de nó.
Ativar detecção de ameaças baseada em logs
A detecção de ameaças baseada em logs está disponível para clusters com Kubernetes 1.16 ou posterior. Quando ativada, o Security Center detecta operações de alto risco e comportamentos de ataque ao analisar os logs de auditoria do API server.
Etapa 1. Instale o Logtail
Siga as instruções de Install Logtail em Instalar componentes Logtail em um cluster Kubernetes autogerenciado.
Etapa 2. Ativar auditoria do cluster
As etapas a seguir baseiam-se em Ativar auditoria de cluster para clusters registrados.
Crie um cluster registrado ACK One e adicione o cluster Kubernetes autogerenciado a ele. Consulte Criar clusters registrados ACK One.
-
Em cada nó mestre, atualize
/etc/kubernetes/audit-policy.yamlcom a seguinte política:Para clusters com versões do Kubernetes anteriores à 1,24, defina
apiVersioncomoaudit.k8s.io/v1beta1. Para 1,24 e posteriores, useaudit.k8s.io/v1. Consulte (Descontinuado) 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 responses 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 -
Em cada nó mestre, atualize
/etc/kubernetes/manifests/kube-apiserver.yaml:-
Adicione as seguintes flags
--audit-log-*à seçãocommand: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 as seguintes variáveis de ambiente à seção
env. Substitua{cluster_id}pelo ID do seu cluster — encontre-o na aba Cluster no console do Security Center.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" -
Monte o diretório de logs de auditoria e o arquivo de política nos pods do kube-apiserver:
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.Faça login no console do Security Center.Faça login no console do Security Center.
Clique em no nome do projeto criado durante a instalação do Logtail.
Confirme se os logs de auditoria estão fluindo para o Logstore esperado.
Etapa 4. Ative a detecção de ameaças no Security Center
Faça login no console do Security Centerconsole do Security Centerconsole do Security Center. Na barra de navegação superior, selecione China ou Outside China.
No painel de navegação à esquerda, escolha Assets > Container.
Na aba Cluster, clique em Self-built cluster access.
Localize o cluster e clique em Edit na coluna Actions.
-
Na aba Enable Log Collection, selecione Enable Kubernetes Log Reporting to Detect Threats, configure os parâmetros a seguir e clique em Save.
Parâmetro
Descrição
Exemplo
Region of Log Audit Service
Região para armazenamento dos logs
—
Project of Log Audit Service
Projeto do Simple Log Service criado durante a instalação do Logtail
k8s-log-custom-sd89ehdqLogstore of Log Audit Service
Logstore criado automaticamente durante a instalação do Logtail
audit-027b007a7dd11967a9f7e2449d8dc497