Azure Managed Application dengan identitas terkelola

Catatan

Dukungan identitas terkelola untuk Azure Managed Applications saat ini dalam pratinjau. Silakan gunakan versi api 2018-09-01-preview untuk menggunakan identitas terkelola.

Pelajari cara mengonfigurasi aplikasi terkelola untuk berisi identitas terkelola. Identitas terkelola dapat digunakan untuk memungkinkan pelanggan memberikan akses aplikasi terkelola ke sumber daya yang ada. Platform Azure mengelola identitas dan tidak mengharuskan Anda untuk menyediakan atau memutar rahasia apa pun. Untuk informasi selengkapnya tentang identitas terkelola di ID Microsoft Entra, lihat Identitas terkelola untuk sumber daya Azure.

Aplikasi Anda dapat diberikan dua jenis identitas:

  • Identitas terkelola yang ditetapkan sistem terkait dengan aplikasi Anda dan dihapus jika aplikasi Anda dihapus. Aplikasi hanya dapat memiliki satu identitas terkelola yang ditetapkan sistem.
  • Identitas terkelola yang ditetapkan pengguna adalah sumber daya Azure mandiri yang dapat ditetapkan ke aplikasi Anda. Aplikasi dapat memiliki beberapa identitas terkelola yang ditetapkan pengguna.

Cara menggunakan identitas terkelola

Identitas terkelola memungkinkan banyak skenario untuk aplikasi terkelola. Beberapa skenario umum yang dapat diselesaikan adalah:

  • Menyebarkan aplikasi terkelola yang ditautkan ke sumber daya Azure yang ada. Contohnya adalah menyebarkan komputer virtual (VM) Azure dalam aplikasi terkelola yang dilampirkan ke antarmuka jaringan yang ada.
  • Memberikan aplikasi terkelola dan akses penerbit ke sumber daya Azure di luar grup sumber daya terkelola.
  • Menyediakan identitas operasional aplikasi terkelola untuk Log Aktivitas dan layanan lain dalam Azure.

Menambahkan identitas terkelola

Membuat aplikasi terkelola dengan identitas terkelola mengharuskan properti lain diatur pada sumber daya Azure. Contoh berikut menunjukkan sampel properti identitas:

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

Ada dua cara umum untuk membuat aplikasi terkelola dengan identity: createUiDefinition.json dan templat Azure Resource Manager. Untuk skenario pembuatan tunggal sederhana, createUiDefinition harus digunakan untuk mengaktifkan identitas terkelola, karena memberikan pengalaman yang lebih kaya. Namun, saat berhadapan dengan sistem tingkat lanjut atau kompleks yang memerlukan penyebaran aplikasi otomatis atau beberapa terkelola, templat dapat digunakan.

Menggunakan createUiDefinition

Aplikasi terkelola dapat dikonfigurasi dengan identitas terkelola melalui createUiDefinition.json. Di bagian output, kunci managedIdentity dapat digunakan untuk mengambil alih properti identitas templat aplikasi terkelola. Sampel berikut memungkinkan identitas terkelola yang ditetapkan sistem pada aplikasi terkelola. Objek identitas yang lebih kompleks dapat dibentuk dengan menggunakan elemen createUiDefinition untuk meminta input kepada konsumen. Input ini dapat digunakan untuk membangun aplikasi terkelola dengan identitas terkelola yang ditetapkan pengguna.

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

Kapan menggunakan createUiDefinition untuk identitas terkelola

Berikut ini adalah beberapa rekomendasi tentang kapan menggunakan createUiDefinition untuk mengaktifkan identitas terkelola pada aplikasi terkelola.

  • Pembuatan aplikasi terkelola melewati portal Azure atau Marketplace Azure.
  • Identitas terkelola memerlukan input konsumen yang kompleks.
  • Identitas terkelola diperlukan pada pembuatan aplikasi terkelola.

Kontrol createUiDefinition identitas terkelola

createUiDefinition.json mendukung kontrol identitas terkelola bawaan.

