ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

如何为 Nx Cloud 远程缓存启用端到端加密保护任务产物

如何为 Nx Cloud 远程缓存启用端到端加密保护任务产物 如何为 Nx Cloud 远程缓存启用端到端加密保护任务产物【免费下载链接】nxThe Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time.项目地址: https://gitcode.com/GitHub_Trending/nx/nx如果你的工作区已经连接到 Nx Cloud 远程缓存CI 和开发者机器之间共享的任务产物终端输出、outputs声明的文件会经过服务端存储。端到端加密e2e encryption的作用是在产物离开你的机器之前先加密、下载到本地后再解密这样即使有人拿到了 Nx Cloud 服务器的访问权限也无法直接查看你的任务产物。本文给出在nx.json中配置加密键、通过环境变量提供加密键的完整做法以及解密单个已加密产物的验证方式。前提条件工作区已连接到 Nx Cloud。连接命令来自远程缓存文档npx nxlatest connect目标任务的缓存已开启在nx.json的targetDefaults或项目配置中设置cache: true否则不存在会被加密上传的任务产物。理解加密覆盖的数据范围有助于判断这项配置的价值。Nx Cloud 为每个任务上传的数据有三类任务输入的哈希无法还原源码、任务产生的输出文件、任务运行的终端输出。端到端加密覆盖其中的产物与元数据未开启 e2e 加密时Public Cloud 上存储的元数据同样会被加密而传输层面所有与 Nx Cloud API 的通信默认走 HTTPS。在 nx.json 中配置加密键Nx 17在nx.json中增加nxCloudEncryptionKey属性。文档示例如下cheddar为文档示例值请替换为你自己生成的密钥{ nxCloudEncryptionKey: cheddar }官方加密指南要求密钥长度不超过 32 个字符可以是任意字符串。另外nx.json参考文档说明 Nx Cloud 任务运行器会归一化密钥长度因此nx.json参考中同时提到任何长度的密钥都可以接受——两处表述的差别在于前者是配置指南给出的建议上限实际以你使用的版本行为为准。如果你的工作区还在 Nx 17 之前加密键写在taskRunnerOptions下文档示例{ tasksRunnerOptions: { default: { runner: nx-cloud, options: { accessToken: SOMETOKEN, // Add the following property with your secret key encryptionKey: cheddar } } } }其中accessToken保持你工作区已有的取值即可。使用环境变量或 env 文件提供密钥不想把密钥写进nx.json时可以用NX_CLOUD_ENCRYPTION_KEY环境变量。它与nx.json属性功能上完全等价。文档示例NX_CLOUD_ENCRYPTION_KEYmyEncryptionKey nx build my-project另一种持久化方式在工作区根目录创建一个名为nx-cloud.env的 env 文件Nx Cloud 运行器会从该文件加载NX_CLOUD_ENCRYPTION_KEY和NX_CLOUD_AUTH_TOKEN。该文件常被加入.gitignore适合在 CI 中分发密钥而不提交进代码库。验证手动解密一个加密产物nx-cloudCLI 提供了decrypt-artifact命令可以把 Nx Cloud 用你工作区加密键存储的产物解密出来用于确认密钥配置确实生效。密钥优先从NX_CLOUD_ENCRYPTION_KEY读取没有该环境变量时会在最近的nx.json中查找nxCloudEncryptionKey。用法npx nx-cloud decrypt-artifact path [--output-path path]path指向单个加密文件或一个目录目录下的所有文件会解密到一个镜像输出树。--output-path/-o输出目录相对路径基于当前工作目录解析。输出命名规则用于判断解密是否成功单个文件输出到当前目录文件名去除.enc或.encrypted后缀并追加-decrypted如果文件名没有扩展名而解密内容以.tar.gz或.zip结尾会恢复出该扩展名。目录输出到当前目录的directory-name-decrypted内部每个文件保留自身文件名去掉包装扩展名。一个注意点在pnpm nx-cloud和yarn nx-cloud下相对路径是从工作区根目录而非当前目录解析的此时请改用npx nx-cloud、./node_modules/.bin/nx-cloud或绝对路径。加密生效后保护到什么程度配置好之后Nx Cloud 用于重放任务的元数据全部是加密的即使有人拿到了你 Nx Cloud 存储桶的访问权限也无法篡改重放任务时恢复的文件和终端输出。同时Nx Cloud 会单独保存一份未加密的终端输出仅工作区受邀成员可以在 Nx Cloud 网页端查看用于排查任务失败原因这份未加密输出只在浏览器中使用重放任务时不使用。不同部署形态下的加密覆盖来自官方加密指南与 Nx Cloud API 的所有通信包括获取/存储产物在传输中加密。使用 Nx Public Cloud 时存储的元数据被加密。使用 Nx Public Cloud 且开启 e2e 加密时存储的产物也被加密。使用 on-prem 版本时若你自己运行并开启了加密的 MongoDB存储的元数据被加密存储的产物则由 e2e 加密保护。与缓存安全措施的配合端到端加密是 Nx 文档列出的防缓存投毒cache poisoning手段之一缓存条目一经写入不可变但若攻击者进入存放产物的服务器开启 e2e 加密后他们在磁盘上看到的将是只有你工作区持有密钥才能解密的文件。文档同时建议配套做法CI 中仅在受保护分支使用 read-write token其余分支使用 read-only token在生成真正要部署的构建产物时跳过缓存确保缓存投毒永远不会影响最终用户。这些措施与加密键配置相互独立可按组织需要组合启用。相关文件加密配置指南Nx Cloud 连接配置与 env 加载缓存安全最佳实践远程缓存功能说明nx-cloud CLI 参考decrypt-artifactnx.json 配置参考环境变量参考【免费下载链接】nxThe Monorepo Platform that amplifies both developers and AI agents. Nx optimizes your builds, scales your CI, and fixes failed PRs automatically. Ship in half the time.项目地址: https://gitcode.com/GitHub_Trending/nx/nx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进