Aplique práticas de autenticação, autorização e identidade de pods com privilégio mínimo para proteger clusters ACK.
Autenticação e autorização em clusters ACK
O Kubernetes autentica requisições de API por meio de certificados X.509, bearer tokens, proxies de autenticação ou OIDC. O ACK suporta nativamente dois métodos de acesso: Client certificates e Service account tokens.
Obtain a kubeconfig file com um certificado de cliente pelo console do Alibaba Cloud ou chamando uma operação da OpenAPI do ACK.
A autorização no ACK inclui autorização RAM e RBAC. O RAM oferece dois tipos de políticas de autorização: políticas do sistema e políticas personalizadas. Crie políticas personalizadas do RAM para operações como gerenciar a visibilidade do cluster, dimensionar clusters ou adicionar nós. Para gerenciar recursos do Kubernetes, como pods e nós, conceda permissões RBAC aos usuários RAM na página Authorizations do ACK console. Consulte Authorization overview.
-
Use arquivos kubeconfig temporários e autenticação no servidor de API
O certificado padrão do kubeconfig tem validade de três anos. Se comprometido, um invasor poderá acessar diretamente o servidor de API do cluster. O token da conta de serviço padrão também é uma credencial estática de longa duração; caso seja comprometida, o invasor obtém as permissões de acesso ao cluster vinculadas até a exclusão da conta de serviço.
Imediatamente revoke any compromised kubeconfig credential. Consulte Obtain and use a kubeconfig file.
-
Siga o princípio do privilégio mínimo para acessar recursos do Alibaba Cloud
Ao conceder acesso a clusters ACK, não inclua permissões para outros produtos cloud. Use RAM e RBAC para aplicar apenas as permissões estritamente necessárias.
-
Adote o princípio do privilégio mínimo ao criar RoleBindings e ClusterRoleBindings
Siga o privilégio mínimo ao criar recursos
RoleBindingeClusterRoleBinding. Evite["*"]nas definições deRoleeClusterRole— especifiqueverbsexplicitamente. Utilize ferramentas como audit2rbac para gerar funções e vínculos a partir dos logs de auditoria doKubernetes. -
Controle o escopo de acesso dos endpoints do cluster ACK
Por padrão, o endpoint do servidor de API de um cluster ACK é acessível apenas pela rede interna — dentro do cluster e de sua Virtual Private Cloud (VPC). Para expor um service à internet, configure Classic Load Balancer (CLB) with annotations.
-
Audite regularmente as permissões de acesso ao cluster
As permissões de acesso ao cluster mudam ao longo do tempo. Revise periodicamente as permissões RAM e RBAC para verificar se o acesso está adequado. Empregue ferramentas como kubectl-who-can e rbac-lookup para auditar permissões e remover acessos excessivos.
Autenticação de pods
Algumas aplicações em um cluster Kubernetes precisam acessar a API do Kubernetes. Por exemplo, o ACK Cloud Controller Manager (CCM) requer permissões para criar, ler, atualizar e excluir recursos de nó.
-
Contas de serviço do Kubernetes
Uma conta de serviço atribui uma função RBAC do Kubernetes a um pod. O Kubernetes cria uma conta de serviço padrão para cada namespace. Pods implantados sem referência a uma conta de serviço específica utilizam o padrão do namespace. Um segredo contendo um JSON Web Token (JWT) é montado em /var/run/secrets/kubernetes.io/serviceaccount. A decodificação desse token revela os seguintes metadados:
{ "iss": "kubernetes/serviceaccount", "kubernetes.io/serviceaccount/namespace": "default", "kubernetes.io/serviceaccount/secret.name": "default-token-vpc2x", "kubernetes.io/serviceaccount/service-account.name": "default", "kubernetes.io/serviceaccount/service-account.uid": "1d059c50-0818-4b15-905d-bbf05e1d****", "sub": "system:serviceaccount:default:default" }A conta de serviço padrão possui as seguintes permissões da API do Kubernetes:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: annotations: rbac.authorization.kubernetes.io/autoupdate: "true" labels: kubernetes.io/bootstrapping: rbac-defaults name: system:discovery rules: - nonResourceURLs: - /api - /api/* - /apis - /apis/* - /healthz - /openapi - /openapi/* - /version - /version/ verbs: - getEssa função concede acesso de leitura às informações de descoberta de API para usuários autenticados e não autenticados, sendo considerada segura para acesso público.
Quando um pod chamar a API do Kubernetes, atribua a ele uma conta de serviço com permissões explícitas de API. Limite a Role ou ClusterRole vinculada apenas aos recursos e métodos de API necessários, seguindo o princípio do privilégio mínimo. Para usar uma conta de serviço diferente do padrão, defina o campo
spec.serviceAccountNamena especificação do pod. Consulte ServiceAccount permissions. -
Use projeção de volume de token de conta de serviço
Ative a projeção de volume de token de conta de serviço no ACK para mitigar riscos de segurança. O kubelet emite tokens por pod com público-alvo e expiração configuráveis, rotacionando-os após 80% do período de validade ou depois de 24 horas. Consulte Use ServiceAccount token volume projection.
-
Restrinja o acesso dos nós à API de metadados da instância
Os metadados de instâncias ECS são acessíveis a partir de instâncias em execução e podem conter dados sensíveis, como detalhes de recursos cloud e dados do usuário. O acesso irrestrito a metadados pode ser explorado em ambientes multilocatários. Para pods que não exigem tráfego de saída, use uma política de rede para restringir o acesso ao meta-server. O exemplo abaixo utiliza um
podSelectorpara bloquear todo o tráfego de saída de um pod específico, incluindo o acesso ao meta-server.apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-metadata-access namespace: example spec: podSelector: matchLabels: app: myapp policyTypes: - Egress egress: []Consulte Use network policies in ACK clusters.
-
Desative a montagem automática de tokens de conta de serviço nos pods
Escolha um dos métodos a seguir para desativar a montagem automática do token de conta de serviço.
Método 1: No YAML do pod, defina
automountServiceAccountTokencomofalse.apiVersion: v1 kind: Pod metadata: name: my-pod spec: serviceAccountName: build-robot automountServiceAccountToken: false ...Método 2: Aplique um patch na conta de serviço padrão do namespace para definir o campo
automountServiceAccountTokencomofalse.kubectl patch serviceaccount default -p $'automountServiceAccountToken: false' -
Atribua uma conta de serviço dedicada a cada aplicação
Atribua uma conta de serviço exclusiva para cada aplicação, garantindo isolamento granular de permissões. Consulte Configure Service Accounts for pods.
-
Execute aplicações como usuário não root
Os containers executam como root por padrão, o que concede aos processos acesso arbitrário a arquivos. Em vez disso, adicione a propriedade
spec.securityContext.runAsUseraoPodSpecpara especificar um ID de usuário não root.Neste exemplo, todos os processos do pod são executados sob o campo
runAsUser.apiVersion: v1 kind: Pod metadata: name: security-test spec: securityContext: runAsUser: 1000 runAsGroup: 3000 containers: - name: sec-test image: busybox command: [ "sh", "-c", "sleep 1h" ]Os processos do container não conseguem acessar arquivos restritos ao root. Adicionar
fsGroupaosecurityContextconcede acesso de leitura aos arquivos dentro do container.spec: securityContext: fsGroup: 65534 -
Siga o princípio do privilégio mínimo ao conceder acesso das aplicações a recursos do Alibaba Cloud
Evite permissões RAM desnecessárias nos nós da aplicação. Elabore políticas RAM granulares seguindo o privilégio mínimo. Não utilize curingas como
["*"]nas políticas de permissão, pois eles podem conceder acesso excessivo.
Autenticação via webhook do Authenticator
Se você utilizar integração com SSO do RAM e gerenciar a autorização RBAC do Kubernetes independentemente, use ack-ram-authenticator for API server webhook authentication. Vantagens:
Suporta SSO cloud corporativo com autorização RBAC flexível e controlável no plano de dados.
Em cenários de integração SSO baseada em funções, o log de auditoria do API server inclui informações de identidade do IDP corporativo, permitindo auditar diferentes usuários do IDP que assumem a mesma função.
Quando um usuário ou função RAM de um colaborador é excluído, as permissões RBAC associadas no cluster são revogadas automaticamente.