Zelfstudie: Een beheerde toepassingsdefinitie maken en publicerenTutorial: Create and publish a managed application definition

Notitie

Dit artikel is bijgewerkt voor het gebruik van de nieuwe Azure PowerShell Az-module.This article has been updated to use the new Azure PowerShell Az module. De AzureRM-module kan nog worden gebruikt en krijgt bugoplossingen tot ten minste december 2020.You can still use the AzureRM module, which will continue to receive bug fixes until at least December 2020. Zie voor meer informatie over de nieuwe Az-module en compatibiliteit met AzureRM Introductie van de nieuwe Az-module van Azure PowerShell.To learn more about the new Az module and AzureRM compatibility, see Introducing the new Azure PowerShell Az module. Raadpleeg Azure PowerShell installeren voor instructies over de installatie van de Az-module.For Az module installation instructions, see Install Azure PowerShell.

U kunt door Azure beheerde toepassingen maken en publiceren die bedoeld zijn voor leden van uw organisatie.You can create and publish Azure managed applications that are intended for members of your organization. Zo kan een IT-afdeling beheerde toepassingen publiceren die voldoen aan de organisatiestandaarden.For example, an IT department can publish managed applications that fulfill organizational standards. Deze beheerde toepassingen zijn beschikbaar via de servicecatalogus, niet Azure Marketplace.These managed applications are available through the service catalog, not the Azure marketplace.

Als u een beheerde toepassing wilt publiceren in uw Azure Service Catalog, moet u het als:To publish a managed application to your Azure Service Catalog, you must:

  • Een sjabloon maken die de resources definieert die met de beheerde toepassing moeten worden geïmplementeerd.Create a template that defines the resources to deploy with the managed application.
  • De elementen van de gebruikersinterface voor de portal definiëren bij het implementeren van de beheerde toepassing.Define the user interface elements for the portal when deploying the managed application.
  • Een ZIP-pakket met de vereiste sjabloonbestanden maken.Create a .zip package that contains the required template files.
  • Bepalen welke gebruiker, groep of toepassing toegang moet hebben tot de resourcegroep in het abonnement van de gebruiker.Decide which user, group, or application needs access to the resource group in the user's subscription.
  • De definitie van de beheerde toepassing maken die verwijst naar het ZIP-pakket en toegang voor de identiteit aanvraagt.Create the managed application definition that points to the .zip package and requests access for the identity.

De beheerde toepassing in dit artikel bevat alleen een opslagaccount.For this article, your managed application has only a storage account. Het artikel is namelijk alleen bedoeld om de stappen voor het publiceren van een beheerde toepassing te laten zien.It's intended to illustrate the steps of publishing a managed application. Zie Voorbeeldprojecten voor door Azure beheerde toepassingen voor uitgebreide voorbeelden.For complete examples, see Sample projects for Azure managed applications.

Voor de PowerShell-voorbeelden in dit artikel hebt u Azure PowerShell versie 6.2 of hoger nodig.The PowerShell examples in this article require Azure PowerShell 6.2 or later. Werk uw versie bij als dat nodig is.If needed, update your version.

De resourcesjabloon makenCreate the resource template

De definitie van een beheerde toepassing bevat altijd een bestand met de naam mainTemplate.json.Every managed application definition includes a file named mainTemplate.json. Hierin definieert u de Azure-resources die u wilt implementeren.In it, you define the Azure resources to deploy. De sjabloon is niet anders dan een reguliere Resource Manager-sjabloon.The template is no different than a regular Resource Manager template.

Maak een bestand met de naam mainTemplate.json.Create a file named mainTemplate.json. De naam is hoofdlettergevoelig.The name is case-sensitive.

Voeg de volgende JSON-code toe aan uw bestand.Add the following JSON to your file. Hiermee definieert u de parameters voor het maken van een opslagaccount, en geeft u de eigenschappen voor het opslagaccount op.It defines the parameters for creating a storage account, and specifies the properties for the storage account.

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "storageAccountNamePrefix": {
            "type": "string"
        },
        "storageAccountType": {
            "type": "string"
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]"
        }
    },
    "variables": {
        "storageAccountName": "[concat(parameters('storageAccountNamePrefix'), uniqueString(resourceGroup().id))]"
    },
    "resources": [
        {
            "type": "Microsoft.Storage/storageAccounts",
            "name": "[variables('storageAccountName')]",
            "apiVersion": "2016-01-01",
            "location": "[parameters('location')]",
            "sku": {
                "name": "[parameters('storageAccountType')]"
            },
            "kind": "Storage",
            "properties": {}
        }
    ],
    "outputs": {
        "storageEndpoint": {
            "type": "string",
            "value": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2016-01-01').primaryEndpoints.blob]"
        }
    }
}

