Получение / переустановка мастер-ключей Azure Cosmos DB программно - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь получить и сбросить мастер-ключи для учетной записи Azure Cosmos DB из кода, в частности из кода C # в приложении-функции Azure, системному назначенному управляемому идентификатору которого назначена роль RBAC, определенная в учетной записи Cosmos DB. API клиента Cosmos DB, по-видимому, не имеет этой функции.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Это можно сделать с помощью API Azure Management Fluent. Вам необходимо включить этот пакет nuget " Microsoft.Azure.Management.Fluent ". Вот ссылка

Ниже приведен пример кода для того же.

    var credentials = SdkContext.AzureCredentialsFactory
                            .FromServicePrincipal(clientId,
                            clientSecret,
                            tenantId,
                            AzureEnvironment.AzureGlobalCloud);

    IAzure azure = Azure.Authenticate(credentials).WithSubscription("<<Your subscription Id>>");
    var cosmosaccount = azure.CosmosDBAccounts.GetByResourceGroup("<<Your cosmos account resource group name>>", "<<Your cosmos account name>>");

    Console.WriteLine(cosmosaccount.ListKeys().SecondaryMasterKey);
    cosmosaccount.RegenerateKey("secondary");
    Console.WriteLine(cosmosaccount.ListKeys().SecondaryMasterKey); 
0 голосов
/ 06 октября 2019

Вот пример того, как сгенерировать master key из репозитория github.

private static string GenerateMasterKeyAuthorizationSignature(string verb, string resourceId, string resourceType, string key, string keyType, string tokenVersion)
{
    var hmacSha256 = new System.Security.Cryptography.HMACSHA256 { Key = Convert.FromBase64String(key) };

    string payLoad = string.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}\n{1}\n{2}\n{3}\n{4}\n",
            verb.ToLowerInvariant(),
            resourceType.ToLowerInvariant(),
            resourceId,
            utc_date.ToLowerInvariant(),
            ""
    );

    byte[] hashPayLoad = hmacSha256.ComputeHash(System.Text.Encoding.UTF8.GetBytes(payLoad));
    string signature = Convert.ToBase64String(hashPayLoad);

    return System.Web.HttpUtility.UrlEncode(String.Format(System.Globalization.CultureInfo.InvariantCulture, "type={0}&ver={1}&sig={2}",
        keyType,
        tokenVersion,
        signature));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...