Yönetilen kimlikle Azure Yönetilen Uygulaması

Dekont

Azure Yönetilen Uygulamaları için yönetilen kimlik desteği şu anda önizleme aşamasındadır. Yönetilen kimliği kullanmak için lütfen 2018-09-01-preview API sürümünü kullanın.

Yönetilen bir uygulamayı yönetilen kimlik içerecek şekilde yapılandırmayı öğrenin. Yönetilen kimlik, müşterinin yönetilen uygulamaya mevcut kaynaklara erişim izni vermesi için kullanılabilir. Azure platformu kimliği yönetir ve gizli dizileri sağlamanızı veya döndürmenizi gerektirmez. Microsoft Entra Id'deki yönetilen kimlikler hakkında daha fazla bilgi için bkz . Azure kaynakları için yönetilen kimlikler.

Uygulamanız için iki tür kimlik verilebilir:

  • Sistem tarafından atanan yönetilen kimlik uygulamanıza bağlıdır ve uygulamanız silinirse silinir. Bir uygulama yalnızca bir sistem tarafından atanan yönetilen kimliğe sahip olabilir.
  • Kullanıcı tarafından atanan yönetilen kimlik, uygulamanıza atanabilen tek başına bir Azure kaynağıdır. Bir uygulamada kullanıcı tarafından atanan birden çok yönetilen kimlik olabilir.

Yönetilen kimliği kullanma

Yönetilen kimlik, yönetilen uygulamalar için birçok senaryoya olanak tanır. Çözülebilecek bazı yaygın senaryolar şunlardır:

  • Mevcut Azure kaynaklarına bağlı yönetilen bir uygulama dağıtma. Mevcut bir ağ arabirimine bağlı yönetilen uygulama içinde bir Azure sanal makinesi (VM) dağıtma örneği verilmiştir.
  • Yönetilen uygulama ve yayımcıya yönetilen kaynak grubu dışındaki Azure kaynaklarına erişim verme.
  • Azure'da Etkinlik Günlüğü ve diğer hizmetler için yönetilen uygulamaların operasyonel kimliğini sağlama.

Yönetilen kimlik ekleme

Yönetilen kimlikle yönetilen uygulama oluşturmak için Azure kaynağında başka bir özelliğin ayarlanması gerekir. Aşağıdaki örnekte örnek kimlik özelliği gösterilmektedir:

{
  "identity": {
    "type": "SystemAssigned, UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity": {}
    }
  }
}

ile identityyönetilen uygulama oluşturmanın iki yaygın yolu vardır: createUiDefinition.json ve Azure Resource Manager şablonları. Basit tek oluşturma senaryolarında, daha zengin bir deneyim sağladığından yönetilen kimliği etkinleştirmek için createUiDefinition kullanılmalıdır. Ancak, otomatik veya birden çok yönetilen uygulama dağıtımı gerektiren gelişmiş veya karmaşık sistemlerle ilgilenirken şablonlar kullanılabilir.

createUiDefinition kullanma

Yönetilen bir uygulama, createUiDefinition.json aracılığıyla yönetilen kimlikle yapılandırılabilir. Çıkışlar bölümünde anahtarmanagedIdentity, yönetilen uygulama şablonunun kimlik özelliğini geçersiz kılmak için kullanılabilir. Aşağıdaki örnek, yönetilen uygulamada sistem tarafından atanan yönetilen kimliği etkinleştirir. Tüketiciden giriş istemek için createUiDefinition öğeleri kullanılarak daha karmaşık kimlik nesneleri oluşturulabilir. Bu girişler, kullanıcı tarafından atanan yönetilen kimlikle yönetilen uygulamalar oluşturmak için kullanılabilir.

"outputs": {
  "managedIdentity": { "Type": "SystemAssigned" }
}

Yönetilen kimlik için createUiDefinition ne zaman kullanılır?

Yönetilen uygulamalarda yönetilen kimliği etkinleştirmek için createUiDefinition'ın ne zaman kullanılacağına ilişkin bazı öneriler aşağıdadır.

  • Yönetilen uygulama oluşturma işlemi Azure portalından veya Azure Market.
  • Yönetilen kimlik karmaşık tüketici girişi gerektirir.
  • Yönetilen kimlik, yönetilen uygulamanın oluşturulmasında gereklidir.

