Используя ASP.NET Core 2.2, я пытаюсь настроить защиту данных таким образом, чтобы хранить связку ключей в хранилище BLOB-объектов Azure и защищать связку ключей с помощью ключа, хранящегося в KeyVault.
В моем методе ConfigureServices() у меня есть:
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.PersistKeysToAzureBlobStorage(new Uri("myblob-sasuri"))
.ProtectKeysWithAzureKeyVault(keyVaultClient, "key-identifier-uri");
}
Все выглядит хорошо, но меня смущают запрещенные ошибки при доступе к хранилищу ключей. Я не могу понять, то ли я как-то напортачил идентификатор ключа (сомнительно), то ли keyVaultClient, то ли разрешения.
Я подозреваю разрешения, но нигде документы не говорят мне, какие разрешения нужны клиенту.
Кто-нибудь сделал эту работу успешно?
Путем экспериментов я узнал, что политика доступа KeyVault должна иметь разрешение «Развернуть ключ» в разделе «Криптографические операции» разрешений ключа. Таким образом, субъекту-службе, которому вы предоставляете доступ к KeyVault, должно быть предоставлено одно конкретное разрешение в ваших политиках доступа. Мы столкнулись с проблемами, потому что мы не включили это, у нас были включены только разрешения на шифрование и дешифрование. Это должно быть задокументировано, я добавил отзыв в документ здесь: https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/configuration/overview?view=aspnetcore-2.2