Sla het bestand mainTemplate.json op.Save the mainTemplate.json file.

Uw ervaring met maken definiëren met CreateUiDefinition.jsonDefining your create experience using CreateUiDefinition.json

Als uitgever definieert u uw maakervaring met het bestand createUiDefinition.json dat de interface genereert voor gebruikers die beheerde toepassingen maken.As a publisher, you define your create experience using the createUiDefinition.json file which generates the interface for users creating managed applications. U definieert hoe gebruikers invoer voor elke parameter leveren met behulp van besturingselementelementen, waaronder vervolgkeuzelijsten, tekstvakken en wachtwoordvakken.You define how users provide input for each parameter using control elements including drop-downs, text boxes, and password boxes.

Een bestand met de naam createUiDefinition.json maken (deze naam is hoofdlettergevoelig)Create a file named createUiDefinition.json (This name is case-sensitive)

Voeg de volgende starter JSON toe aan het bestand en sla het op.Add the following starter JSON to the file and save it.

{
   "$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": "storageConfig",
                "label": "Storage settings",
                "subLabel": {
                    "preValidation": "Configure the infrastructure settings",
                    "postValidation": "Done"
                },
                "bladeTitle": "Storage settings",
                "elements": [
                    {
                        "name": "storageAccounts",
                        "type": "Microsoft.Storage.MultiStorageAccountCombo",
                        "label": {
                            "prefix": "Storage account name prefix",
                            "type": "Storage account type"
                        },
                        "defaultValue": {
                            "type": "Standard_LRS"
                        },
                        "constraints": {
                            "allowedTypes": [
                                "Premium_LRS",
                                "Standard_LRS",
                                "Standard_GRS"
                            ]
                        }
                    }
                ]
            }
        ],
        "outputs": {
            "storageAccountNamePrefix": "[steps('storageConfig').storageAccounts.prefix]",
            "storageAccountType": "[steps('storageConfig').storageAccounts.type]",
            "location": "[location()]"
        }
    }
}

Zie Aan de slag met CreateUiDefinition voormeer informatie.To learn more, see Get started with CreateUiDefinition.

De bestanden verpakkenPackage the files

Voeg de twee bestanden toe aan een ZIP-bestand met de naam app.zip.Add the two files to a .zip file named app.zip. De twee bestanden moeten zich in de hoofdmap van het ZIP-bestand bevinden.The two files must be at the root level of the .zip file. Als u ze in een map opslaat, treedt er een fout op bij het maken van de definitie van de beheerde toepassing met de mededeling dat de vereiste bestanden niet zijn gevonden.If you put them in a folder, you receive an error when creating the managed application definition that states the required files aren't present.

Upload het pakket naar een toegankelijke locatie vanaf waar het pakket kan worden gebruikt.Upload the package to an accessible location from where it can be consumed.

New-AzResourceGroup -Name storageGroup -Location eastus
$storageAccount = New-AzStorageAccount -ResourceGroupName storageGroup `
  -Name "mystorageaccount" `
  -Location eastus `
  -SkuName Standard_LRS `
  -Kind Storage

$ctx = $storageAccount.Context

New-AzStorageContainer -Name appcontainer -Context $ctx -Permission blob

