Spravovaná aplikace Azure se spravovanou identitou

Poznámka:

Podpora spravovaných identit pro spravované aplikace Azure je aktuálně ve verzi Preview. Pokud chcete využívat spravovanou identitu, použijte verzi rozhraní API 2018-09-09-01-Preview.

Zjistěte, jak nakonfigurovat spravovanou aplikaci tak, aby obsahovala spravovanou identitu. Spravovanou identitu lze použít k tomu, aby zákazníkovi umožnil udělit spravované aplikaci přístup k existujícím prostředkům. Platforma Azure spravuje identitu a nevyžaduje zřízení ani obměně tajných kódů. Další informace o spravovaných identitách v Microsoft Entra ID najdete v tématu Spravované identity pro prostředky Azure.

Vaší aplikaci je možné udělit dva typy identit:

  • Spravovaná identita přiřazená systémem je svázaná s vaší aplikací a v případě odstranění aplikace se odstraní. Aplikace může mít jenom jednu spravovanou identitu přiřazenou systémem.
  • Spravovaná identita přiřazená uživatelem je samostatný prostředek Azure, který se dá přiřadit k vaší aplikaci. Aplikace může mít více spravovaných identit přiřazených uživatelem.

Jak používat spravovanou identitu

Spravovaná identita umožňuje pro spravované aplikace mnoho scénářů. Mezi běžné scénáře, které je možné vyřešit, patří:

  • Nasazení spravované aplikace propojené s existujícími prostředky Azure Příkladem je nasazení virtuálního počítače Azure v rámci spravované aplikace, která je připojená k existujícímu síťovému rozhraní.
  • Udělení přístupu spravované aplikace a vydavatele k prostředkům Azure mimo spravovanou skupinu prostředků.
  • Poskytnutí provozní identity spravovaných aplikací pro protokol aktivit a další služby v Rámci Azure

Přidání spravované identity

Vytvoření spravované aplikace se spravovanou identitou vyžaduje, aby byla v prostředku Azure nastavená jiná vlastnost. Následující příklad ukazuje ukázkovou vlastnost identity :

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

Spravované aplikace identitymůžete vytvořit dvěma běžnými způsoby: createUiDefinition.json a šablony Azure Resource Manageru. V případě jednoduchých scénářů jednoduchého vytvoření by se k povolení spravované identity měla použít funkce createUiDefinition , protože poskytuje bohatší prostředí. Při práci s pokročilými nebo složitými systémy, které vyžadují automatizovaná nebo více nasazení spravovaných aplikací, je však možné použít šablony.

Použití createUiDefinition

Spravovanou aplikaci je možné nakonfigurovat se spravovanou identitou prostřednictvím souboru createUiDefinition.json. V části Výstupy lze klíč managedIdentity použít k přepsání vlastnosti identity šablony spravované aplikace. Následující ukázka umožňuje spravovanou identitu přiřazenou systémem ve spravované aplikaci. Složitější objekty identity lze vytvořit pomocí elementů createUiDefinition , které uživatele požádá o vstupy. Tyto vstupy lze použít k vytváření spravovaných aplikací pomocí spravované identity přiřazené uživatelem.

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

Kdy použít createUiDefinition pro spravovanou identitu

Tady je několik doporučení, kdy použít createUiDefinition k povolení spravované identity ve spravovaných aplikacích.

  • Vytvoření spravované aplikace prochází přes Azure Portal nebo Azure Marketplace.
  • Spravovaná identita vyžaduje složitý vstup příjemce.
  • Spravovaná identita je potřebná při vytváření spravované aplikace.

Ovládací prvek CreateUiDefinition spravované identity

Soubor createUiDefinition.json podporuje integrovaný ovládací prvek spravované identity.

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

Použití šablon Azure Resource Manageru

Poznámka:

Šablony spravovaných aplikací marketplace se automaticky generují pro zákazníky procházející prostředím pro vytváření na webu Azure Portal. Pro tyto scénáře managedIdentity musí být k povolení identity použit výstupní klíč pro createUiDefinition .

Spravovanou identitu je možné povolit také prostřednictvím šablon Azure Resource Manageru. Následující ukázka umožňuje spravovanou identitu přiřazenou systémem ve spravované aplikaci. Složitější objekty identity je možné vytvořit pomocí parametrů šablony Azure Resource Manageru, které poskytují vstupy. Tyto vstupy lze použít k vytváření spravovaných aplikací pomocí spravované identity přiřazené uživatelem.

Kdy použít šablony Azure Resource Manageru pro spravovanou identitu

Tady je několik doporučení, kdy použít šablony Azure Resource Manageru pro povolení spravované identity ve spravovaných aplikacích.

  • Spravované aplikace je možné nasadit prostřednictvím kódu programu na základě šablony.
  • K zřízení spravované aplikace jsou potřeba vlastní přiřazení rolí pro spravovanou identitu.
  • Spravovaná aplikace nepotřebuje tok vytváření webu Azure Portal a Marketplace.

Šablona SystemAssigned