Yönetilen kimlik createUiDefinition denetimi

createUiDefinition.json yerleşik yönetilen kimlik denetimini destekler.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [],
    "steps": [
      {
        "name": "applicationSettings",
        "label": "Application Settings",
        "subLabel": {
          "preValidation": "Configure your application settings",
          "postValidation": "Done"
        },
        "bladeTitle": "Application Settings",
        "elements": [
          {
            "name": "appName",
            "type": "Microsoft.Common.TextBox",
            "label": "Managed application Name",
            "toolTip": "Managed application instance name",
            "visible": true
          },
          {
            "name": "appIdentity",
            "type": "Microsoft.ManagedIdentity.IdentitySelector",
            "label": "Managed Identity Configuration",
            "toolTip": {
              "systemAssignedIdentity": "Enable system assigned identity to grant the managed application access to additional existing resources.",
              "userAssignedIdentity": "Add user assigned identities to grant the managed application access to additional existing resources."
            },
            "defaultValue": {
              "systemAssignedIdentity": "Off"
            },
            "options": {
              "hideSystemAssignedIdentity": false,
              "hideUserAssignedIdentity": false,
              "readOnlySystemAssignedIdentity": false
            },
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "applicationResourceName": "[steps('applicationSettings').appName]",
      "location": "[location()]",
      "managedIdentity": "[steps('applicationSettings').appIdentity]"
    }
  }
}

Screenshot of the application settings for system-assigned managed identity and user-assigned managed identity

Azure Resource Manager şablonlarını kullanma

Dekont

Market tarafından yönetilen uygulama şablonları, Azure portalı oluşturma deneyiminden geçen müşteriler için otomatik olarak oluşturulur. Bu senaryolarda, managedIdentity etkin kimlik için createUiDefinition üzerindeki çıkış anahtarı kullanılmalıdır.

Yönetilen kimlik, Azure Resource Manager şablonları aracılığıyla da etkinleştirilebilir. Aşağıdaki örnek, yönetilen uygulamada sistem tarafından atanan yönetilen kimliği etkinleştirir. Giriş sağlamak için Azure Resource Manager şablon parametreleri kullanılarak daha karmaşık kimlik nesneleri oluşturulabilir. Bu girişler, kullanıcı tarafından atanan yönetilen kimlikle yönetilen uygulamalar oluşturmak için kullanılabilir.

Yönetilen kimlik için Azure Resource Manager şablonları ne zaman kullanılır?

Yönetilen uygulamalarda yönetilen kimliği etkinleştirmek için Azure Resource Manager şablonlarının ne zaman kullanılacağına ilişkin bazı öneriler aşağıdadır.

  • Yönetilen uygulamalar bir şablona göre program aracılığıyla dağıtılabilir.
  • Yönetilen uygulamayı sağlamak için yönetilen kimlik için özel rol atamaları gerekir.
  • Yönetilen uygulamanın Azure portalına ve Market oluşturma akışına ihtiyacı yoktur.

SystemAssigned şablonu

Sistem tarafından atanan yönetilen kimlikle yönetilen bir uygulama dağıtan temel bir Azure Resource Manager şablonu.

"resources": [
  {
    "type": "Microsoft.Solutions/applications",
    "name": "[parameters('applicationName')]",
    "apiVersion": "2018-09-01-preview",
    "location": "[parameters('location')]",
    "identity": {
        "type": "SystemAssigned"
    },
    "properties": {
        "ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
        "parameters": { }
    }
  }
]

UserAssigned şablonu

Kullanıcı tarafından atanan yönetilen kimlikle yönetilen bir uygulama dağıtan temel bir Azure Resource Manager şablonu.

"resources": [
  {
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities",
    "name": "[parameters('managedIdentityName')]",
    "apiVersion": "2018-11-30",
    "location": "[parameters('location')]"
  },
  {
    "type": "Microsoft.Solutions/applications",
    "name": "[parameters('applicationName')]",
    "apiVersion": "2018-09-01-preview",
    "location": "[parameters('location')]",
    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "[resourceID('Microsoft.ManagedIdentity/userAssignedIdentities/',parameters('managedIdentityName'))]": {}
        }
    },
    "properties": {
        "ManagedResourceGroupId": "[parameters('managedByResourceGroupId')]",
        "parameters": { }
    }
  }
]