Set-AzStorageBlobContent -File "D:\myapplications\app.zip" `
  -Container appcontainer `
  -Blob "app.zip" `
  -Context $ctx 

De definitie van de beheerde toepassing makenCreate the managed application definition

Een Azure Active Directory-gebruikersgroep of -toepassing makenCreate an Azure Active Directory user group or application

De volgende stap is het selecteren van een gebruikersgroep of toepassing om de resources namens de klant te beheren.The next step is to select a user group or application for managing the resources on behalf of the customer. Deze gebruikersgroep of toepassing heeft machtigingen voor de beheerde resourcegroep overeenkomstig de toegewezen rol.This user group or application has permissions on the managed resource group according to the role that is assigned. De rol kan elke ingebouwde rol van op rollen gebaseerd toegangsbeheer (RBAC) zijn, zoals Eigenaar of Inzender.The role can be any built-in Role-Based Access Control (RBAC) role like Owner or Contributor. U kunt ook een afzonderlijke gebruiker toestemming geven om de resources te beheren, maar meestal wijst u deze machtiging toe aan een gebruikersgroep.You also can give an individual user permission to manage the resources, but typically you assign this permission to a user group. Zie Een groep maken en leden toevoegen in Azure Active Directory voor instructies voor het maken van een nieuwe Active Directory-gebruikersgroep.To create a new Active Directory user group, see Create a group and add members in Azure Active Directory.

U hebt de object-id van de gebruikersgroep nodig om de resources te beheren.You need the object ID of the user group to use for managing the resources.

$groupID=(Get-AzADGroup -DisplayName mygroup).Id

De roldefinitie-id opvragenGet the role definition ID

Vervolgens hebt u de roldefinitie-id nodig van de ingebouwde RBAC-rol waarmee u toegang wilt verlenen aan de gebruiker, gebruikersgroep of toepassing.Next, you need the role definition ID of the RBAC built-in role you want to grant access to the user, user group, or application. Meestal gebruikt u de rol van eigenaar, inzender of lezer.Typically, you use the Owner or Contributor or Reader role. In de volgende opdracht ziet u hoe u de roldefinitie-id ophaalt voor de rol van eigenaar:The following command shows how to get the role definition ID for the Owner role:

$ownerID=(Get-AzRoleDefinition -Name Owner).Id

De definitie van de beheerde toepassing makenCreate the managed application definition

Als u nog geen resourcegroep hebt voor het opslaan van de definitie van de beheerde toepassing, maakt u er nu een:If you don't already have a resource group for storing your managed application definition, create one now:

New-AzResourceGroup -Name appDefinitionGroup -Location westcentralus

Maak nu de definitieresource van de beheerde toepassing.Now, create the managed application definition resource.

$blob = Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $ctx

New-AzManagedApplicationDefinition `
  -Name "ManagedStorage" `
  -Location "westcentralus" `
  -ResourceGroupName appDefinitionGroup `
  -LockLevel ReadOnly `
  -DisplayName "Managed Storage Account" `
  -Description "Managed Azure Storage Account" `
  -Authorization "${groupID}:$ownerID" `
  -PackageFileUri $blob.ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri

Breng uw eigen opslag mee voor de beheerde toepassingsdefinitieBring your own storage for the managed application definition

U ervoor kiezen om uw beheerde toepassingsdefinitie op te slaan in een opslagaccount dat door u wordt verstrekt tijdens het maken, zodat de locatie en toegang volledig door u kunnen worden beheerd voor uw wettelijke behoeften.You can choose to store your managed application definition within a storage account provided by you during creation so that it's location and access can be fully managed by you for your regulatory needs.

Notitie

Breng uw eigen opslag wordt alleen ondersteund met ARM Template of REST API implementaties van de beheerde toepassingsdefinitie.Bring your own storage is only supported with ARM Template or REST API deployments of the managed application definition.

Selecteer uw opslagaccountSelect your storage account

U moet een opslagaccount maken om de beheerde toepassingsdefinitie te bevatten voor gebruik met Service Catalog.You must create a storage account to contain your managed application definition for use with Service Catalog.

Kopieer de bron-id van het opslagaccount.Copy the storage account's resource ID. Het zal later worden gebruikt bij het implementeren van de definitie.It will be used later when deploying the definition.

De roltoewijzing voor 'Toestelserviceprovider' instellen in uw opslagaccountSet the role assignment for "Appliance Resource Provider" in your storage account

Voordat uw beheerde toepassingsdefinitie kan worden geïmplementeerd in uw opslagaccount, moet u inzendermachtigingen geven aan de rol van toestelbronprovider, zodat de definitiebestanden naar de container van uw opslagaccount kunnen worden geschreven.Before your managed application definition can be deployed to your storage account, you must give contributor permissions to the Appliance Resource Provider role so that it can write the definition files to your storage account's container.

  1. Navigeer in de Azure-portalnaar uw opslagaccount.In the Azure portal, navigate to your storage account.
  2. Selecteer Toegangsbeheer (IAM) om de toegangscontrole-instellingen voor het opslagaccount weer te geven.Select Access control (IAM) to display the access control settings for the storage account. Selecteer het tabblad Toewijzingen van rollen om de lijst met roltoewijzingen weer te geven.Select the Role assignments tab to see the list of role assignments.
  3. Selecteer in het venster Roltoewijzing toevoegen de rol Inzender.In the Add role assignment window, select the Contributor role.
  4. Selecteer azure AD-gebruiker, -groep of serviceprincipalin het veld Toegang toewijzen tot veld .From the Assign access to field, select Azure AD user, group, or service principal.
  5. Selecteer onder Zoeken naar de rol Toestelbronprovider selecteren en selecteer deze.Under Select search for Appliance Resource Provider role and select it.
  6. Sla de roltoewijzing op.Save the role assignment.

De beheerde toepassingsdefinitie implementeren met een ARM-sjabloonDeploy the managed application definition with an ARM Template

Gebruik de volgende ARM-sjabloon om uw verpakte beheerde toepassing te implementeren als een nieuwe beheerde toepassingsdefinitie in servicecatalogus waarvan de definitiebestanden worden opgeslagen en onderhouden in uw eigen opslagaccount:Use the following ARM Template to deploy your packaged managed application as a new managed application definition in Service Catalog whose definition files are stored and maintained in your own storage account:

    {
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]"
        },
        "applicationName": {
            "type": "string",
            "metadata": {
                "description": "Managed Application name"
            }
        },
        "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS",
        "Standard_ZRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Storage Account type"
      }
    },
        "definitionStorageResourceID": {
            "type": "string",
            "metadata": {
                "description": "Storage account resource ID for where you're storing your definition"
            }
        },
        "_artifactsLocation": {
            "type": "string",
            "metadata": {
                "description": "The base URI where artifacts required by this template are located."
            }
        }
    },
    "variables": {
        "lockLevel": "None",
        "description": "Sample Managed application definition",
        "displayName": "Sample Managed application definition",
        "managedApplicationDefinitionName": "[parameters('applicationName')]",
        "packageFileUri": "[parameters('_artifactsLocation')]",
        "defLocation": "[parameters('definitionStorageResourceID')]",
        "managedResourceGroupId": "[concat(subscription().id,'/resourceGroups/', concat(parameters('applicationName'),'_managed'))]",
        "applicationDefinitionResourceId": "[resourceId('Microsoft.Solutions/applicationDefinitions',variables('managedApplicationDefinitionName'))]"
    },
    "resources": [
        {
            "type": "Microsoft.Solutions/applicationDefinitions",
            "apiVersion": "2019-07-01",
            "name": "[variables('managedApplicationDefinitionName')]",
            "location": "[parameters('location')]",
            "properties": {
                "lockLevel": "[variables('lockLevel')]",
                "description": "[variables('description')]",
                "displayName": "[variables('displayName')]",
                "packageFileUri": "[variables('packageFileUri')]",
                "storageAccountId": "[variables('defLocation')]"
            }
        }
    ],
    "outputs": {}
}

We hebben een nieuwe eigenschap met de naam storageAccountId toegevoegd aan de eigenschappen van uw applicatieDefintion en bieden een opslagaccount-id waar u uw definitie in wilt opslaan als de waarde:We have added a new property named storageAccountId to your applicationDefintion's properties and provide storage account id you wish to store your definition in as its value:

U controleren of de toepassingsdefinitiebestanden zijn opgeslagen in uw opgegeven opslagaccount in een container met de titel toepassingsdefinities.You can verify that the application definition files are saved in your provided storage account in a container titled applicationdefinitions.

Notitie

Voor extra beveiliging u een definitie van beheerde toepassingen maken, deze opslaan in een blob met Azure-opslagaccount waar versleuteling is ingeschakeld.For added security, you can create a managed applications definition store it in an Azure storage account blob where encryption is enabled. De definitie-inhoud wordt versleuteld via de versleutelingsopties van het opslagaccount.The definition contents are encrypted through the storage account's encryption options. Alleen gebruikers met machtigingen voor het bestand kunnen de definitie in de servicecatalogus zien.Only users with permissions to the file can see the definition in Service Catalog.

Ervoor zorgen dat gebruikers de definitie kunnen zienMake sure users can see your definition

U hebt toegang tot de definitie van de beheerde toepassing, maar u wilt controleren of andere gebruikers in uw organisatie hiertoe toegang hebben.You have access to the managed application definition, but you want to make sure other users in your organization can access it. Verleen hun minimaal de rol van Lezer voor de definitie.Grant them at least the Reader role on the definition. Mogelijk hebben ze dit toegangsniveau overgenomen van het abonnement of de resourcegroep.They may have inherited this level of access from the subscription or resource group. Als u wilt controleren wie toegang heeft tot de definitie en gebruikers of groepen wilt toevoegen, raadpleegt u Op rollen gebaseerd toegangsbeheer gebruiken om de toegang tot de resources van uw Azure-abonnement te beheren.To check who has access to the definition and add users or groups, see Use Role-Based Access Control to manage access to your Azure subscription resources.

Volgende stappenNext steps