策略包现在可以访问 Pulumi ESC 环境
Source: Pulumi Blog
请提供您希望翻译的具体文本内容,我将为您翻译成简体中文并保持原有的格式、Markdown 语法以及技术术语不变。谢谢!
问题
Pulumi policy packs 让您能够在整个基础设施中强制执行规则,但有些策略需要的不仅仅是它们评估的资源输入。例如:
- 需要访问外部合规 API 的策略必须提供 API 令牌。
- 成本强制策略可能需要为开发环境和生产环境设置不同的支出阈值。
- 访问控制策略可能需要引用内部服务注册表。
此前,这些值只能硬编码在策略组配置中,或通过单独的流程进行管理,导致:
- 安全风险: 凭证以明文形式存储。
- 运维负担: 更新凭证需要触及所有使用该凭证的策略组。
- 缺乏环境隔离: 相同的值在所有环境中统一使用,无法针对不同环境进行配置差异化。
新功能
策略包现在可以引用 Pulumi ESC 环境,就像堆栈已经可以做到的一样。当你在策略组中将 ESC 环境附加到策略包时,该环境中的值将在运行时提供给你的策略——无论你是在运行预防性策略还是审计策略。
这使得策略包可以使用 ESC 来处理:
- Secrets: 通过 ESC 的机密管理处理的 API 令牌、服务凭证以及其他敏感值,包括来自 AWS、Azure 和 GCP 等提供商的动态凭证。
- Configuration: 环境特定的阈值、允许的地区、服务白名单以及其他在不同环境中会变化的策略参数。
工作原理
您在策略组内的策略包上配置 ESC 环境引用。运行时,这些环境中的值会被解析,并通过策略包的配置提供给您的策略使用。
示例 ESC 环境
values:
compliance:
apiToken:
fn::secret: xxxxxxxxxxxxxxxx
costThreshold: 5000
policyConfig:
cost-compliance:
maxMonthlyCost: ${compliance.costThreshold}
apiEndpoint: https://compliance.example.com
apiToken: ${compliance.apiToken}
policyConfig 属性的作用类似于堆栈的 pulumiConfig。每个策略名称下嵌套的值会在运行时作为该策略的配置提供。机密信息保持加密状态,仅在环境被解析时才会解密。
您还可以使用 environmentVariables 属性,将值注入为策略运行时的环境变量,遵循与堆栈环境变量相同的模式。
示例:合规 API 验证
考虑一个策略,在每个新资源被部署之前,先对其进行外部合规 API 的验证。该 API 需要身份验证令牌,并返回资源配置是否符合贵组织的合规标准。
Before:
- API 令牌以明文形式存放在策略组配置中。
- 轮换令牌意味着要更新每个策略组。
- 没有凭证访问的审计记录。
- 无法为预发布和生产环境使用不同的 API 端点。
After:
- API 令牌存放在 ESC 环境中。
- 集中轮换: 只需更新一次令牌,所有引用该策略组的地方都会自动获取更改。
- 访问控制: ESC 的基于角色的访问控制决定谁可以查看或修改凭证。
- 审计记录: 对环境的每一次访问都会被记录。
- 环境隔离: 为预发布和生产使用不同的 ESC 环境,从而使用不同的合规端点。
开始使用
- 创建 一个包含策略配置和机密的 ESC 环境。
- 将 环境通过 Pulumi Cloud 控制台 附加 到策略组中的策略包。
- 更新 您的策略,以读取环境提供的配置值。
了解更多
- policyConfig 参考
- Pulumi ESC 文档
- Policy packs 文档
- 开始使用 Pulumi ESC