@adaptiveworx/iac-policies
可作曲的普鲁米克罗斯盖德政策原始人. 图书馆,不是完整的包 消费者将原始人编成自己的 PolicyPack 与符合其兽形的配置相匹配.
三项跨云政策+一项AWS:
| 工厂 | 云头 | 它会做什么 |
|---|---|---|
requireTagsPolicy | 横云 | 拒绝缺少所需标记的资源( 或有不匹配的预期值) |
regionalCompliancePolicy | 跨云(AWS- 默认; Azure/GCP 可配置) | 在允许的区域列表之外拒绝资源 |
deploymentProtectionPolicy | 横云 | CI/CD中未运行的块生产部署 |
awsSecurityBaselinePolicy | 自动取款机 | S3 公共- ACL 拒绝 + S3 加密配置存在 |
附加用于遵约说明的类别出口: FrameworkControls, (中文(简体) ), ComplianceEvidence,未来用途 emitEvidence ub.
安装
pnpm add @adaptiveworx/iac-policies @pulumi/policy @pulumi/pulumi
@pulumi/policy 财务报告和审定财务报表 @pulumi/pulumi 是同伴的依赖关系.
消费者如何组成一个包
每个消费者在回购中都保留自己的成套政策目录:
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 实例如下.
示例: AWS 消费者
使用所有四个原始人。 从上下文拉出堆栈
@adaptiveworx/iac-core 标记值与 Pulumi 同步
堆放包对面.
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,
}),
],
});
然后部署与包:
pulumi preview --policy-pack ./policies
pulumi up --policy-pack ./policies
示例: Azure 消费者
独取相克相克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克克 消费者加了他们自己的Azure特有产品 基线(储存、密钥金库等)作为同一处的额外政策 需要的时候打包.
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.)
],
});
为什么没有内置包?
大多数政策关注是针对消费者的:
- 需要的标记不同 —— 说
Environment, (中文(简体) ),Owner, (中文(简体) ),CostCenter, (中文(简体) ),Compliance,, , , , , , , , - 允许的区域各不相同 ——按租户,数据居住情况,环境分类
- 合规框架各不相同 - 保健问题高级管理局;支付费用问题高级管理局;ISO27001基线
- 生产门不同 —— 说
prd, (中文(简体) ),prod, (中文(简体) ),production,有时也sec编号 :mgmt - 云面变化 只有AWS的消费者不希望Azure进行特定检查,反之亦然
装运一个预先制造的包要么过于笼统,无法使用,要么过于适应性WorX,无法共享。 一个原始人库是可相容的,可相容的,让每个消费者都符合自己的惯例.
遵约说明
使用 FrameworkControls (c) 记录某一项政策所要求的遵守情况:
import type { FrameworkControls } from "@adaptiveworx/iac-policies";
const tagControls: FrameworkControls = {
"NIST-800-53": ["CM-2", "CM-8"],
ISO27001: ["A.8.1.1"],
};
这些是注释类型——它们不驱动运行时的行为,但它们是合规报告和审计证据管道所连接的.
稳定
0.x 原始地表稳定下来 后向相容的 API 变化将是大起落;小版本会添加新的原始或非破解选项字段.
许可证
Apache 2.0 (英语)。见 通知。 。 。 .
仓库
github.com/AdaptiveWorX/iac-core/树干/主/包/iac-policys (英语)问题: iac-core/问题。 。 。 .