Azure kaynaklarına erişim verme

Yönetilen uygulamaya bir kimlik verildikten sonra, rol ataması oluşturularak mevcut Azure kaynaklarına erişim verilebilir.

Bunu yapmak için, yönetilen uygulamanın veya kullanıcı tarafından atanan yönetilen kimliğin adını arayıp seçin ve ardından Erişim denetimi (IAM) öğesini seçin. Ayrıntılı adımlar için bkz. Azure portalı kullanarak Azure rolleri atama.

Mevcut Azure kaynaklarını bağlama

Dekont

Yönetilen uygulama dağıtılmadan önce kullanıcı tarafından atanan yönetilen kimlik yapılandırılmalıdır. Ayrıca, yönetilen uygulamaların bağlı kaynak dağıtımı yalnızca Market türü için desteklenir.

Yönetilen kimlik, dağıtımı sırasında mevcut kaynaklara erişim gerektiren yönetilen bir uygulamayı dağıtmak için de kullanılabilir. Müşteri yönetilen uygulamayı sağladığında, mainTemplate dağıtımına daha fazla yetkilendirme sağlamak için kullanıcı tarafından atanan yönetilen kimlikler eklenebilir.

Bağlantılı bir kaynakla createUiDefinition yazma

Yönetilen uygulamanın dağıtımını mevcut kaynaklara bağladığınızda, hem mevcut Azure kaynağı hem de ilgili kaynakta geçerli rol atamasına sahip kullanıcı tarafından atanan yönetilen kimlik sağlanmalıdır.

İki giriş gerektiren örnek bir createUiDefinition.json : ağ arabirimi kaynak kimliği ve kullanıcı tarafından atanan yönetilen kimlik kaynak kimliği.

{
  "$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
  "handler": "Microsoft.Azure.CreateUIDef",
  "version": "0.1.2-preview",
  "parameters": {
    "basics": [
      {}
    ],
    "steps": [
      {
        "name": "managedApplicationSetting",
        "label": "Managed Application Settings",
        "subLabel": {
          "preValidation": "Managed Application Settings",
          "postValidation": "Done"
        },
        "bladeTitle": "Managed Application Settings",
        "elements": [
          {
            "name": "networkInterfaceId",
            "type": "Microsoft.Common.TextBox",
            "label": "Network interface resource ID",
            "defaultValue": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.Network/networkInterfaces/existingnetworkinterface",
            "toolTip": "Must represent the identity as an Azure Resource Manager resource identifer format ex. /subscriptions/sub1/resourcegroups/myGroup/providers/Microsoft.Network/networkInterfaces/networkinterface1",
            "visible": true
          },
          {
            "name": "userAssignedId",
            "type": "Microsoft.Common.TextBox",
            "label": "User-assigned managed identity resource ID",
            "defaultValue": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/testRG/providers/Microsoft.ManagedIdentity/userassignedidentites/myuserassignedidentity",
            "toolTip": "Must represent the identity as an Azure Resource Manager resource identifer format ex. /subscriptions/sub1/resourcegroups/myGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity1",
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "existingNetworkInterfaceId": "[steps('managedApplicationSetting').networkInterfaceId]",
      "managedIdentity": "[parse(concat('{\"Type\":\"UserAssigned\",\"UserAssignedIdentities\":{',string(steps('managedApplicationSetting').userAssignedId),':{}}}'))]"
    }
  }
}

Bu createUiDefinition.json , iki alanı olan bir oluşturma kullanıcı deneyimi oluşturur. İlk alan, kullanıcının yönetilen uygulama dağıtımına bağlı kaynağın Azure kaynak kimliğini girmesini sağlar. İkincisi, bir tüketicinin bağlı Azure kaynağına erişimi olan kullanıcı tarafından atanan yönetilen kimlik Azure kaynak kimliğini girmesidir. Oluşturulan deneyim şöyle görünür:

Screenshot of a sample createUiDefinition.json with two inputs: a network interface resource ID and a user-assigned managed identity resource ID.

MainTemplate'ı bağlantılı bir kaynakla yazma

CreateUiDefinition güncelleştirmesine ek olarak, ana şablonun geçirilen bağlı kaynak kimliğini kabul etmek için de güncelleştirilmesi gerekir. Ana şablon, yeni bir parametre eklenerek yeni çıkışı kabul etmek üzere güncelleştirilebilir. managedIdentity Çıkış, oluşturulan yönetilen uygulama şablonundaki değeri geçersiz kılacağından, ana şablona geçirilmediğinden parametreler bölümüne dahil edilmemelidir.

Ağ profilini createUiDefinition.json tarafından sağlanan mevcut bir ağ arabirimine ayarlayan örnek bir ana şablon.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "existingNetworkInterfaceId": { "type": "string" }
  },
  "variables": {
  },
  "resources": [
    {
      "apiVersion": "2016-04-30-preview",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "myLinkedResourceVM",
      "location": "[resourceGroup().location]",
      "properties": {
        …,
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "[parameters('existingNetworkInterfaceId')]"
            }
          ]
        }
      }
    }
  ]
}

