Обновление даты истечения срока действия Azure KeyVault

Можно ли обновить дату истечения срока действия секрета без создания новой версии секрета в KeyVault с помощью пакета Microsoft.Azure.KeyVault? Я могу сделать это на портале Azure, но мне нужно сделать это программно.


person CraigM    schedule 19.12.2018    source источник


Ответы (1)


Да, можно обновить дату истечения срока действия существующего секрета без создания новой версии.

Вот быстрый и грязный пример кода C #. Посмотрите внимательно на вызываемые методы SecretAttributes и client.UpdateSecretAsync.

Expires - это атрибут секрета, который необходимо установить.

Я использую Метод KeyVaultClientExtensions.UpdateSecretAsync

using Microsoft.Azure.KeyVault;
using Microsoft.Azure.KeyVault.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;

namespace UpdateKeyVaultSecret
{
    class Program
    {
        static void Main(string[] args)
        {
            UpdateSecretAttributes("https://rohitvault1.vault.azure.net/secrets/mysecret1").GetAwaiter().GetResult();

            Console.ReadLine();
        }


        private static async Task<string> GetAccessTokenAsync(string authority, string resource, string scope)
        {
            var authContext = new AuthenticationContext(authority);
            ClientCredential clientCred = new ClientCredential("<my-app-clientid>", "<my-app-client-secret>");
            AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);

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

            return result.AccessToken;
        }

        public static async Task<string> GetSecretFromVault(string secretKeyIdentifier)
        {
            var client = new KeyVaultClient(
                new KeyVaultClient.AuthenticationCallback(GetAccessTokenAsync),
                new System.Net.Http.HttpClient());

            var secret = await client.GetSecretAsync(secretKeyIdentifier).ConfigureAwait(false);

            return secret.Value;
        }

        public static async Task<string> UpdateSecretAttributes(string secretKeyIdentifier)
        {
            var client = new KeyVaultClient(
                new KeyVaultClient.AuthenticationCallback(GetAccessTokenAsync),
                new System.Net.Http.HttpClient());

            SecretAttributes attributes = new SecretAttributes();
        attributes.Expires = DateTime.UtcNow.AddDays(15);

            var secret = await client.UpdateSecretAsync(secretKeyIdentifier, null, attributes, null).ConfigureAwait(false);

            return secret.Value;
        }
    }
}

Кстати, есть и другие программные варианты. Я просто кратко об этом упомянул, поскольку вопрос довольно общий, и кто-то может попасть сюда и искать другие способы, кроме C #:

person Rohit Saigal    schedule 19.12.2018
comment
Оказывается, поскольку я уже использовал метод UpdateSecretAsync, он обновлялся, просто портал Azure не обновлял значения, хотя я нажимал предоставленную кнопку обновления - в конечном итоге перезагрузка страницы показала, что значение было обновлено - person CraigM; 20.12.2018
comment
@CraigM, что имеет смысл. Я видел, как это происходило и на стороне портала. - person Rohit Saigal; 20.12.2018