Distribuera ett program med hanterad identitet till ett Service Fabric-hanterat kluster
För att distribuera ett Service Fabric-program med hanterad identitet måste programmet distribueras via Azure Resource Manager, vanligtvis med en Azure Resource Manager-mall. Mer information om hur du distribuerar Service Fabric-program via Azure Resource Manager finns i Distribuera ett program till ett hanterat kluster med Azure Resource Manager.
Kommentar
Program som inte distribueras som en Azure-resurs kan inte ha hanterade identiteter.
Distribution av Service Fabric-program med hanterad identitet stöds med API-version "2021-05-01"
på hanterade kluster.
Exempel på hanterade klustermallar finns här: Service Fabric-hanterade klustermallar
Stöd för hanterad identitet i Service Fabric-hanterat kluster
När ett Service Fabric-program har konfigurerats med hanterade identiteter för Azure-resurser och distribuerats till klustret utlöser det automatisk konfiguration av tjänsten hanterad identitetstoken i det Hanterade Service Fabric-klustret. Den här tjänsten ansvarar för autentisering av Service Fabric-program med hjälp av deras hanterade identiteter och för att få åtkomsttoken för deras räkning. När tjänsten är aktiverad kan du se den i Service Fabric Explorer under avsnittet System i den vänstra rutan, som körs under namnet fabric:/System/ManagedIdentityTokenService.
Kommentar
Första gången ett program distribueras med hanterade identiteter bör du förvänta dig att se en en gång längre distribution på grund av den automatiska klusterkonfigurationsändringen. Du bör förvänta dig att det tar från 15 minuter för ett zonindelade kluster till 45 minuter för ett zonspanningskluster. Om det finns andra distributioner under flygning måste konfigurationen av hanterad identitet vänta tills de slutförs först.
Programresursen har stöd för tilldelning av både SystemAssigned eller UserAssigned och tilldelningen kan göras enligt beskrivningen nedan.
{
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"apiVersion": "2021-05-01",
"identity": {
"type": "SystemAssigned",
"userAssignedIdentities": {}
},
}
Användartilldelad identitet
Om du vill aktivera programmet med användartilldelad identitet lägger du först till identitetsegenskapen i programresursen med typen userAssigned och de användartilldelade identiteterna. Lägg sedan till ett managedIdentities-avsnitt i egenskapsavsnittet för programresursen som innehåller en lista med eget namn till principalId-mappning för var och en av de användartilldelade identiteterna. Mer information om användartilldelade identiteter finns i Skapa, lista eller ta bort en användartilldelad hanterad identitet.
Programmall
Om du vill aktivera programmet med användartilldelad identitet lägger du först till identitetsegenskapen till programresursen med typen userAssigned och de användartilldelade identiteterna och lägger sedan till ett managedIdentities-objekt i egenskapsavsnittet som innehåller en lista med eget namn till principalId-mappning för var och en av de användartilldelade identiteterna.
{
"apiVersion": "2021-05-01",
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[parameters('applicationVersion')]",
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]"
],
"identity": {
"type" : "userAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName'))]": {}
}
},
"properties": {
"version": "[parameters('applicationVersion')]",
"parameters": {
},
"managedIdentities": [
{
"name" : "[parameters('userAssignedIdentityName')]",
"principalId" : "[reference(resourceId('Microsoft.ManagedIdentity/userAssignedIdentities/', parameters('userAssignedIdentityName')), '2018-11-30').principalId]"
}
]
}
}
I exemplet ovan används resursnamnet för den användartilldelade identiteten som eget namn på den hanterade identiteten för programmet. I följande exempel förutsätts att det faktiska egna namnet är "AdminUser".
Programpaket
För varje identitet som definieras i
managedIdentities
avsnittet i Azure Resource Manager-mallen lägger du till en<ManagedIdentity>
tagg i programmanifestet under avsnittet Huvudnamn . AttributetName
måste matcha egenskapenname
som definierats imanagedIdentities
avsnittet.ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="AdminUser" /> </ManagedIdentities> </Principals>
I avsnittet ServiceManifestImport lägger du till en IdentityBindingPolicy för tjänsten som använder den hanterade identiteten. Den här principen mappar identiteten
AdminUser
till ett tjänstspecifikt identitetsnamn som måste läggas till i tjänstmanifestet senare.ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" /> </Policies> </ServiceManifestImport>
Uppdatera tjänstmanifestet för att lägga till en ManagedIdentity i avsnittet Resurser med namnet som matchar
ServiceIdentityRef
iIdentityBindingPolicy
programmanifestet:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Systemtilldelad hanterad identitet
Programmall
Om du vill aktivera ett program med en systemtilldelad hanterad identitet lägger du till identitetsegenskapen i programresursen, med typen systemTilldelad enligt exemplet nedan:
{
"apiVersion": "2021-05-01",
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"name": "[concat(parameters('clusterName'), '/', parameters('applicationName'))]",
"location": "[resourceGroup().location]",
"dependsOn": [
"[concat('Microsoft.ServiceFabric/clusters/', parameters('clusterName'), '/applicationTypes/', parameters('applicationTypeName'), '/versions/', parameters('applicationTypeVersion'))]"
],
"identity": {
"type" : "systemAssigned"
},
"properties": {
"typeName": "[parameters('applicationTypeName')]",
"typeVersion": "[parameters('applicationTypeVersion')]",
"parameters": {
}
}
}
Den här egenskapen deklarerar (till Azure Resource Manager och resursprovidrar för hanterad identitet respektive Service Fabric-resursproviders att den här resursen ska ha en implicit (system assigned
) hanterad identitet.
Program- och tjänstpaket
Uppdatera programmanifestet för att lägga till ett ManagedIdentity-element i avsnittet Principals som innehåller en enda post enligt nedan:
ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="SystemAssigned" /> </ManagedIdentities> </Principals>
Detta mappar den identitet som tilldelats programmet som en resurs till ett eget namn, för ytterligare tilldelning till de tjänster som ingår i programmet.
I avsnittet ServiceManifestImport som motsvarar tjänsten som tilldelas den hanterade identiteten lägger du till ett IdentityBindingPolicy-element enligt nedan:
ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" /> </Policies> </ServiceManifestImport>
Det här elementet tilldelar programmets identitet till tjänsten. utan den här tilldelningen kommer tjänsten inte att kunna komma åt programmets identitet. I kodfragmentet ovan mappas identiteten
SystemAssigned
(som är ett reserverat nyckelord) till tjänstens definition under det egna namnetWebAdmin
.Uppdatera tjänstmanifestet för att lägga till ett ManagedIdentity-element i avsnittet Resurser med namnet som matchar värdet
ServiceIdentityRef
för inställningen frånIdentityBindingPolicy
definitionen i programmanifestet:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Det här är motsvarande mappning av en identitet till en tjänst enligt beskrivningen ovan, men ur tjänstdefinitionens perspektiv. Identiteten refereras här med sitt eget namn (
WebAdmin
), enligt beskrivningen i programmanifestet.