# @mcpg-dev/pulumi-policy 中文文档

规范地址：https://npmcn.com/package/%40mcpg-dev/pulumi-policy/

版本：0\.1\.0-beta\.45
npm 元数据更新时间：2026-11-01T19:08:43.647Z
中文译文更新时间：2026-11-01T20:34:12.041Z
软件包许可：Apache-2\.0

本文由上游 README 机器翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40mcpg-dev/pulumi-policy
原文对照：https://npmcn.com/package/%40mcpg-dev/pulumi-policy/?lang=original
项目主页：https://github.com/mcpg-dev/pulumi-mcpg-policy#readme
源码仓库：https://github.com/mcpg-dev/pulumi-mcpg-policy

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：71.8 kB，17 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- 首次发布：2026-08-13T13:13:52.146Z
- 最新版本发布：2026-11-01T19:08:43.200Z
- 已发布版本数：30（近 12 个月 30 个）

## 中文简介

Pulumi CrossGuard策略包镜像MCPG运营商准入规则。

## 安装

```sh
npm install @mcpg-dev/pulumi-policy
```

也可以使用：`pnpm add @mcpg-dev/pulumi-policy`、`yarn add @mcpg-dev/pulumi-policy`、`bun add @mcpg-dev/pulumi-policy`

## README

# @mcpg / pulumi-policy

一个Pulumi **CrossGuard** 策略包，执行MCPG Kubernetes操作符 入场规则 `pulumi preview`，在任何东西到达集群之前。它 检查 `mcpg.dev` 程序声明的自定义资源——网关、 插件，插件集，撤销列表，集群，路由，租户和插件 镜像-并报告违规运营商的准入网钩将 在本地返回，无需api -服务器往返。

## 快速启动

包在预览/更新时被引用，而不是导入到您的 计划:

```bash
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可以加载它：

```bash
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`](https://npmcn.com/package/%40mcpg-dev/pulumi-policy/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`． 任何令牌匹配的资源 没有规则集就不会产生任何结果，因此包可以安全地应用于整个包 堆栈。

## 构建和测试

```bash
npm run build                       # tsc → bin/
node --test bin/validators.test.js  # unit tests over the pure validators
```

在MCPG工作区中，从repo根目录：

```bash
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](https://mcpg.dev/docs/self-hosting/pulumi) -安装MCPG与Pulumi， 包括 `@mcpg/pulumi` 组件和 `@mcpg/pulumi-crds` 类型的SDK 这包守卫。
-   [https://mcpg.dev/docs/reference/operator-crds](https://mcpg.dev/docs/reference/operator-crds) - - - `mcpg.dev` crd和 被镜像的准入规则。
-   [https://mcpg.dev/docs/security/plugin-security](https://mcpg.dev/docs/security/plugin-security) -签名，信任根和 插件和吊销列表规则强制执行的吊销。
-   [https://mcpg.dev/docs/self-hosting/terraform-provider](https://mcpg.dev/docs/self-hosting/terraform-provider) -同样的规则 作为Terraform计划时间验证强制执行。

## 常见问题

### @mcpg-dev/pulumi-policy 是什么？

Pulumi CrossGuard策略包镜像MCPG运营商准入规则。

### 如何安装 @mcpg-dev/pulumi-policy？

在项目目录运行 npm install @mcpg-dev/pulumi-policy，或使用 pnpm add / yarn add / bun add。

### @mcpg-dev/pulumi-policy 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @mcpg-dev/pulumi-policy 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @mcpg-dev/pulumi-policy 可以商用吗？

@mcpg-dev/pulumi-policy 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @mcpg-dev/pulumi-policy 还在维护吗？

最新版本 0\.1\.0-beta\.45 发布于 2026/11/02（1 天前）；至今共发布 30 个版本，其中过去 12 个月发布了 30 个；首次发布于 2026/08/13。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

