Развертывание приложения с помощью управляемого удостоверения в управляемом кластере Service Fabric
Чтобы развернуть приложение Service Fabric с управляемым удостоверением, необходимо использовать Azure Resource Manager. Обычно это делается с шаблоном Azure Resource Manager. Дополнительные сведения о развертывании приложения Service Fabric с помощью Azure Resource Manager см. в статье Развертывание приложения на управляемом кластере с помощью Azure Resource Manager.
Примечание.
Приложения, которые не развертываются как ресурс Azure, не могут иметь управляемых удостоверений.
Развертывание приложения Service Fabric с управляемым удостоверением поддерживается в API версии "2021-05-01"
в управляемых кластерах.
Примеры шаблонов управляемых кластеров доступны здесь: Шаблоны управляемых Service Fabric кластеров
Поддержка управляемого удостоверения в управляемом кластере Service Fabric
Если приложение Service Fabric настроено с управляемыми удостоверениями для ресурсов Azure и развернуто в кластере, будет активирована автоматическая настройка службы токенов управляемого удостоверения в управляемом кластере Service Fabric. Эта служба отвечает за проверку подлинности приложений Service Fabric с помощью их управляемых удостоверений, а также за получение токенов от их имени. Включенная служба отображается в Service Fabric Explorer в разделе Система в области слева под именем fabric:/System/ManagedIdentityTokenService.
Примечание.
При первом развертывании приложения с управляемыми удостоверениями один раз должно пройти более продолжительное развертывание в связи с автоматическим изменением конфигурации кластера. Это должно занять от 15 минут для зонального кластера до 45 минут для кластера, охватывающего несколько зон. Если в полете есть какие-либо другие развертывания, конфигурация управляемого удостоверения придется ждать, пока они будут завершены сначала.
Ресурс приложения поддерживает назначение как SystemAssigned, так и UserAssigned, и назначение можно выполнить так, как показано в следующем фрагменте кода.
{
"type": "Microsoft.ServiceFabric/managedclusters/applications",
"apiVersion": "2021-05-01",
"identity": {
"type": "SystemAssigned",
"userAssignedIdentities": {}
},
}
Удостоверение, назначаемое пользователем
Чтобы включить приложение с удостоверением, назначенным пользователем, сначала добавьте свойство identity в ресурс приложения с типом userAssigned и удостоверениями назначенные пользователем. Затем добавьте подраздел managedIdentities в раздел properties для ресурса application, который содержит список понятных имен для сопоставления principalId каждому назначенному пользователем удостоверению. Дополнительные сведения о назначенных пользователем удостоверениях см. в статье Создание, перечисление или удаление назначенного пользователем управляемого удостоверения.
Шаблон приложения
Чтобы включить приложение с пользовательским удостоверением, сначала добавьте свойство identity в ресурс приложения с типом userAssigned и нужные управляемые удостоверения пользователя. Затем добавьте объект managedIdentities в раздел properties со списком понятных имен для сопоставления principalId с каждым назначенным пользователем удостоверением.
{
"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]"
}
]
}
}
В приведенном выше примере имя ресурса назначенного пользователем удостоверения используется как понятное имя удостоверения для приложения. В следующих примерах предполагается, что используется понятное имя "AdminUser".
Пакет приложения
Для каждого удостоверения, определенного в разделе
managedIdentities
шаблона Azure Resource Manager, добавьте тег<ManagedIdentity>
в манифест приложения из раздела Principals. АтрибутName
должен соответствовать свойствуname
, определенному в разделеmanagedIdentities
.ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="AdminUser" /> </ManagedIdentities> </Principals>
В разделе ServiceManifestImport добавьте IdentityBindingPolicy для службы, использующей управляемое удостоверение. Эта политика сопоставляет удостоверение
AdminUser
с именем удостоверения для службы. Последнее имя необходимо добавить в манифест службы позже.ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="AdminUser" /> </Policies> </ServiceManifestImport>
Измените манифест службы, добавив ManagedIdentity в раздел Resources с именем соответствующим
ServiceIdentityRef
вIdentityBindingPolicy
манифеста приложения:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Управляемое удостоверение, назначаемое системой
Шаблон приложения
Для включения приложения с удостоверением, назначаемым системой, добавьте свойство удостоверение в ресурс приложения с типом systemAssigned, как показано в примере ниже:
{
"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": {
}
}
}
Это свойство объявляет (Azure Resource Manager и Поставщикам управляемых удостоверений и ресурсов Service Fabric, соответственно) о наличии у этого ресурса управляемого удостоверения, предоставленного (system assigned
).
Приложение и пакет службы
Обновите манифест приложения, чтобы добавить элемент ManagedIdentity в раздел Субъекты, содержащий одну запись, как показано ниже:
ApplicationManifest.xml
<Principals> <ManagedIdentities> <ManagedIdentity Name="SystemAssigned" /> </ManagedIdentities> </Principals>
Это сопоставит удостоверение, назначенное приложению, как ресурс с понятным именем для дальнейшего назначения службам, составляющим приложение.
В разделе ServiceManifestImport, соответствующем службе, которой назначается управляемое удостоверение, добавьте элемент IdentityBindingPolicy, как указано ниже:
ApplicationManifest.xml
<ServiceManifestImport> <Policies> <IdentityBindingPolicy ServiceIdentityRef="WebAdmin" ApplicationIdentityRef="SystemAssigned" /> </Policies> </ServiceManifestImport>
Этот элемент назначает удостоверение приложения службе; без такого назначения служба не сможет получить доступ к удостоверению приложения. В приведенном выше фрагменте
SystemAssigned
удостоверение (которое является зарезервированным ключевым словом) сопоставляется с определением службы с понятным именемWebAdmin
.Обновите манифест службы, чтобы элемент ManagedIdentity внутри раздела Ресурсы с именем, соответствующим значению параметра
ServiceIdentityRef
из определенияIdentityBindingPolicy
в манифесте приложения:ServiceManifest.xml
<Resources> ... <ManagedIdentities DefaultIdentity="WebAdmin"> <ManagedIdentity Name="WebAdmin" /> </ManagedIdentities> </Resources>
Это эквивалентное сопоставление службы, как описано выше, но с точки зрения определения службы. На удостоверение указывает здесь понятное имя (
WebAdmin
), как объявлено в манифесте приложения.