Základní šablona Azure Resource Manageru, která nasazuje spravovanou aplikaci s spravovanou identitou přiřazenou systémem

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

Šablona Přiřazená uživatelem

Základní šablona Azure Resource Manageru, která nasadí spravovanou aplikaci s spravovanou identitou přiřazenou uživatelem.

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

Udělení přístupu k prostředkům Azure

Jakmile je spravovaná aplikace udělena identita, můžete jí udělit přístup k existujícím prostředkům Azure vytvořením přiřazení role.

Uděláte to tak, že vyhledáte a vyberete název spravované aplikace nebo spravované identity přiřazené uživatelem a pak vyberete Řízení přístupu (IAM). Podrobný postup najdete v tématu Přiřazování rolí Azure s využitím webu Azure Portal.

Propojení existujících prostředků Azure

Poznámka:

Před nasazením spravované aplikace musí být nakonfigurovaná spravovaná identita přiřazená uživatelem. Kromě toho se nasazení propojených prostředků spravovaných aplikací podporuje jenom pro druh Marketplace .

Spravovanou identitu lze použít také k nasazení spravované aplikace, která během nasazování vyžaduje přístup k existujícím prostředkům. Když zákazník zřídí spravovanou aplikaci, je možné přidat spravované identity přiřazené uživatelem, aby poskytovaly další autorizace pro nasazení mainTemplate .

Vytvoření definice createUiDefinition s propojeným prostředkem

Když propočítáte nasazení spravované aplikace s existujícími prostředky, musí se poskytnout stávající prostředek Azure i spravovaná identita přiřazená uživatelem s příslušným přiřazením role k danému prostředku.

Ukázka createUiDefinition.json , která vyžaduje dva vstupy: ID prostředku síťového rozhraní a ID prostředku spravované identity přiřazené uživatelem.

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

Tento soubor createUiDefinition.json vygeneruje prostředí pro vytvoření uživatele se dvěma poli. První pole umožňuje uživateli zadat ID prostředku Azure, které je propojené s nasazením spravované aplikace. Druhým je zadání ID prostředku Azure přiřazené uživatelem přiřazené uživatelem, který má přístup k propojenému prostředku Azure. Vygenerované prostředí by vypadalo takto:

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

Vytvoření mainTemplate s propojeným prostředkem

Kromě aktualizace createUiDefinition je také potřeba aktualizovat hlavní šablonu tak, aby přijímala předané ID propojeného prostředku. Hlavní šablonu je možné aktualizovat tak, aby přijímala nový výstup přidáním nového parametru. managedIdentity Vzhledem k tomu, že výstup přepíše hodnotu vygenerované šabloně spravované aplikace, nepředá se hlavní šabloně a neměl by být zahrnut do oddílu parametrů.

Ukázková hlavní šablona, která nastaví profil sítě na existující síťové rozhraní, které poskytuje 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')]"
            }
          ]
        }
      }
    }
  ]
}

Využívání spravované aplikace s propojeným prostředkem

Po vytvoření balíčku spravované aplikace je možné spravovanou aplikaci využívat prostřednictvím webu Azure Portal. Než ho budete moct využívat, existuje několik požadovaných kroků.

  • Je potřeba vytvořit instanci požadovaného propojeného prostředku Azure.
  • Spravovaná identita přiřazená uživatelem musí být vytvořena a přiřazena k propojenému prostředku.
  • Existující ID propojeného prostředku a ID spravované identity přiřazené uživatelem se zadají do definice createUiDefinition.

Přístup k tokenu spravované identity

Token spravované aplikace je teď přístupný prostřednictvím listTokens rozhraní API z tenanta vydavatele. Příklad požadavku může vypadat takto:

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

Parametry textu požadavku:

Parametr Požadováno Popis
authorizationAudience Ne Identifikátor URI ID aplikace cílového prostředku. Jedná se také o aud deklaraci identity vydaného tokenu (cílové skupiny). Výchozí hodnota je "https://management.azure.com/"
userAssignedIdentities Ne Seznam spravovaných identit přiřazených uživatelem pro načtení tokenu Pokud není zadaný, listTokens vrátí token spravované identity přiřazené systémem.

Ukázková odpověď může vypadat takto:

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

Odpověď obsahuje pole tokenů v rámci value vlastnosti:

Parametr Popis
access_token Požadovaný přístupový token.
expires_in Počet sekund platnosti přístupového tokenu.
expires_on Časový rozsah, kdy vyprší platnost přístupového tokenu. Tato hodnota je reprezentována jako počet sekund od epochy.
not_before Časový rozsah, kdy se přístupový token projeví. Tato hodnota je reprezentována jako počet sekund od epochy.
authorizationAudience Přístupový aud token (cílová skupina) byl požadován. Tato hodnota je stejná jako hodnota zadaná v listTokens požadavku.
resourceId ID prostředku Azure pro vystavený token. Tato hodnota je ID spravované aplikace nebo ID spravované identity přiřazené uživatelem.
token_type Typ tokenu

Další kroky