Wdrażanie aplikacji z tożsamością zarządzaną w klastrze zarządzanym usługi Service Fabric

Aby wdrożyć aplikację usługi Service Fabric z tożsamością zarządzaną, aplikacja musi zostać wdrożona za pośrednictwem usługi Azure Resource Manager, zazwyczaj przy użyciu szablonu usługi Azure Resource Manager. Aby uzyskać więcej informacji na temat wdrażania aplikacji usługi Service Fabric za pomocą usługi Azure Resource Manager, zobacz Wdrażanie aplikacji w klastrze zarządzanym przy użyciu usługi Azure Resource Manager.

Uwaga

Aplikacje, które nie są wdrażane jako zasób platformy Azure, nie mogą mieć tożsamości zarządzanych.

Wdrażanie aplikacji usługi Service Fabric z tożsamością zarządzaną jest obsługiwane w przypadku wersji "2021-05-01" interfejsu API w klastrach zarządzanych.

Przykładowe szablony klastrów zarządzanych są dostępne tutaj: Szablony klastrów zarządzanych usługi Service Fabric

Obsługa tożsamości zarządzanej w klastrze zarządzanym usługi Service Fabric

Gdy aplikacja usługi Service Fabric jest skonfigurowana z tożsamościami zarządzanymi dla zasobów platformy Azure i wdrożona w klastrze, wyzwoli automatyczną konfigurację usługi tokenu tożsamości zarządzanej w klastrze zarządzanym usługi Service Fabric. Ta usługa jest odpowiedzialna za uwierzytelnianie aplikacji usługi Service Fabric przy użyciu tożsamości zarządzanych oraz uzyskiwanie tokenów dostępu w ich imieniu. Po włączeniu usługi można ją zobaczyć w narzędziu Service Fabric Explorer w sekcji System w okienku po lewej stronie, działającą pod nazwą fabric:/System/ManagedIdentityTokenService.

Uwaga

Przy pierwszym wdrożeniu aplikacji z tożsamościami zarządzanymi należy oczekiwać jednorazowego wdrożenia ze względu na zmianę konfiguracji klastra automatycznego. Powinno to potrwać od 15 minut dla klastra strefowego do 45 minut dla klastra obejmującego strefy. Jeśli w locie istnieją jakiekolwiek inne wdrożenia, konfiguracja tożsamości zarządzanej będzie musiała poczekać na ukończenie tych operacji.

Zasób aplikacji obsługuje przypisywanie atrybutów SystemAssigned lub UserAssigned i można wykonać przypisanie, jak pokazano w poniższym fragmencie kodu.

{
  "type": "Microsoft.ServiceFabric/managedclusters/applications",
  "apiVersion": "2021-05-01",
  "identity": {
    "type": "SystemAssigned",
    "userAssignedIdentities": {}
  },
}

Kompletna dokumentacja JSON

Tożsamość przypisana przez użytkownika

Aby włączyć aplikację z tożsamością przypisaną przez użytkownika, najpierw dodaj właściwość tożsamości do zasobu aplikacji z typem userAssigned i przywoływane tożsamości przypisane przez użytkownika. Następnie dodaj sekcję ManagedIdentities wewnątrz sekcji właściwości zasobu aplikacji , która zawiera listę przyjaznych nazw do mapowania principalId dla każdej tożsamości przypisanej przez użytkownika. Aby uzyskać więcej informacji na temat tożsamości przypisanych przez użytkownika, zobacz Tworzenie, wyświetlanie listy lub usuwanie tożsamości zarządzanej przypisanej przez użytkownika.

Szablon aplikacji

Aby włączyć aplikację z tożsamością przypisaną przez użytkownika, najpierw dodaj właściwość tożsamości do zasobu aplikacji z typem userAssigned i przywoływane tożsamości przypisane przez użytkownika, a następnie dodaj obiekt managedIdentities wewnątrz sekcji właściwości , która zawiera listę przyjaznych nazw do mapowania principalId dla każdej tożsamości przypisanej przez użytkownika.

{
  "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]"
      }
    ]
  }
}

W powyższym przykładzie nazwa zasobu tożsamości przypisanej przez użytkownika jest używana jako przyjazna nazwa tożsamości zarządzanej dla aplikacji. W poniższych przykładach założono, że rzeczywista przyjazna nazwa to "Administracja User".

