安全地存储 Azure Key Vault clientSecret

Posted

技术标签:

【中文标题】安全地存储 Azure Key Vault clientSecret【英文标题】:Store Azure Key Vault clientSecret securely 【发布时间】:2021-12-17 04:22:37 【问题描述】:

我正在开发一个 C# 桌面应用程序(一个用于 3D 建模软件的插件),因此我需要从 GraphQL 端点访问信息。为了访问端点,我需要提供一个密钥。所以我所做的就是将该密钥存储在 Azure Key Vault 上。 这是我用来从 Azure Key Vault 获取密钥的代码:

var clientProd = new SecretClient(new Uri("my-azure-keyvault-url"),
  new ClientSecretCredential(
    "tenantId",
    "clientId",
    "clientSecret"));

Response<KeyVaultSecret> secret = await clientProd.GetSecretAsync("cbe-graphQL-prod");

但现在我发现自己陷入了这种恶性循环,我不确定那个 clientSecret 应该来自哪里,所以它没有被推送到版本控制。 我打算将这个应用程序部署到我公司的多个用户,所以我不想在每个人的机器上创建一个环境变量(甚至没有组策略)。

最好的方法是什么?

谢谢!

【问题讨论】:

您是在询问最初在哪里找到桌面应用程序的客户端密码,还是想知道从 keyVault 传递该密码(如果它存储在那里)? 我想存储(超出代码和/或版本控制)我需要访问 Azure Key Vault 的“clientSecret”字符串 【参考方案1】:

如果您在 Azure 中托管应用程序,则可以使用 系统分配的托管标识 访问密钥保管库,无需任何凭据(客户端 ID、客户端密码)

如果您的应用程序托管在本地,您可以限制应用程序注册(服务主体)对存储机密的密钥库的访问。

然后您可以将客户端密码存储为环境变量或硬编码客户端密码

【讨论】:

感谢您的回复,但我的应用程序实际上并没有存储在任何地方,因为它是桌面应用程序,而不是网络... 您可以将客户端密码存储在单独的文件中,并在您的情况下使用 gitignore 如果你这样做,秘密会被编译到 dll 中吗?因为我想到了这一点,但后来我也想到,当我将应用程序部署给我的同事时,他们将无法查询数据库,因为秘密不在他们的机器上...... 您可以为您的密钥保管库使用 Azure AD 身份验证:devblogs.microsoft.com/dotnet/…

以上是关于安全地存储 Azure Key Vault clientSecret的主要内容,如果未能解决你的问题,请参考以下文章

如何使用存储在Vault中的github-private-key安全地使用大厅

部署期间如何使用 Azure Key Vault 传递安全参数值?

如何通过服务主体通过 Azure Key Vault 访问 Azure 存储帐户

我们可以使用 Azure Key Vault 加密本地计算机上的 XML 文件吗?

Azure Key Vault 机密访问间歇性地无法连接套接字异常

在 Azure Key Vault 中存储 MySQL Enterprise 加密密钥