一台 non-prod Jenkins 上几十个作业共用一把长期 AWS key。改成每次构建由 Jenkins 签 OIDC token、经 STS 换最长 1 小时的角色凭据后,Jenkins 里不再存 AWS 密钥,但签名私钥仍在控制器上。
Posts for: #security
从 Vault Agent 迁移到 ESO:TLS 加固、权限收敛与业务平滑切换
微服务集群从 Vault Agent 切换到 ESO,核心在于平滑过渡与权限收敛。通过 Raft 热升级结合内置 PKI 开启 TLS、以 CEL 策略防范配置越权,配合双轨比对与分批灰度,安全完成数十个服务的 Sidecar 替换。
K8s 网络策略与出站控制:云原生 CNI、Calico、出网代理和 Cilium 怎么选
标准 Kubernetes NetworkPolicy 能拦住 Pod 访问私网网段与云主机元数据,但管不了动态 IP 的外部域名和跨云策略统一。对比云厂商原生 CNI、Calico、出网代理与 Cilium 的优缺点后,按场景给出各自的适用边界与落地方式。
Vault Agent Injector 的 admission webhook 机制
Vault Agent Injector 是一个 mutating admission webhook,只在 pod 创建时改写定义。改了默认资源要重启 pod,injector 不可用时 pod 照常创建却没有密钥,都出自这一点。
用 Trivy Operator 持续扫描 homelab 集群的镜像
两个 K3s 集群里大多是第三方镜像,镜像不动也会冒出新 CVE。Trivy Operator 每天重扫并接进 Prometheus 告警,日常要按 CVE ID 分诊,能升级就升级,升不了带证据豁免,并用报告数对工作负载数确认扫描没有静默失败。
K8s 应用从 Vault 取密钥:Agent sidecar、init-only、VSO、ESO 和 CSI 怎么选
Vault Agent 的 init 和 sidecar 默认各申请 250m CPU,在一个非生产集群里占了一半以上的 CPU requests,实际几乎不用。按 DevSecOps 的要求比较五种接法后,先只保留 init,再换成和生产共用接口的 ESO。
Jenkins 部署从 push 改成 pull:VM 按 digest 自己拉镜像
Jenkins 用 SSH 登录 VM 部署,登录所有目标机的凭据和应用配置都集中在 CI 控制器上。方向反过来之后,控制器被攻破也登录不了生产机,代价在部署结果的反馈、有顺序的部署、每台 VM 上的部署脚本。K8s 上这已是主流,VM 上也有先例。
Confluent Cloud 的 ACL 只认 service account,不认 API Key
一个 producer 八小时没写进消息,根因是有人给同一个 service account 加了一条 DENY。Confluent Cloud 上 API Key 只做认证,ACL 认的是账号,一次权限改动的作用面是账号名下所有 key。
mirrord 用户授权的 GitOps 化:按用户维护 RBAC 清单
mirrord 的开发者授权从脚本式操作改成 GitOps:每人一份 RoleBinding 与 ClusterRoleBinding 写进 Git,由 Argo CD 带 prune 同步;证书签发后无法吊销,能回收的只有授权。
软件供应链最小基线:SBOM + cosign 镜像签名
软件供应链的最小基线按问答展开:CycloneDX 生成 SBOM、cosign keyless 给镜像签名、再把 SBOM 作为 attestation 绑到镜像上,为什么这么做和绕不开的 tradeoff 一并回答。