@adaptiveworx/iac-policies

中文文档
0.2.3发布于 2026/10/04Apache-2.0TypeScriptES Module构建来源已验证近 30 天下载 2348

Composable Pulumi CrossGuard policy primitives for cross-cloud infrastructure governance: tag enforcement, regional compliance, deployment gates, and AWS security baseline. Consumers compose primitives into their own PolicyPack.

原始使用文档
文档目录9 节
  1. Install
  2. How a consumer composes a pack
  3. Example: AWS consumer
  4. Example: Azure consumer
  5. Why no built-in pack?
  6. Compliance annotations
  7. Stability
  8. License
  9. Repository

@adaptiveworx/iac-policies

Composable Pulumi CrossGuard policy primitives. A library, not a complete pack — consumers compose primitives into their own PolicyPack with the configuration that fits their org.

Three cross-cloud policies + one AWS-specific:

FactoryCloudWhat it does
requireTagsPolicycross-cloudReject resources missing required tags (or with mismatched expected values)
regionalCompliancePolicycross-cloud (AWS-default; configurable for Azure/GCP)Reject resources outside an allowed region list
deploymentProtectionPolicycross-cloudBlock production deploys that aren't running in CI/CD
awsSecurityBaselinePolicyAWSS3 public-ACL rejection + S3 encryption-config presence

Plus type exports for compliance annotation: FrameworkControls, ComplianceEvidence, and a future-use emitEvidence stub.

Install

pnpm add @adaptiveworx/iac-policies @pulumi/policy @pulumi/pulumi

@pulumi/policy and @pulumi/pulumi are peer dependencies.

How a consumer composes a pack

Each consumer maintains their own policy-pack directory in their repo:

my-repo/
└── policies/
    ├── PulumiPolicy.yaml     # pack manifest
    ├── package.json          # depends on @adaptiveworx/iac-policies + @pulumi/policy + @pulumi/pulumi
    └── index.ts              # imports primitives + constructs PolicyPack

PulumiPolicy.yaml:

name: my-org-policies
runtime: nodejs
description: My org's policy pack composed from @adaptiveworx/iac-policies primitives

index.ts examples below.

Example: AWS consumer

Uses all four primitives. Pulls stack context from @adaptiveworx/iac-core so tag values stay in sync with the Pulumi stack the pack runs against.

import { PolicyPack } from "@pulumi/policy";
import { detectStackContext } from "@adaptiveworx/iac-core";
import {
  requireTagsPolicy, // requiredTags defaults to DEFAULT_REQUIRED_TAGS: Environment, Workload, ManagedBy
  regionalCompliancePolicy,
  awsSecurityBaselinePolicy,
  deploymentProtectionPolicy,
  AWS_NON_TAGGABLE_RESOURCES,
} from "@adaptiveworx/iac-policies";

const ctx = detectStackContext();

new PolicyPack("my-aws-policies", {
  policies: [
    requireTagsPolicy({
      requiredTags: ["Environment", "AccountPurpose", "StackPurpose"],
      expectedTagValues: () => ({
        Environment: ctx.targetEnvironment ?? ctx.environment,
        AccountPurpose: ctx.accountPurpose,
        StackPurpose: ctx.stackPurpose,
      }),
      skipResourceTypes: AWS_NON_TAGGABLE_RESOURCES,
      skipResourceTypePrefixes: ["pulumi:"],
    }),

    regionalCompliancePolicy({
      allowedRegions:
        ctx.environment === "prd" ? ["us-east-1", "us-west-2"] : ["us-east-1"],
    }),

    awsSecurityBaselinePolicy(),

    deploymentProtectionPolicy({
      productionEnvironments: ["prd", "sec"],
      environmentResolver: () => ctx.targetEnvironment ?? ctx.environment,
    }),
  ],
});

Then deploy with the pack:

pulumi preview --policy-pack ./policies
pulumi up      --policy-pack ./policies

Example: Azure consumer

Cross-cloud primitives only. The consumer adds their own Azure-specific baseline (storage, key vault, etc.) as additional policies in the same pack when needed.

