可访问多个密钥保管库的Azure Web应用程序

时间:2018-06-15 05:59:04

标签: azure-keyvault always-encrypted

我想知道Azure网络应用程序是否可以访问多个密钥保管库?这是因为我们的某个Web应用程序具有多个数据库连接字符串,并且每个数据库都具有始终加密的加密列,并且列加密密钥将存储在每个数据库的各自的密钥保管库中。如果可以,那么Web应用程序如何知道要访问哪个密钥保管库以获取它所连接的相应数据库的列加密密钥?

目前,Web应用程序可以访问一个密钥保管库,并且所有数据库都使用此密钥保管库中的相同列加密密钥进行加密。但我希望将其拆分出来,以便每个数据库都拥有自己的密钥保险库和相应的列加密密钥,以提高安全性。 Web应用程序通过Azure Active Directory以客户端ID和机密机制获取对密钥保管库的访问权限。我已经使用密钥保管库访问策略将Azure Active Directory应用程序添加到多个密钥保管库,但不确定这是否正确/将起作用。

用于将列加密密钥与Web应用程序(似乎与密钥库不相关)连接起来的代码:

    public static void InitializeAzureKeyVaultProvider()
    {
        var clientId = ConfigurationManager.AppSettings["AuthClientId"];
        var clientSecret = ConfigurationManager.AppSettings["AuthClientSecret"];
        _clientCredential = new ClientCredential(clientId, clientSecret);

        SqlColumnEncryptionAzureKeyVaultProvider azureKeyVaultProvider =
            new SqlColumnEncryptionAzureKeyVaultProvider(GetToken);

        Dictionary<string, SqlColumnEncryptionKeyStoreProvider> providers =
            new Dictionary<string, SqlColumnEncryptionKeyStoreProvider>
            {
                {SqlColumnEncryptionAzureKeyVaultProvider.ProviderName, azureKeyVaultProvider}
            };

        SqlConnection.RegisterColumnEncryptionKeyStoreProviders(providers);
    }

    private static async Task<string> GetToken(string authority, string resource, string scope)
    {
        var authContext = new AuthenticationContext(authority);
        var result = await authContext.AcquireTokenAsync(resource, _clientCredential);

        if (result == null)
        {
            throw new InvalidOperationException("Failed to obtain the access token");
        }

        return result.AccessToken;
    }

思想?

0 个答案:

没有答案