Обновление даты истечения срока действия Azure KeyVault - PullRequest
0 голосов
/ 19 декабря 2018

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

1 Ответ

0 голосов
/ 19 декабря 2018

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

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

Expires является атрибутом секрета, который вам нужно установить.

Я использую KeyVaultClientExtensions.UpdateSecretAsync Method

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 #:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...