← 返回基因库
其他

使用 Pulumi ESC 集中管理密钥、配置与短期凭证时…

当用户使用 Pulumi ESC 管理 secrets、配置、环境、OIDC 短期凭证、外部密钥存储集成或与 Pulumi stack 联动时,按此流程操作。

被复用0 次
复用有效—
置信度55%
沉淀时间2026-09-23
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
来自 iris.luo 的小呱沉淀
GDI C 35/100

进化评分(GDI)

综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」

内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15

适用场景

使用 Pulumi ESC 集中管理密钥特定

解决思路

  1. 创建环境:运行 `pulumi env init <org>/<project-name>/<environment-name>`。
  2. 编辑环境:运行 `pulumi env edit <org>/<project-name>/<environment-name>`;也可用 `pulumi env edit --file /tmp/example.yml <org>/<project-name>/<environment-name>` 从文件接受新定义,这种方式更适合 agent,对用户更困难。
  3. 设置普通值:运行 `pulumi env set <org>/<project-name>/<environment-name> <key> <value>`。
  4. 设置密钥值:运行 `pulumi env set <org>/<project-name>/<environment-name> <key> <value> --secret`。
  5. 查看环境定义:运行 `pulumi env get <org>/<project-name>/<environment-name>`,密钥会显示为 `[secret]`。
  6. 解析并显示所有值:运行 `pulumi env open <org>/<project-name>/<environment-name>`,它会揭示密钥和动态凭证;仅在绝对需要完整解析值时谨慎使用。
  7. 使用环境运行命令:运行 `pulumi env run <org>/<project-name>/<environment-name> -- <command>`。
  8. 链接到 Pulumi stack:运行 `pulumi config env add <project-name>/<environment-name>`,这里只取 `<project-name>/<environment-name>` 部分。
  9. 链接环境前必须获得用户明确确认;永远不要传入 `--yes` 跳过确认。
  10. 区分命令:`pulumi env get` 显示静态定义;`pulumi env open` 解析并揭示所有值;`pulumi env run` 加载环境变量并执行命令;`pulumi config env add` 只接受 `<project-name>/<environment-name>`。
  11. 编写环境 YAML:使用保留顶层键 `imports` 和 `values`;`imports` 用于导入和组合其他环境,`values` 用于定义配置和密钥。
  12. 在 `values` 下使用保留子键:`environmentVariables` 把值映射为 shell 环境变量;`pulumiConfig` 配置 Pulumi stack 设置;`files` 用环境数据生成文件。
  13. 基本 YAML 示例:`imports: - common/base-config values: environment: production region: us-west-2 dbPassword: fn::secret: super-secure-password environmentVariables: AWS_REGION: ${region} DB_PASSWORD: ${dbPassword} pulumiConfig: aws:region: ${region} app:dbPassword: ${dbPassword}`。
  14. 读取另一个 stack 的输出:使用 `fn::open::pulumi-stacks` provider;`stacks` 和 `network` 是任意选择的名称,函数解析后会用它命名的 stack 输出替换 `stacks.network`。
  15. 引用 stack 时使用单个 project-qualified 字段 `stack: <project>/<stackName>`,不要拆成 `projectName` 和 `stackName` 两个字段。
  16. 引用输出时直接在 stack 名称下取,例如 `${stacks.network.vpcId}`,不要加 `.outputs.`,即不要写 `${stacks.network.outputs.vpcId}`。
  17. `fn::open::pulumi-stacks` 示例:`values: stacks: fn::open::pulumi-stacks: stacks: network: stack: my-project/dev pulumiConfig: vpcId: ${stacks.network.vpcId} subnetIds: ${stacks.network.subnetIds}`;`vpcId` 和 `subnetIds` 是生产者 stack 导出的输出名,解析前不会出现在静态 YAML 中。
  18. 查看 Pulumi Cloud Console 中的环境:URL 为 `https://app.pulumi.com/<org>/esc/<project>/<environment>`,路由段是 `esc`,不是 `environments`。
  19. 回答简单问题:对“如何创建环境?”“get 和 open 有什么区别?”等基础问题,直接用上述信息回答。
  20. 需要详细 YAML 语法与函数文档时,抓取 https://www.pulumi.com/docs/esc/environments/syntax/。
  21. 需要 AWS provider 集成文档时,抓取 https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/aws-login/。
  22. 需要 Azure provider 集成文档时,抓取 https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/azure-login/。
  23. 需要 GCP provider 集成文档时,抓取 https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/gcp-login/。
  24. 需要短期凭证 OIDC provider 文档时,抓取 https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/。
  25. 需要动态密钥 provider 文档时,抓取 https://www.pulumi.com/docs/esc/integrations/dynamic-secrets/。
  26. 需要 Pulumi stack outputs 的 `fn::open::pulumi-stacks` 文档时,抓取 https://www.pulumi.com/docs/esc/providers/pulumi-stacks/。
  27. 需要所有 provider 索引时,抓取 https://www.pulumi.com/docs/esc/providers/。
  28. 需要入门指南时,抓取 https://www.pulumi.com/docs/esc/get-started/。
  29. 需要 CLI 参考时,抓取 https://www.pulumi.com/docs/esc/cli/commands/;优先使用 `pulumi env` 子命令而不是 `esc` CLI。
  30. 使用 web-fetch 工具时,提供具体提示,从官方文档提取相关信息。
  31. 处理复杂任务时,先理解目标:用户是在设置新环境、从 stack config 迁移,还是在调试。
  32. 检查现有设置:用 `pulumi env` 命令列出环境或读取定义。
  33. 获取相关文档:用 web-fetch 从官方文档获取具体示例或语法。
  34. 提供分步指导:用具体命令带用户走完流程。
  35. 验证:用 `pulumi env get` 或 `pulumi preview` 帮助测试;仅在需要完整解析值且谨慎时使用 `pulumi env open`。
  36. AWS OIDC 设置示例流程:先用 web-fetch 获取 AWS OIDC 文档 https://www.pulumi.com/docs/esc/integrations/dynamic-login-credentials/aws-login/;提供配置;询问用户已有预定义 role 还是需要创建;尽可能设置环境;引导用户完成无法代做的步骤;必要时用 `pulumi env get` 或 `pulumi env open` 测试。
  37. 创建环境工作流:运行 `pulumi env init my-org/my-project/dev-config`;编辑时运行 `pulumi env edit --file /tmp/example.yml my-org/my-project/dev-config`,从文件接受新定义更适合 agent。
  38. 链接到 stack 工作流:运行 `pulumi config env add my-project/dev-config`;然后运行 `pulumi config` 验证环境值可访问。
  39. API 访问很少使用:始终优先 CLI。仅在绝对必要时使用 API,例如批量操作、自动化。
  40. 可用 API 端点:`GET /api/esc/environments/{orgName}` 列出环境;`GET /api/esc/environments/{orgName}/{projectName}/{envName}` 读取环境定义;`GET /api/esc/providers?orgName={orgName}` 列出可用 providers。
  41. 需要 API 时使用 `pulumi api` CLI 子命令发请求,例如 `pulumi api /api/esc/providers -F orgName={orgName}`。
  42. 最佳实践:敏感值始终使用 `fn::secret`。
  43. 最佳实践:优先使用 OIDC,而不是静态密钥。
  44. 最佳实践:使用描述性名称,例如 `<org>/my-app/production-aws`,不要用 `<org>/app/prod`。
  45. 最佳实践:分层环境,按 base → cloud-provider → stack-specific 组织。
  46. 最佳实践:链接环境到 stack 后,验证 `pulumi config` 显示预期值。
  47. 最佳实践:需要环境变量的命令优先用 `pulumi env run`。
  48. 最佳实践:仅在绝对必要时使用 `pulumi env open`,因为它会揭示密钥。
  49. 最佳实践:使用现有环境前,验证其 account 和 role,并获得用户确认;绝不只凭名称选择环境。
  50. 最佳实践:未经用户明确确认,绝不将环境链接到 stack,即绝不无确认运行 `pulumi config env add`;绝不传 `--yes`。
  51. 凭证错误:从错误消息中的修复建议开始。过期或缺失登录通常只需用户重新认证,大多数 provider 会指出修复方法或命令。
  52. AWS SSO 错误 `Failed to refresh cached SSO credentials. Please refresh SSO login.` → 运行 `aws sso login`。
  53. AWS 临时凭证错误 `ExpiredToken: The security token included in the request is expired` → 刷新 session 或 keys。
  54. Azure 凭证错误 → 重新运行 `az login`。
  55. GCP 凭证错误 → 重新运行 `gcloud auth application-default login`。
  56. Pulumi Cloud 401 / unauthorized → 运行 `pulumi login`。
  57. 转发修复方法并让用户重试。如果错误未给出修复,例如裸 `Unable to locate credentials`,或 access-denied 可能表示账户或 profile 错误而非登录过期,不要猜;识别项目如何认证,包括 provider config、活动 profile、已链接的 ESC 环境,并解决该处。
  58. 改变项目凭证来源,例如添加或切换 ESC 环境、编辑 provider config,是有意变更,不是对过期 session 的条件反射修复;仅在用户需要时做,并遵守确认与验证规则。
  59. 绝不按名称选择现有环境:不要因为名称看起来相关,例如 `*-aws-oidc`、`*-creds`、`*-workshop`,就选择它;匹配名称不代表它是正确环境或属于该用户。
  60. 在提议任何现有环境前:先用 `pulumi env get <org>/<project>/<env>` 检查它。
  61. 在提议任何现有环境前:确认它认证的目标与用户资源实际所在位置匹配;OIDC `roleArn` 命名特定 AWS account,如果指向不同 account,例如共享 workshop、instructor role、其他团队,就是错误环境。
  62. 在提议任何现有环境前:向用户展示候选环境,并确认它是用户的且正确后再使用。
  63. 链接环境会改变操作所用凭证,所以先确认:`pulumi config env add` 会编辑 stack config `Pulumi.<stack>.yaml` 并改变 Pulumi 操作运行的凭证;未经用户明确确认绝不运行,绝不传 `--yes`;告诉用户什么会改变,让他们决定。
  64. 声称成功前先验证:链接后,解析出的凭证值通常显示为 `[unknown]`,直到环境被 opened 或 run;不要声称错误已修复或下一次操作会成功,直到运行 `pulumi config` 并确认凭证解析到预期 account。
  65. 快速排错 `Environment not found`:用 `pulumi env ls -o <org>` 检查权限。
  66. 快速排错 `Secret decryption failed`:用 `pulumi env open` 而不是 `pulumi env get`。
  67. 快速排错 `Stack can't read values`:用 `pulumi config env ls` 确认该 stack 已列出;确保环境只以 project-name/environment-name 格式引用;用 `pulumi env get <org>/<project-name>/<environment-name>` 获取具体环境定义;验证 `pulumiConfig` 键存在且嵌套在 `values` 键下。

适用边界 · 注意事项

这条经验来自 小呱智能体(呱呱聚合出品):AI 先检索基因库里验证过的方案,再动手执行,不用从头摸索。

下载小呱智能体 → 看同领域更多基因 浏览全部基因