{
  "$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

Menggunakan templat Azure Resource Manager

Catatan

Templat aplikasi terkelola Marketplace secara otomatis dihasilkan untuk pelanggan yang melalui pengalaman portal Azure buat. Untuk skenario ini, managedIdentity kunci output pada createUiDefinition harus digunakan untuk mengaktifkan identitas.

Identitas terkelola juga dapat diaktifkan melalui templat Azure Resource Manager. Sampel berikut memungkinkan identitas terkelola yang ditetapkan sistem pada aplikasi terkelola. Objek identitas yang lebih kompleks dapat dibentuk dengan menggunakan parameter templat Azure Resource Manager untuk menyediakan input. Input ini dapat digunakan untuk membangun aplikasi terkelola dengan identitas terkelola yang ditetapkan pengguna.

Kapan menggunakan templat Azure Resource Manager untuk identitas terkelola

Berikut ini adalah beberapa rekomendasi tentang kapan menggunakan templat Azure Resource Manager untuk mengaktifkan identitas terkelola pada aplikasi terkelola.

  • Aplikasi terkelola dapat disebarkan secara terprogram berdasarkan templat.
  • Penetapan peran kustom untuk identitas terkelola diperlukan untuk menyediakan aplikasi terkelola.
  • Aplikasi terkelola tidak memerlukan alur pembuatan portal Azure dan Marketplace.

Templat SystemAssigned

Templat Azure Resource Manager dasar yang menyebarkan aplikasi terkelola dengan identitas terkelola yang ditetapkan sistem.

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

Templat UserAssigned

Templat Azure Resource Manager dasar yang menyebarkan aplikasi terkelola dengan identitas terkelola yang ditetapkan pengguna.

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

Memberikan akses ke sumber daya Azure

Setelah aplikasi terkelola diberikan identitas, aplikasi tersebut dapat diberikan akses ke sumber daya Azure yang ada dengan membuat penetapan peran.

Untuk melakukannya, cari dan pilih nama aplikasi terkelola atau identitas terkelola yang ditetapkan pengguna, lalu pilih Kontrol akses (IAM). Untuk langkah-langkah mendetail, lihat Menetapkan peran Azure menggunakan portal Azure.

Menautkan sumber daya Azure yang sudah ada

Catatan

Identitas terkelola yang ditetapkan pengguna harus dikonfigurasi sebelum menyebarkan aplikasi terkelola. Selain itu, penyebaran sumber daya tertaut dari aplikasi terkelola hanya didukung untuk jenis Marketplace .

Identitas terkelola juga dapat digunakan untuk menyebarkan aplikasi terkelola yang memerlukan akses ke sumber daya yang ada selama penyebarannya. Ketika pelanggan menyediakan aplikasi terkelola, identitas terkelola yang ditetapkan pengguna dapat ditambahkan untuk memberikan lebih banyak otorisasi ke penyebaran mainTemplate .

Menulis createUiDefinition dengan sumber daya tertaut

Saat Anda menautkan penyebaran aplikasi terkelola ke sumber daya yang ada, sumber daya Azure yang ada dan identitas terkelola yang ditetapkan pengguna dengan penetapan peran yang berlaku pada sumber daya tersebut harus disediakan.

Sampel createUiDefinition.json yang memerlukan dua input: ID sumber daya antarmuka jaringan dan ID sumber daya identitas terkelola yang ditetapkan pengguna.

{
  "$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),':{}}}'))]"
    }
  }
}

CreateUiDefinition.json ini menghasilkan pengalaman buat pengguna yang memiliki dua bidang. Bidang pertama memungkinkan pengguna untuk memasukkan ID sumber daya Azure untuk sumber daya yang ditautkan ke penyebaran aplikasi terkelola. Yang kedua adalah bagi konsumen untuk memasukkan ID sumber daya Azure identitas terkelola yang ditetapkan pengguna, yang memiliki akses ke sumber daya Azure yang ditautkan. Pengalaman yang dihasilkan akan terlihat seperti:

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

Penulisan mainTemplate dengan sumber daya yang ditautkan

Selain memperbarui createUiDefinition, templat utama juga perlu diperbarui untuk menerima yang diteruskan dalam ID sumber daya tertaut. Templat utama dapat diperbarui untuk menerima output baru dengan menambahkan parameter baru. managedIdentity Karena output mengambil alih nilai pada templat aplikasi terkelola yang dihasilkan, output tidak diteruskan ke templat utama dan tidak boleh disertakan di bagian parameter.

Contoh templat utama yang mengatur profil jaringan ke antarmuka jaringan yang ada yang disediakan oleh createUiDefinition.json.

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

Menggunakan aplikasi terkelola dengan sumber daya tertaut

Setelah paket aplikasi terkelola dibuat, aplikasi terkelola dapat dikonsumsi melalui portal Azure. Sebelum dapat digunakan, ada beberapa langkah prasyarat.

  • Instans sumber daya Azure yang ditautkan yang diperlukan harus dibuat.
  • Identitas terkelola yang ditetapkan pengguna harus dibuat dan diberikan penetapan peran ke sumber daya yang ditautkan.
  • ID sumber daya tertaut yang ada dan ID identitas terkelola yang ditetapkan pengguna disediakan untuk createUiDefinition.

Mengakses token identitas terkelola

Token aplikasi terkelola sekarang dapat diakses melalui listTokens api dari penyewa penerbit. Contoh permintaan mungkin terlihat seperti:

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

Parameter Isi Permintaan:

Parameter Wajib Deskripsi
authorizationAudience no URI ID Aplikasi dari sumber daya target. Ini juga merupakan klaim aud (audiens) dari token yang dikeluarkan. Nilai default adalah "https://management.azure.com/"
userAssignedIdentities no Daftar identitas terkelola yang ditetapkan pengguna untuk mengambil token. Jika tidak ditentukan, listTokens mengembalikan token untuk identitas terkelola yang ditetapkan sistem.

Sampel respons mungkin terlihat seperti:

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

Respons berisi array token di value bawah properti :

Parameter Deskripsi
access_token Token akses yang diminta.
expires_in Jumlah detik token akses valid.
expires_on Rentang waktu kapan token akses kedaluwarsa. Nilai ini dinyatakan sebagai jumlah detik dari epoch.
not_before Rentang waktu kapan token akses berlaku. Nilai ini dinyatakan sebagai jumlah detik dari epoch.
authorizationAudience aud (audiens) yang diminta token akses. Nilai ini sama dengan apa yang disediakan dalam listTokens permintaan.
resourceId ID sumber daya Azure untuk token yang dikeluarkan. Nilai ini adalah ID aplikasi terkelola atau ID identitas terkelola yang ditetapkan pengguna.
token_type Jenis token.

Langkah berikutnya