@mcpg / pulumi-policy
一个Pulumi CrossGuard 策略包,执行MCPG Kubernetes操作符
入场规则 pulumi preview,在任何东西到达集群之前。它
检查 mcpg.dev 程序声明的自定义资源——网关、
插件,插件集,撤销列表,集群,路由,租户和插件
镜像-并报告违规运营商的准入网钩将
在本地返回,无需api -服务器往返。
快速启动
包在预览/更新时被引用,而不是导入到您的 计划:
npm i --save-dev @mcpg/pulumi-policy
pulumi preview --policy-pack node_modules/@mcpg/pulumi-policy
违例被打印为 [<rule-id>] <message> -例如
[gateway.workloadIdentity.oneOf] workloadIdentity must be exactly one of aws|gcp|azure|spiffe. 规则id是稳定的,与规则id相同
MCPG Terraform提供程序的计划时间验证器发出。
main 点 bin/index.js,因此,必须先编译源代码签出
Pulumi可以加载它:
npm install && npm run build # tsc → bin/
规则
| 种类 | 检查什么 |
|---|---|
MCPGGateway | spec.image 现在, replicas 设置时≥1;最多一个 workloadIdentity.{aws,gcp,azure,spiffe};一份礼物 ingress 块携带非空 ingressClassName,至少有一个主机,且非空 paths 每个主机。 |
MCPGPlugin | pluginId 非空和反向dns; version 非空; pluginClass 是一个已知的插件类; oci.image 携带一个注册表组件和一个标记或摘要;神器被消化了 或者 带余弦恒等式; trust.signingKeyRef.secretName 在场(Ed25519签名是强制性基线);余号块有一个非空的,锚定的 certificateIdentityRegexp 和一个 oidcIssuer;一个SLSA块集 configMapName, sourceUri 和 sourceTag. |
MCPGPluginSet | entries 非空;每个条目都有一个反向dns id 和一个 pluginRef.name;ids独特; capabilityGrants 键命名一个声明的条目,并授予一个非空的功能列表。 |
MCPGRevocationList | version == 1;每一个 artifactSha256 是64个十六进制字符;每次撤销都有一个 reason;没有重复的哈希。 |
MCPGCluster | 这个 single_node 后端不接受 config;每个其他后端都需要一个;明文协调器地址(redis://,或NATS tls.require_tls: false)被拒绝,除非 config.allow_insecure_transport: true; credentialRefs 条目携带 name + secretName 还有独特的名字。 |
MCPGRoute | gatewayRef.name 非空; match.tools 列出至少一个工具;刀号非空且唯一;没有空条目 identityChain / policyChain / auditChain. |
MCPGTenant | namespaces 非空,条目非空且唯一;每一个 allowedPlugins 条目集 name 或者 registryPrefix;配额字段是非负的; identityAttribute.key 当该块设置为非空时。 |
MCPGPluginMirror | endpoint.service.{namespace,name,port} 设置; upstream.registry 现在的,形状像一个注册表主机; upstream.namespace 现在, auth.secretRef.secretName 现在当 auth 是集。 |
有两种行为是特别存在的,所以预览结果与集群的一致:
- 一、
certificateIdentityRegexp使用前向、后向或后向引用 被拒绝,即使JavaScript会编译它,因为操作符 使用re2风格的引擎编译模式。 - 在任何一种情况下都接受SHA-256哈希,并且接受重复检测 不区分大小写,匹配操作符的小写重复数据删除 的行为。
跨资源和客户端支持的准入检查是故意的 不
镜像:每个租户副本上限和插件允许列表需要集群状态,
和 image.tag 是由变化的webhook填充的,所以在预览时强制执行
会误拒绝依赖于默认的程序。把族群当成一个
高覆盖率的本地大门,不能保证录取。
验证器库
规则存在于 src/validators.ts 作为纯函数
没有Pulumi运行时依赖,这使得两者的逻辑相同
策略包和跨工具合同测试:
validateByType(type, spec)-按Pulumi类型令牌调度。validateGatewaySpec,validatePluginSpec,validatePluginSetSpec,validateRevocationListSpec,validateClusterSpec,validateRouteSpec,validateTenantSpec,validatePluginMirrorSpec一种一种 返回Finding[]({ rule, message });空数组表示接受。isSha256Hex,isAnchoredRegexp,countWorkloadIdentities,findDuplicates-共享谓词。
MCPG Terraform提供程序提供了这些相同功能的Go端口 共享fixture语料库断言双方返回相同的结论,因此是规则 一侧放松会导致构建失败。
配置
包不需要配置。它注册了一个保单,
mcpg-admission-mirror在…宣布 enforcementLevel: "mandatory",所以。
违例阻止更新,而不是发出警告。
资源在Pulumi类型令牌后缀(…:MCPGGateway,
…:MCPGPlugin),并从中阅读 props.spec. 任何令牌匹配的资源
没有规则集就不会产生任何结果,因此包可以安全地应用于整个包
堆栈。
构建和测试
npm run build # tsc → bin/
node --test bin/validators.test.js # unit tests over the pure validators
在MCPG工作区中,从repo根目录:
pnpm --filter ./iac/pulumi/policy exec tsc -b --noEmit # tsc --noEmit
pnpm --filter ./iac/pulumi/policy test # builds, then runs the validator tests
执照
apache - 2.0。
看到也
- https://mcpg.dev/docs/self-hosting/pulumi -安装MCPG与Pulumi,
包括
@mcpg/pulumi组件和@mcpg/pulumi-crds类型的SDK 这包守卫。 - https://mcpg.dev/docs/reference/operator-crds - - -
mcpg.devcrd和 被镜像的准入规则。 - https://mcpg.dev/docs/security/plugin-security -签名,信任根和 插件和吊销列表规则强制执行的吊销。
- https://mcpg.dev/docs/self-hosting/terraform-provider -同样的规则 作为Terraform计划时间验证强制执行。