使用系统分配的托管标识部署 Service Fabric 应用程序

注意

不支持为最初使用 Azure cmdlet 部署的现有应用启用标识。

若要访问 Azure Service Fabric 应用程序的托管标识功能,必须先在群集上启用托管标识令牌服务。 此服务负责使用 Service Fabric 应用程序的托管标识对这些应用程序进行身份验证,以及代表它们获取访问令牌。 启用此服务以后,即可在 Service Fabric Explorer 中左侧窗格的“系统”部分看到它,它在其他系统服务旁边以 fabric:/System/ManagedIdentityTokenService 名称运行。

注意

从 API 版本 "2019-06-01-preview" 开始,我们就支持使用托管标识部署 Service Fabric 应用程序。 另外,不管应用程序类型、应用程序类型版本和服务资源如何,你都可以使用同一 API 版本。 支持的最低 Service Fabric 运行时为 6.5 CU2。 此外,生成/包环境还应具有 Service Fabric、.NET SDK CU2 或更高版本

系统分配的托管标识

应用程序模板

若要为应用程序启用系统分配的托管标识,请将类型为 systemAssignedidentity 属性添加到应用程序资源,如以下示例所示:

    {
      "apiVersion": "2019-06-01-preview",
      "type": "Microsoft.ServiceFabric/clusters/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": {
        }
      }
    }

此属性向 Azure 资源管理器、托管标识和 Service Fabric 资源提供程序分别声明:此资源应该有一个隐式 (system assigned) 托管标识。

应用程序和服务包

  1. 更新应用程序清单,在 Principals 节添加包含单个条目的 ManagedIdentity 元素,如下所示:

    ApplicationManifest.xml

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

    这会将分配给应用程序作为资源的标识映射到某个易记名称,以便进一步分配给包含该应用程序的服务。

  2. ServiceManifestImport 节(对应于已向其分配了托管标识的服务)中添加 IdentityBindingPolicy 元素,如下所示:

    ApplicationManifest.xml

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

    此元素将应用程序的标识分配给服务;没有此分配,服务将无法访问应用程序的标识。 在上面的代码片段中,SystemAssigned 标识(保留关键字)映射到服务的定义,采用的易记名称为 WebAdmin

  3. 更新服务清单,将 ManagedIdentity 元素添加到 Resources 节中,其名称与 ServiceIdentityRef 设置的值匹配,该设置来自应用程序清单中的 IdentityBindingPolicy 定义:

    ServiceManifest.xml

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

    这是一个等效映射,等效于将标识映射到服务(如上所述),但却是从服务定义的角度来看。 在这里,标识按其易记名称 (WebAdmin) 引用,如应用程序清单所述。

后续步骤