尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Talos Linux Security 配置文档解析:ImageVerificationConfig 镜像签名校验与 TrustedRootsConfig 信任根配置实战

Talos Linux Security 配置文档解析:ImageVerificationConfig 镜像签名校验与 TrustedRootsConfig 信任根配置实战 云原生操作系统容器编排【免费下载链接】talosTalos Linux is a modern Linux distribution built for Kubernetes.项目地址https://gitcode.com/gh_mirrors/ta/talos点击查看免费下载本篇文章围绕 Talos Linux 机器配置中security配置文档族展开系统讲解ImageVerificationConfig镜像签名验证策略与TrustedRootsConfig附加受信 CA 根两类文档的 YAML 结构与字段语义并结合仓库源码说明其解析、校验、落盘与消费链路帮助你在 Talos Linux 集群中落地镜像供应链安全与私有 CA 信任能力。一、security 配置文档族概览在 Talos Linux 的配置体系中apiVersion: v1alpha1之下除了经典的MachineConfig之外还支持一系列独立的配置文档config documents。security包提供了与安全相关的机器配置文档仓库中的文档骨架位于 website/content/v1.15/reference/configuration/security/_index.md其下包含两份实质性文档配置文档kind作用ImageVerificationConfigImageVerificationConfig配置镜像签名验证策略支持 keylessCosign与静态公钥两种验证方式以及按镜像模式跳过或拒绝拉取TrustedRootsConfigTrustedRootsConfig为节点配置额外的受信 CA 根证书PEM 格式源码层面这两类文档的类型定义与校验逻辑分别位于 pkg/machinery/config/types/security/image_verification.go 与 pkg/machinery/config/types/security/trusted_roots.go它们在init()中通过registry.Register注册到配置文档注册表见 pkg/machinery/config/internal/registry从而能被MachineConfig之外的独立文档形式被解析和加载。二、ImageVerificationConfig镜像签名验证策略2.1 完整配置示例ImageVerificationConfig文档的完整 YAML 示例如下与官方参考文档及源码中的exampleImageVerificationConfigV1Alpha1()示例一致见 pkg/machinery/config/types/security/image_verification.goapiVersion: v1alpha1 kind: ImageVerificationConfig # List of verification rules. rules: - image: registry.k8s.io/* # Image reference pattern to match for this rule. # Keyless verifier configuration to use for this rule. keyless: issuer: https://accounts.google.com # OIDC issuer URL for keyless verification. subject: krel-trustk8s-releng-prod.iam.gserviceaccount.com # Expected subject for keyless verification. # # Regex pattern for subject matching. # subjectRegex: .*example\.com - image: my-registry.example.com/* # Image reference pattern to match for this rule. # Public key verifier configuration to use for this rule. publicKey: certificate: |- # A public certificate in PEM format accepted for image signature verification. -----BEGIN CERTIFICATE----- MII--Sample Value-- -----END CERTIFICATE----- - image: localhost:3000/* # Image reference pattern to match for this rule. deny: true # Deny pulling images matching the pattern (default: false).该文档只有一个顶层字段rules类型为[]ImageVerificationRuleV1Alpha1字段定义见 pkg/machinery/config/types/security/image_verification.go字段类型说明rules[]ImageVerificationRuleV1Alpha1验证规则列表。规则按顺序求值第一条匹配的规则生效first matching rule applies2.2 规则字段rules[]每条ImageVerificationRuleV1Alpha1定义一条验证规则其字段如下源码定义见 pkg/machinery/config/types/security/image_verification.go字段类型说明默认值imagestring本条规则匹配的镜像引用模式无skipbool跳过对该镜像模式的验证falsedenybool拒绝拉取匹配该模式的镜像falsekeylessImageKeylessVerifierV1Alpha1使用 Cosign keyless 验证的验证器配置无publicKeyImagePublicKeyVerifierV1Alpha1使用静态公钥验证的验证器配置无2.2.1image镜像引用模式匹配规则image字段支持 glob 通配模式但只匹配镜像的 registry 和 repository 部分不匹配 tag 或 digest。匹配针对归一化后的镜像引用进行——归一化引用总是以 registry 域名开头docker.io/library/nginx*可以匹配nginx:latest而library/nginx*匹配不到任何镜像缺少 registry 域Docker Hub 的域名始终被归一化为docker.io因此针对index.docker.io或registry-1.docker.io编写的模式与docker.io模式匹配到的是同一批镜像。官方文档给出的两个示例image: docker.io/library/nginximage: registry.k8s.io/*需要说明的是该匹配语义并不仅仅是一句文档描述。在Validate()中Talos 会对模式做合法性预警见 pkg/machinery/config/types/security/image_verification.go模式中包含digest 分隔符时给出警告匹配只作用于 registry 与 repository不作用于 tag 或 digest模式中包含:且位于第一个/之后很可能误把 tag 写进了模式时给出警告通过patternMatchesNoImage()见同文件 L280-L300判断模式是否“无论如何都匹配不到任何镜像”——例如没有 glob 也没有/的模式因为每个归一化引用都包含/nginx这样的写法永远无法匹配。这些校验逻辑会输出 warning 而非直接报错帮助你在配置阶段尽早发现模式书写错误。2.2.2keylessCosign 无密钥验证ImageKeylessVerifierV1Alpha1使用 Cosign keyless 验证方式即基于 OIDC 身份Fulcio 签发的短期证书 Rekor 透明日志进行签名验证无需预置公钥。字段如下见 pkg/machinery/config/types/security/image_verification.go字段类型说明issuerstringOIDC issuer URL即签发身份的 OpenID Connect 提供方。常用示例https://accounts.google.comGoogle 身份、https://token.actions.githubusercontent.comGitHub Actions OIDCsubjectstring期望的 subject签名镜像的身份如 email、URI。例如 Kubernetes 发布签名的krel-trustk8s-releng-prod.iam.gserviceaccount.comsubjectRegexstringsubject 的正则匹配模式用于需要灵活匹配的场景替代subjectsubject与subjectRegex二选一即可官方示例issuer: https://accounts.google.comissuer: https://token.actions.githubusercontent.comsubjectRegex: .*example\.com2.2.3publicKey静态公钥验证ImagePublicKeyVerifierV1Alpha1使用静态公钥公钥证书进行签名验证适合无法使用 keyless 流程如离线环境或需要固定信任某签名主体的场景。字段如下见 pkg/machinery/config/types/security/image_verification.go字段类型说明certificatestring用于镜像签名验证的公钥证书PEM 格式示例publicKey: certificate: |- -----BEGIN CERTIFICATE----- MII--Sample Value-- -----END CERTIFICATE-----2.3 规则的组合约束与校验逻辑Validate()对每条规则施加了严格的组合约束见 pkg/machinery/config/types/security/image_verification.goimagePattern必填每条规则必须指定image模式否则报错skip与deny不能同时为 trueskip/deny与验证器互斥如果skip或deny为 true则不能再配置keyless或publicKey验证器至少一个验证器既不是 skip 也不是 deny 的规则必须配置至少一个验证器keyless 与 publicKey 二选一同一条规则不能同时配置keyless与publicKeykeyless 细节issuer必填subject与subjectRegex至少填一个publicKey 细节certificate必填。这些规则通过errors.Join聚合一个配置文件中多处错误会一并返回。2.4 从配置到运行时资源控制器消费链路ImageVerificationConfig并不是停留在配置层面的声明。在 machined 中security.ImageVerificationConfigController持续监听生效中的机器配置configres.MachineConfigType/ActiveID并把文档中的每条规则转换为security.ImageVerificationRule资源见 internal/app/machined/pkg/controllers/security/image_verification_config.go每条规则以%04d序号如0000、0001作为资源 ID 写入顺序即规则在文档中的顺序写入时通过imageref.NormalizePattern()将镜像模式归一化后存储因此执行talosctl get imageverificationrules时看到的正是实际被匹配的模式形态skip、deny、keylessissuer/subject/subjectRegex与publicKeycertificate字段被逐一映射进资源 spec。该控制器对应的单元测试位于 internal/app/machined/pkg/controllers/security/image_verification_config_test.go集成层面在 internal/integration/api/images.go 中有覆盖读者可借此验证行为。2.5 典型使用场景供应链安全registry 白名单 签名验证对官方镜像仓库使用 keyless 验证如registry.k8s.io/*匹配 Kubernetes 官方发布签名对内网私有仓库使用静态公钥验证镜像源管控对开发用的本地仓库如localhost:3000/*直接deny: true拒绝拉取防止生产节点使用非预期镜像源灰度放行对暂不支持签名的镜像先用skip: true跳过验证待签名补齐后再收紧策略。三、TrustedRootsConfig附加受信 CA 根3.1 完整配置示例TrustedRootsConfig允许为节点配置额外的受信 CA 根证书。完整 YAML 示例与官方文档及源码中的exampleTrustedRootsConfigV1Alpha1()一致见 pkg/machinery/config/types/security/trusted_roots.goapiVersion: v1alpha1 kind: TrustedRootsConfig name: my-enterprise-ca # Name of the config document. certificates: | # List of additional trusted certificate authorities (as PEM-encoded certificates). -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----字段说明见 pkg/machinery/config/types/security/trusted_roots.go字段类型说明namestring配置文档的名称schemaRequired: true必填certificatesstring附加受信 CA 列表PEM 编码证书。单个配置文档中可通过换行符分隔提供多张证书注意TrustedRootsConfig还实现了config.NamedDocument接口见 pkg/machinery/config/types/security/trusted_roots.goname字段在文档合并、去重等场景中充当文档标识。3.2 证书注入的实现原理ExtraTrustedRootCertificates()方法见 pkg/machinery/config/types/security/trusted_roots.go在返回证书内容时会自动在证书串前面拼接一段以配置name为标题的头部形如\nmy-enterprise-ca:\n用于标识这批证书的来源。真正把证书写入节点的消费方是TrustedRootsController见 internal/app/machined/pkg/controllers/secrets/trusted_roots.go读取生效的机器配置获取所有TrustedRoots()文档的ExtraTrustedRootCertificates()以系统默认 CA 证书集合defaultCACertificates为基底将附加证书用\n\n拼接在后面将最终内容写入EtcFileSpec资源落盘路径为常量DefaultTrustedRelativeCAFile即ssl/certs/ca-certificates.crt定义见 pkg/machinery/constants/constants.go文件权限0o644。也就是说TrustedRootsConfig的效果等价于往系统 CA 信任链中追加 PEM 证书使节点上基于该系统 CA 链的组件如容器镜像拉取、apiserver 与 etcd 之间的 TLS 验证等都能信任这些附加根。对应测试见 internal/app/machined/pkg/controllers/secrets/trusted_roots_test.go 与 pkg/machinery/config/types/security/trusted_roots_test.go。3.3 典型使用场景企业私有 CA节点需要信任公司内部签发 TLS 证书的 CA才能与内部镜像仓库、API 网关等正常建立 TLS 连接离线/内网环境自建 CA 签发的 registry 证书、etcd 证书等通过TrustedRootsConfig统一注入避免逐台节点手工操作。四、两类配置文档的使用方式在 Talos Linux 中ImageVerificationConfig与TrustedRootsConfig都是独立的配置文档可以作为机器配置的一部分直接写入或通过talosctl machineconfig相关流程与主配置合并。需要注意的是文档apiVersion均为v1alpha1kind分别为ImageVerificationConfig与TrustedRootsConfig两个文档类型都通过registry.Register注册见 pkg/machinery/config/types/security/image_verification.go 与 pkg/machinery/config/types/security/trusted_roots.go因此可与标准机器配置一同被解析配置下发后分别由上文所述的两个 COSI 控制器实时消费配置变更会即时反映到镜像验证规则与系统 CA 信任链中无需重启节点。对于镜像验证规则的落地形态可以执行talosctl get imageverificationrules查看控制器生成的规则资源其展示的模式即为归一化后的实际匹配模式见 internal/app/machined/pkg/controllers/security/image_verification_config.go方便你核对配置是否按预期生效。五、小结security配置文档族为 Talos Linux 提供了两块关键的安全能力镜像签名验证ImageVerificationConfig基于 Cosign keylessOIDC 身份或静态公钥证书对镜像签名进行验证支持按镜像模式 skip/deny 组合策略为镜像供应链安全提供第一道防线受信根配置TrustedRootsConfig以声明式方式向节点追加 PEM 格式的 CA 根证书最终写入系统 CA 信任链文件ssl/certs/ca-certificates.crt让企业私有 CA 与内网 TLS 场景开箱即用。两份文档的完整字段参考可继续查阅 ImageVerificationConfig 参考文档 与 TrustedRootsConfig 参考文档更深层的类型定义与校验逻辑见 pkg/machinery/config/types/security/运行时消费逻辑见 internal/app/machined/pkg/controllers/security/ 与 internal/app/machined/pkg/controllers/secrets/。赞分享云原生操作系统容器编排【免费下载链接】talosTalos Linux is a modern Linux distribution built for Kubernetes.项目地址https://gitcode.com/gh_mirrors/ta/talos点击查看免费下载相关推荐Talos Linux 镜像签名校验配置指南ImageVerificationConfig 完整解析Talos Linux 镜像签名校验配置指南ImageVerificationConfig 完整解析 本文以 Talos Linux v1.15 的 Imag云原生操作系统容器编排Talos Linux 可信根配置指南使用 TrustedRootsConfig 注入自定义 CA 证书Talos Linux 可信根配置指南使用 TrustedRootsConfig 注入自定义 CA 证书 TrustedRootsConfig 是 Talos云原生操作系统容器编排Talos Linux 链路别名配置LinkAliasConfig 文档深入解析与实战Talos Linux 链路别名配置LinkAliasConfig 文档深入解析与实战 LinkAliasConfig 是 Talos Linux 中一类独立云原生操作系统容器编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表