Azure Приложение-функция использует последнюю версию Key Vault Secret в настройках приложения - PullRequest
0 голосов
/ 21 июня 2020

У меня есть приложение-функция Linux, работающее по плану потребления, которое использует ссылку на хранилище ключей в настройках приложения для извлечения и использования секрета, хранящегося в хранилище ключей Azure.

Это отлично работает пока.

Однако мы должны менять этот секрет каждый день (т.е. создавать новую версию этого секрета в Key Vault и устанавливать дату активации для этого секрета) и хотели бы, чтобы приложение-функция автоматически получить и использовать новую версию, как только она будет активирована, без необходимости вручную изменять ссылку Kev Vault на новую версию секрета.

Возможно ли это в настоящее время и как этого можно достичь?

1 Ответ

2 голосов
/ 21 июня 2020

В настоящее время это невозможно.

https://docs.microsoft.com/en-us/azure/app-service/app-service-key-vault-references

В настоящее время требуются версии. При ротации секретов вам нужно будет обновить версию в конфигурации вашего приложения.

Перезапуск вашей функции никоим образом вам не поможет, поскольку ротация секрета означает, что вы также создаете новую версию секрет. Вероятно, поэтому он не поддерживается на данный момент. AppService не получает уведомления, когда доступна новая версия, и вы, вероятно, не хотите, чтобы ваш AppService перезапускался автоматически при обновлении секрета в KeyVault. код функции или обновите ссылку каким-либо другим способом. Я, вероятно, предпочел бы первый метод, поскольку он может работать без перезапуска AppService.

https://docs.microsoft.com/en-us/samples/azure-samples/app-service-msi-keyvault-dotnet/keyvault-msi-appservice-sample/


    AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();

    try
    {
        var keyVaultClient = new KeyVaultClient(
            new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));

        var secret = await keyVaultClient.GetSecretAsync("https://keyvaultname.vault.azure.net/secrets/secret")
            .ConfigureAwait(false);

        ViewBag.Secret = $"Secret: {secret.Value}";
        
    }
    //...
}
...