Можно ли обновить дату истечения срока действия секрета без создания новой версии секрета в KeyVault с помощью пакета Microsoft.Azure.KeyVault? Я могу сделать это на портале Azure, но мне нужно сделать это программно.
Обновление даты истечения срока действия Azure KeyVault
Ответы (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 #:
REST API
Azure CLI
секретный набор атрибутов az keyvault
Пример:
az keyvault secret set-attributes --vault-name 'rsvault1' --name 'secret123' --expires '2018-12-25T01:23:45Z'
person
Rohit Saigal
schedule
19.12.2018
Оказывается, поскольку я уже использовал метод UpdateSecretAsync, он обновлялся, просто портал Azure не обновлял значения, хотя я нажимал предоставленную кнопку обновления - в конечном итоге перезагрузка страницы показала, что значение было обновлено
- person CraigM; 20.12.2018
@CraigM, что имеет смысл. Я видел, как это происходило и на стороне портала.
- person Rohit Saigal; 20.12.2018