通过 Azure 管道将机密注入 Docker 映像

Pal*_*lBo 6 azure docker azure-devops azure-pipelines

我在 Azure Devops 中有一个管道,用于构建一些图像并将其推送到 DockerHub。这些映像被推送到生产和开发环境,但也可用于拉取本地开发。对于 Azure 中生产和开发中的机密,我们仅使用密钥库和变量组。但是,我们还没有找到在本地工作时注入机密的良好解决方案。

例如,在 appsettings.json 中,我们有一个 ClientSecret 参数,用于针对 Azure AD 进行身份验证。我们如何在发布管道期间将此参数插入到 appsettings.json 中,并且以后不让其他人看到它?

一些建议包括在管道中使用文件转换,但这并不是最佳选择,因为我们实际上不想更改任何文件。另一个建议是在管道中使用 --build-arg ,但这些参数在docker history.

那么如何将秘密注入到 Docker 镜像中的 appsettings.json 中,并且这个秘密最好在任何地方都不可见呢?

Pat*_*SFT 3

正如您所提到的,使用文件转换和变量替换是一种配置较少且快速的方法。

此外,您还可以选择使用Azure Key Vault

Azure Key Vault 可帮助团队在集中存储中安全地存储和管理敏感信息,例如密钥、密码、证书等,这些信息由行业标准算法、密钥长度甚至硬件安全模块进行保护。这可以防止通过源代码暴露信息,这是许多开发人员常犯的错误。许多开发人员在源代码中留下数据库连接字符串、密码、私钥等敏感信息,这些信息一旦被恶意用户获取,可能会导致不良后果。

访问密钥保管库需要适当的身份验证和授权,通过 RBAC,团队可以更精细地控制谁对敏感数据拥有哪些权限。

至于如何在Azure DevOps中使用Azure Key Vault,您可以参考以下博客:

如何将 docker image Secret 与 Azure Key Vault 一起使用,您可以查看此链接:Publishing a Single Image Docker Container with Secrets from VS2017 and Running it on Azure

更多方法供您参考:Azure 中处理应用程序机密的 7 种方法