Yönetilen uygulamayı bağlı bir kaynakla kullanma

Yönetilen uygulama paketi oluşturulduktan sonra yönetilen uygulama Azure portalı üzerinden kullanılabilir. Tüketilmeden önce birkaç önkoşul adımı vardır.

  • Gerekli bağlantılı Azure kaynağının bir örneği oluşturulmalıdır.
  • Kullanıcı tarafından atanan yönetilen kimlik oluşturulmalıdır ve bağlı kaynağa rol atamaları verilmelidir.
  • Mevcut bağlı kaynak kimliği ve kullanıcı tarafından atanan yönetilen kimlik kimliği createUiDefinition'a sağlanır.

Yönetilen kimlik belirtecini erişme

Yönetilen uygulamanın belirtecini artık yayımcı kiracısından listTokens api aracılığıyla erişilebilir. Örnek bir istek şöyle görünebilir:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Solutions/applications/{applicationName}/listTokens?api-version=2018-09-01-preview HTTP/1.1

{
  "authorizationAudience": "https://management.azure.com/",
  "userAssignedIdentities": [
      "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{userAssignedIdentityName}"
  ]
}

İstek Gövdesi Parametreleri:

Parametre Zorunlu Tanım
authorizationAudience No Hedef kaynağın Uygulama Kimliği URI'si. Ayrıca verilen belirtecin aud (hedef kitle) talebidir. Varsayılan değer "https://management.azure.com/"
userAssignedIdentities No Belirteci almak için kullanıcı tarafından atanan yönetilen kimliklerin listesi. Belirtilmezse, listTokens sistem tarafından atanan yönetilen kimlik için belirteci döndürür.

Örnek yanıt şöyle görünebilir:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "value": [
    {
      "access_token": "eyJ0eXAi…",
      "expires_in": "2…",
      "expires_on": "1557…",
      "not_before": "1557…",
      "authorizationAudience": "https://management.azure.com/",
      "resourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Solutions/applications/{applicationName}",
      "token_type": "Bearer"
    }
  ]
}

Yanıt, özelliği altında value bir belirteç dizisi içerir:

Parametre Tanım
access_token İstenen erişim belirteci.
expires_in Erişim belirtecinin geçerli olduğu saniye sayısı.
expires_on Erişim belirtecinin süresi dolduğunda zaman aralığı. Bu değer, dönemdeki saniye sayısı olarak temsil edilir.
not_before Erişim belirtecinin etkin olduğu zaman aralığı. Bu değer, dönemdeki saniye sayısı olarak temsil edilir.
authorizationAudience aud Erişim belirtecinin istenildiği (hedef kitle). Bu değer, istekte sağlanan değerle listTokens aynıdır.
resourceId Verilen belirtecin Azure kaynak kimliği. Bu değer, yönetilen uygulama kimliği veya kullanıcı tarafından atanan yönetilen kimlik kimliğidir.
token_type Belirtecin türü.

Sonraki adımlar