【问题标题】:How to read value from azure key vault如何从 azure key Vault 中读取值
【发布时间】:2020-03-11 08:41:46
【问题描述】:

如果我将 ClientId 和客户端密码存储在 Web/App Config 中,我无法理解 azure key vault 有什么好处。传递用于获取值的基本 URI 或完整 URL。

我没有保护应用程序,而是绕过直接读取的内容。但是任何人都可以从 key vault 中读取值,如果他们可以从 web config 中读取值。

只需要从网络配置中复制 ClientId 和 ClientSecret,将值粘贴到控制台应用程序中,然后通过传递 URI 来获取值。

我在虚拟机 (IIS) 中运行我的 Web API(c#)。我需要在 Web 配置中不提供任何值的情况下实施 KeyVault。

【问题讨论】:

    标签: c# azure-keyvault


    【解决方案1】:

    如果您不想在 web.config 中存储客户端 ID 和客户端密码,则可以使用 Azure Managed Identity 获得使用 Azure Key Vault 的授权。

    这里是官方教程:Use a Windows VM system-assigned managed identity to access Azure Key Vault

    在本教程中,它解释了托管标识的工作原理以及如何获取用于调用 Azure Key Vault API 的令牌。

    而且,事实上,您可以在您的 c# 应用程序中直接使用“Microsoft.Azure.Services.AppAuthentication”包。然后创建KeyVaultClient 并获取如下秘密:

        var azureServiceTokenProvider = new AzureServiceTokenProvider();        
        KeyVaultClient kvc = new KeyVaultClient(azureServiceTokenProvider.KeyVaultTokenCallback);
        SecretBundle secret = kvc.GetSecretAsync(baseUrl, "testSecret").Result;
        Console.WriteLine(secret.Value);
    

    总结

    使用 Azure 托管标识,您可以为其添加角色分配或访问策略。然后,具有托管标识的 Azure 资源(VM 或 Web 应用)将被视为受信任的资源,并且无需任何额外配置即可从特定端点获取令牌。

    【讨论】:

      【解决方案2】:

      从架构上讲,azure key vault 提供了一种简单的方法来存储应用程序的配置设置。正如您可能在示例文档中看到的那样,为了访问密钥库,我们将客户端 ID 和客户端密码存储在 web.config 中,这与安全设计不符:

      这是你可以做的事情:

      • 您需要的所有设置都需要在 blob/任何类型的存储中采用加密格式,并且只有您的应用程序才能在应用程序启动时从 blob 或任何类型的存储中获取配置。 应用程序正确启动后,最后一步应该是解密设置并以安全的方式存储在客户端。

      这样就不需要暴露你应用的客户端ID和密码了。

      此外,我们在 Azure AD 中创建一个服务主体帐户,并提供从 Key Vault 读取数据的访问权限。稍后我们在调用 Azure AD 身份验证 API 后存储不记名令牌,并使用此令牌访问密钥保管库。

      • 另一种方法是@JackJia 所指出的**Managed identity**,托管身份将被视为可信资源,无需任何额外配置即可从特定端点获取令牌。您可以阅读以上答案了解详情。

      如果您想进一步讨论,请告诉我,我们很乐意为您提供帮助。

      【讨论】:

        猜你喜欢
        • 2018-06-06
        • 2020-09-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-18
        • 2020-02-07
        • 1970-01-01
        相关资源
        最近更新 更多