Pakiet aplikacji

  1. Dla każdej tożsamości zdefiniowanej managedIdentities w sekcji w szablonie usługi Azure Resource Manager dodaj <ManagedIdentity> tag w manifeście aplikacji w sekcji Podmioty zabezpieczeń . Atrybut Name musi być zgodny z właściwością zdefiniowaną namemanagedIdentities w sekcji .

    ApplicationManifest.xml

      <Principals>
        <ManagedIdentities>
          <ManagedIdentity Name="AdminUser" />
        </ManagedIdentities>
      </Principals>
    
  2. W sekcji ServiceManifestImport dodaj element IdentityBindingPolicy dla usługi korzystającej z tożsamości zarządzanej. Te zasady mapują AdminUser tożsamość na nazwę tożsamości specyficzną dla usługi, która musi zostać później dodana do manifestu usługi.

    ApplicationManifest.xml

      <ServiceManifestImport>
        <Policies>
          <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" />
        </Policies>
      </ServiceManifestImport>
    
  3. Zaktualizuj manifest usługi, aby dodać identyfikator ManagedIdentity wewnątrz sekcji Resources o nazwie pasującej do ServiceIdentityRefIdentityBindingPolicy nazwy w manifeście aplikacji:

    ServiceManifest.xml

      <Resources>
        ...
        <ManagedIdentities DefaultIdentity="WebAdmin">
          <ManagedIdentity Name="WebAdmin" />
        </ManagedIdentities>
      </Resources>
    

Tożsamość zarządzana przypisana przez system

Szablon aplikacji

Aby włączyć aplikację z tożsamością zarządzaną przypisaną przez system, dodaj właściwość tożsamości do zasobu aplikacji z typem systemAssigned , jak pokazano w poniższym przykładzie:

    {
      "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": {
        }
      }
    }

Ta właściwość deklaruje (do usługi Azure Resource Manager oraz dostawców zasobów tożsamości zarządzanej i usługi Service Fabric, odpowiednio, że ten zasób ma niejawną (system assigned) tożsamość zarządzaną.

Pakiet aplikacji i usługi

  1. Zaktualizuj manifest aplikacji, aby dodać element ManagedIdentity w sekcji Principals (Podmioty zabezpieczeń) zawierający pojedynczy wpis, jak pokazano poniżej:

    ApplicationManifest.xml

    <Principals>
      <ManagedIdentities>
        <ManagedIdentity Name="SystemAssigned" />
      </ManagedIdentities>
    </Principals>
    

    Spowoduje to mapowanie tożsamości przypisanej do aplikacji jako zasobu na przyjazną nazwę w celu dalszego przypisania do usług składających się z aplikacji.

  2. W sekcji ServiceManifestImport odpowiadającej usłudze przypisanej tożsamości zarządzanej dodaj element IdentityBindingPolicy, jak pokazano poniżej:

    ApplicationManifest.xml

      <ServiceManifestImport>
        <Policies>
          <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" />
        </Policies>
      </ServiceManifestImport>
    

    Ten element przypisuje tożsamość aplikacji do usługi; bez tego przypisania usługa nie będzie mogła uzyskać dostępu do tożsamości aplikacji. W powyższym SystemAssigned fragmencie kodu tożsamość (która jest zastrzeżonym słowem kluczowym) jest mapowana na definicję usługi pod przyjazną nazwą WebAdmin.

  3. Zaktualizuj manifest usługi, aby dodać element ManagedIdentity w sekcji Resources o nazwie zgodnej z wartością ServiceIdentityRef ustawienia z IdentityBindingPolicy definicji w manifeście aplikacji:

    ServiceManifest.xml

      <Resources>
        ...
        <ManagedIdentities DefaultIdentity="WebAdmin">
          <ManagedIdentity Name="WebAdmin" />
        </ManagedIdentities>
      </Resources>
    

    Jest to równoważne mapowanie tożsamości do usługi zgodnie z powyższym opisem, ale z perspektywy definicji usługi. Tożsamość jest tutaj przywołyowana przez przyjazną nazwę (WebAdmin), jak zadeklarowano w manifeście aplikacji.

Następne kroki