import { PolicyPack } from "@pulumi/policy";
import {
  requireTagsPolicy, // requiredTags defaults to DEFAULT_REQUIRED_TAGS: Environment, Workload, ManagedBy
  regionalCompliancePolicy,
  deploymentProtectionPolicy,
} from "@adaptiveworx/iac-policies";

new PolicyPack("my-azure-policies", {
  policies: [
    requireTagsPolicy({
      requiredTags: ["Environment", "Owner"],
    }),

    regionalCompliancePolicy({
      allowedRegions: ["westus3", "eastus2"],
      resourceTypeMatcher: t => t.startsWith("azure-native:"),
      regionExtractor: args => args.props.location as string | undefined,
    }),

    deploymentProtectionPolicy({
      productionEnvironments: ["prod"],
      environmentResolver: () => process.env.PULUMI_STACK ?? "dev",
    }),

    // (No AWS baseline — write Azure-specific baseline policies as
    //  needed and add them to this pack.)
  ],
});

Why no built-in pack?

Most policy concerns are consumer-specific:

  • Required tags vary — Environment, Owner, CostCenter, Compliance, …
  • Allowed regions vary — by tenant, by data-residency, by environment
  • Compliance frameworks vary — HIPAA for healthcare; PCI-DSS for payments; ISO27001 baseline for everyone
  • Production gates vary — prd, prod, production, sometimes also sec/mgmt
  • Cloud surface varies — AWS-only consumers don't want Azure-specific checks and vice versa

Shipping a pre-built pack would either be too generic to be useful or too AdaptiveWorX-specific to share. A library of primitives is composable, configurable, and lets each consumer match their own conventions.

Compliance annotations

Use FrameworkControls to document which compliance framework requirements a given policy satisfies:

import type { FrameworkControls } from "@adaptiveworx/iac-policies";

const tagControls: FrameworkControls = {
  "NIST-800-53": ["CM-2", "CM-8"],
  ISO27001: ["A.8.1.1"],
};

These are annotation types — they don't drive runtime behavior, but they're what compliance reporting and audit-evidence pipelines hook into.

Stability

0.x while the primitive surfaces stabilize. Backwards-incompatible API changes will be major bumps; minor versions add new primitives or non-breaking option fields.

License

Apache 2.0. See NOTICE.

Repository

github.com/AdaptiveWorX/iac-core/tree/main/packages/iac-policies. Issues: iac-core/issues.

版本与发布记录

@adaptiveworx/iac-policies 共发布 7 个版本,首次发布于 2026/04/29;过去 12 个月发布了 7 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.2.3latest2026/10/041 个月前
0.2.22026/10/041 个月前
0.2.12026/05/026 个月前
0.2.02026/05/026 个月前
0.1.22026/05/026 个月前
0.1.12026/04/306 个月前

关于 @adaptiveworx/iac-policies 的常见问题

@adaptiveworx/iac-policies 是什么?

Composable Pulumi CrossGuard policy primitives for cross-cloud infrastructure governance: tag enforcement, regional compliance, deployment gates, and AWS security baseline. Consumers compose primitives into their own PolicyPack.

如何安装 @adaptiveworx/iac-policies?

在项目目录运行 npm install @adaptiveworx/iac-policies,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@pulumi/policy(^1.18.0)、@pulumi/pulumi(^3.150.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@adaptiveworx/iac-policies 支持 TypeScript 吗?

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

@adaptiveworx/iac-policies 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@adaptiveworx/iac-policies 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=26.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@adaptiveworx/iac-policies 可以商用吗?

@adaptiveworx/iac-policies 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@adaptiveworx/iac-policies 的下载量有多少?

根据 npm 官方下载统计,@adaptiveworx/iac-policies 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,348 次,日均约 78 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@adaptiveworx/iac-policies 还在维护吗?

最新版本 0.2.3 发布于 2026/10/04(1 个月前);至今共发布 7 个版本,其中过去 12 个月发布了 7 个;首次发布于 2026/04/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。