Clusteru Azure Data Explorer můžete udělit dva typy identit:
Identita přiřazená systémem: Je svázaná s vaším clusterem a odstraněná, pokud se prostředek odstraní. Cluster může mít jenom jednu identitu přiřazenou systémem.
Identita přiřazená uživatelem: Samostatný prostředek Azure, který je možné přiřadit ke clusteru. Cluster může mít více identit přiřazených uživatelem.
V tomto článku se dozvíte, jak přidat a odebrat spravované identity přiřazené systémem a uživatelem pro clustery Azure Data Explorer.
Poznámka
Pokud se váš cluster Azure Data Explorer migruje mezi předplatnými nebo tenanty, spravované identity pro Azure Data Explorer se nebudou chovat podle očekávání. Aplikace bude muset získat novou identitu, což lze provést zakázáním a opětovným povolením funkce. Aby se nová identita používala, bude také potřeba aktualizovat zásady přístupu k podřízeným prostředkům.
Přidání identity přiřazené systémem
Přiřaďte identitu přiřazenou systémem, která je svázaná s vaším clusterem a pokud se cluster odstraní, odstraní se. Cluster může mít jenom jednu identitu přiřazenou systémem. Vytvoření clusteru s identitou přiřazenou systémem vyžaduje, aby v clusteru byla nastavena další vlastnost. Přidejte identitu přiřazenou systémem pomocí šablony Azure Portal, C# nebo Resource Manager, jak je podrobně popsáno níže.
Vytvořte Azure AD aplikaci a instanční objekt, který má přístup k prostředkům. Přiřazení role přidáte v oboru předplatného a získáte požadované Directory (tenant) ID, Application IDa Client Secret.
Vytvoření nebo aktualizace clusteru
Vytvořte nebo aktualizujte cluster pomocí Identity vlastnosti:
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var authClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithClientSecret(clientSecret)
.Build();
var result = authClient.AcquireTokenForClient(new[] { "https://management.core.windows.net/" }).ExecuteAsync().Result;
var credentials = new TokenCredentials(result.AccessToken, result.TokenType);
var kustoManagementClient = new KustoManagementClient(credentials) { SubscriptionId = subscriptionId };
var resourceGroupName = "testrg";
var clusterName = "mykustocluster";
var clusterData = new Cluster(
location: "Central US",
sku: new AzureSku("Standard_E8ads_v5", "Standard", 5),
identity: new Identity(IdentityType.SystemAssigned)
);
await kustoManagementClient.Clusters.CreateOrUpdateAsync(resourceGroupName, clusterName, clusterData);
Spuštěním následujícího příkazu zkontrolujte, jestli se cluster úspěšně vytvořil nebo aktualizoval pomocí identity:
Pokud výsledek obsahuje ProvisioningState s Succeeded hodnotou, cluster se vytvořil nebo aktualizoval a měl by mít následující vlastnosti:
var principalGuid = clusterData.Identity.PrincipalId;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId a TenantId jsou nahrazeny identifikátory GUID. Vlastnost TenantId identifikuje Azure AD tenanta, do kterého identita patří. Jedná se PrincipalId o jedinečný identifikátor nové identity clusteru. V Azure AD má instanční objekt stejný název, jaký jste zadali vaší instanci App Service nebo Azure Functions.
Přidání identity přiřazené systémem pomocí šablony Azure Resource Manager
Přidání typu přiřazeného systémem říká Azure, že má vytvořit a spravovat identitu pro váš cluster. Jakýkoli prostředek typu Microsoft.Kusto/clusters je možné vytvořit s identitou tak, že do definice prostředku zahrnete následující vlastnost:
<TENANTID> a <PRINCIPALID> jsou nahrazeny identifikátory GUID. Vlastnost TenantId identifikuje Azure AD tenanta, do kterého identita patří. Jedná se PrincipalId o jedinečný identifikátor nové identity clusteru. V Azure AD má instanční objekt stejný název, jaký jste zadali vaší instanci App Service nebo Azure Functions.
Odebrání identity přiřazené systémem
Odebráním identity přiřazené systémem se odstraní také z Azure AD. Při odstranění prostředku clusteru se z Azure AD automaticky odeberou také identity přiřazené systémem. Identitu přiřazenou systémem je možné odebrat zakázáním funkce. Odeberte identitu přiřazenou systémem pomocí šablony Azure Portal, C# nebo Resource Manager, jak je podrobně popsáno níže.
V levém podokně portálu vyberte Identita nastavení>.
V podokně >Identita na kartě Přiřazený systém:
Posuňte posuvník Stav do polohy Vypnuto.
Vyberte Uložit.
V automaticky otevíraných otevíraných Podokno Identita se vrátí do stejné podmínky jako před přidáním identity přiřazené systémem.
Odebrání identity přiřazené systémem pomocí jazyka C #
Spuštěním následujícího příkazu odeberte identitu přiřazenou systémem:
var clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
Odebrání identity přiřazené systémem pomocí šablony Azure Resource Manager
Spuštěním následujícího příkazu odeberte identitu přiřazenou systémem:
{
"identity": {
"type": "None"
}
}
Poznámka
Pokud měl cluster současně identity přiřazené systémem i uživatelem, po odebrání type identity přiřazené systémem bude vlastnost UserAssigned
Přidání identity přiřazené uživatelem
Přiřaďte ke clusteru spravovanou identitu přiřazenou uživatelem. Cluster může mít více než jednu identitu přiřazenou uživatelem. Vytvoření clusteru s identitou přiřazenou uživatelem vyžaduje nastavení další vlastnosti v clusteru. Přidejte identitu přiřazenou uživatelem pomocí šablony Azure Portal, C# nebo Resource Manager, jak je podrobně popsáno níže.
Vytvořte aplikaci Azure AD a instanční objekt, který má přístup k prostředkům. Přiřazení role přidáte v oboru předplatného a získáte požadované Directory (tenant) ID, Application IDa Client Secret.
Vytvoření nebo aktualizace clusteru
Vytvořte nebo aktualizujte cluster pomocí Identity vlastnosti :
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var authClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithClientSecret(clientSecret)
.Build();
var result = authClient.AcquireTokenForClient(new[] { "https://management.core.windows.net/" }).ExecuteAsync().Result;
var credentials = new TokenCredentials(result.AccessToken, result.TokenType);
var kustoManagementClient = new KustoManagementClient(credentials) { SubscriptionId = subscriptionId };
var resourceGroupName = "testrg";
var clusterName = "mykustocluster";
var userIdentityResourceId = $"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>";
var clusterData = new Cluster(
location: "Central US",
sku: new AzureSku("Standard_E8ads_v5", "Standard", 5),
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, new IdentityUserAssignedIdentitiesValue() }
}
)
);
await kustoManagementClient.Clusters.CreateOrUpdateAsync(resourceGroupName, clusterName, clusterData);
Spuštěním následujícího příkazu zkontrolujte, jestli se cluster úspěšně vytvořil nebo aktualizoval pomocí identity:
Pokud výsledek obsahuje ProvisioningState s Succeeded hodnotou , cluster se vytvořil nebo aktualizoval a měl by mít následující vlastnosti:
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId;
var clientGuid = userIdentity.ClientId;
Je PrincipalId jedinečný identifikátor identity, který se používá pro správu Azure AD. Je ClientId jedinečný identifikátor nové identity aplikace, který se používá k určení identity, která se má použít během volání za běhu.
Přidání identity přiřazené uživatelem pomocí šablony Azure Resource Manager
Libovolný prostředek typu Microsoft.Kusto/clusters je možné vytvořit s identitou přiřazenou uživatelem tak, že do definice prostředku zahrnete následující vlastnost a nahradíte <RESOURCEID> ID prostředku požadované identity:
Je PrincipalId jedinečný identifikátor identity, který se používá pro správu Azure AD. Je ClientId jedinečný identifikátor nové identity aplikace, který se používá k určení identity, která se má použít během volání za běhu.
Poznámka
Cluster může mít současně identity přiřazené systémem i uživatelem. V tomto případě type by vlastnost byla SystemAssigned,UserAssigned.
Odebrání spravované identity přiřazené uživatelem z clusteru
Odeberte identitu přiřazenou uživatelem pomocí šablony Azure Portal, C# nebo Resource Manager, jak je podrobně popsáno níže.
V levém podokně portálu vyberte Identita nastavení>.
Vyberte kartu Přiřazené uživatelem .
Vyhledejte identitu, kterou jste vytvořili dříve, a vyberte ji. Vyberte Odebrat.
V automaticky otevíraných otevíraných oknech vyberte Ano a odeberte identitu přiřazenou uživatelem. Podokno Identita se vrátí do stejné podmínky jako před přidáním identity přiřazené uživatelem.
Odebrání identity přiřazené uživatelem pomocí jazyka C #
Spuštěním následujícího příkazu odeberte identitu přiřazenou uživatelem:
var clusterUpdate = new ClusterUpdate(
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, null }
}
)
);
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterUpdate);
Odebrání identity přiřazené uživatelem pomocí šablony Azure Resource Manager
Spuštěním následujícího příkazu odeberte identitu přiřazenou uživatelem:
Pokud chcete odebrat identity, nastavte jejich hodnoty na null. Na všechny ostatní existující identity to nebude mít vliv.
Pokud chcete odebrat všechny identity přiřazené uživatelem, type vlastnost by byla None,
Pokud by měl cluster současně identity přiřazené systémem i uživatelem, type vlastnost by byla SystemAssigned,UserAssigned s identitami, které se mají odebrat, nebo SystemAssigned odebrat všechny identity přiřazené uživatelem.