Snabbstart: Skapa och publicera en definition för det hanterade programmet

Den här snabbstarten innehåller en introduktion till att arbeta med Azure Managed Applications. Du kan skapa och publicera ett hanterat program som är avsett för medlemmar i din organisation.

Om du vill publicera ett hanterat program i tjänstkatalogen måste du:

  • Skapa en mall som definierar resurserna som ska distribueras med det hanterade programmet.
  • Definiera användargränssnittselementen för portalen när du distribuerar det hanterade programmet.
  • Skapa ett .zip-paket som innehåller de mallfiler som krävs.
  • Bestämma vilken användare, vilken grupp eller vilket program som behöver åtkomst till resursgruppen i användarens prenumeration.
  • Skapa definitionen för det hanterade programmet som pekar på.zip-paketet och begär åtkomst för identiteten.

Skapa ARM-mallen

Alla definitioner för hanterade program innehåller en fil med namnet mainTemplate.json. I den filen definierar du Azure-resurserna som ska distribueras. Mallen skiljer sig inte från en vanlig ARM-mall.

Skapa en fil med namnet mainTemplate.json. Namnet är skiftlägeskänsligt.

Lägg till följande JSON i filen. Den definierar parametrarna för att skapa ett lagringskonto och anger egenskaperna för lagringskontot.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-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",
      "apiVersion": "2019-06-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('storageAccountType')]"
      },
      "kind": "StorageV2",
      "properties": {}
    }
  ],
  "outputs": {
    "storageEndpoint": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName')), '2019-06-01').primaryEndpoints.blob]"
    }
  }
}

Spara filen mainTemplate.json.

Definiera din upplevelse av att skapa

Som utgivare definierar du portalupplevelsen för att skapa det hanterade programmet. Filen createUiDefinition.json genererar portalgränssnittet. Du definierar hur användare anger indata för varje parameter med hjälp av kontrollelement, inklusive listrutor, textrutor och lösenordsrutor.

Skapa en fil med namnet createUiDefinition.json (det här namnet är ärendekänsligt)

Lägg till följande JSON-startfil i filen och spara den.

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

Mer information finns i Kom igång med CreateUiDefinition.

Paketera filerna

Lägg till de två filerna i en.zip med namnetapp.zip. De två filerna måste finnas på rotnivån för den.zip filen. Om du lägger dem i en mapp får du ett felmeddelande när du skapar definitionen för det hanterade programmet, som anger att de nödvändiga filerna saknas.

Ladda upp paketet till en tillgänglig plats som det kan användas från. Du måste ange ett unikt namn för lagringskontot.

New-AzResourceGroup -Name storageGroup -Location eastus

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

$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

Skapa definitionen för det hanterade programmet

Skapa en Azure Active Directory-användargrupp eller ett Azure Active Directory-program

Nästa steg är att välja en användargrupp, en användare eller ett program för att hantera kundens resurser. Den här identiteten har behörigheter på den hanterade resursgruppen enligt den roll som är tilldelad. Rollen kan vara valfri inbyggd Azure-roll som Ägare eller Deltagare. Information om hur du skapar en ny Active Directory-användargrupp finns i Skapa en grupp och lägga till medlemmar i Azure Active Directory.

Du behöver objekt-ID:t för den användargrupp som du vill använda för att hantera resurser.

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

Hämta rolldefinitions-ID:t

Därefter behöver du rolldefinitions-ID:t för den inbyggda Azure-rollen som du vill bevilja åtkomst till användaren, användargruppen eller programmet. Normalt använder du rollen Ägare, Deltagare eller Läsare. Följande kommando visar hur du hämtar rolldefinitions-ID:t för ägarrollen:

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

Skapa definitionen för det hanterade programmet

Om du inte redan har en resursgrupp där det hanterade programmets definition kan lagras skapar du en nu:

New-AzResourceGroup -Name appDefinitionGroup -Location westcentralus

Skapa nu definitionsresursen för det hanterade programmet.

$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

När kommandot har slutförts har du en definition för det hanterade programmet i resursgruppen.

Några av de parametrar som användes i det föregående exemplet är:

  • resursgrupp: Namnet på resursgruppen där definitionen för det hanterade programmet skapas.
  • låsnivå: Typ av lås som placerats på den hanterade resursgruppen. Det förhindrar kunden från att utföra oönskade åtgärder på den här resursgruppen. ReadOnly stöds för närvarande endast på låsnivå. När ReadOnly har angivits kan kunden endast läsa resurser som finns i den hanterade resursgruppen. Utgivaridentiteter som beviljas åtkomst till den hanterade resursgruppen är undantagna från låset.
  • auktorisering: Beskriver huvudkontots ID och rolldefinitions-ID som används för att ge behörigheter till den hanterade resursgruppen. Det anges i formatet <principalId>:<roleDefinitionId>. Om det krävs fler än ett värde anger du dem i formatet <principalId1>:<roleDefinitionId1>,<principalId2>:<roleDefinitionId2>. Värdena avgränsas med ett kommatecken.
  • paketfilens URI: Platsen för ett.zip som innehåller de nödvändiga filerna.

Bring Your Own Storage för definitionen av det hanterade programmet

Du kan välja att lagra definitionen för det hanterade programmet i ett lagringskonto som du angav när du skapade det så att platsen och åtkomsten kan hanteras fullständigt av dig för dina regelbehov.

Anteckning

Bring Your Own Storage stöds endast med ARM-mall eller REST API distributioner av definitionen för det hanterade programmet.

Välj ditt lagringskonto

Du måste skapa ett lagringskonto som ska innehålla definitionen för det hanterade programmet för användning med tjänstkatalogen.

Kopiera lagringskontots resurs-ID. Den kommer att användas senare när du distribuerar definitionen.

Ange rolltilldelningen för "Appliance Resource Provider" (Resursprovider för installation) i ditt lagringskonto

Innan definitionen för det hanterade programmet kan distribueras till ditt lagringskonto tilldelar du rollen Deltagare till användaren av resursprovidern för installationen i omfånget för lagringskontot. Med den här tilldelningen kan identiteten skriva definitionsfiler till lagringskontots container.

Detaljerade anvisningar finns i Tilldela Azure-roller med hjälp av Azure Portal.

Distribuera definitionen för det hanterade programmet med en ARM-mall

Använd följande ARM-mall för att distribuera det paketerade hanterade programmet som en ny definition för hanterade program i tjänstkatalogen vars definitionsfiler lagras och underhålls i ditt eget lagringskonto:

{
  "$schema": "http://schema.management.azure.com/schemas/2019-04-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": "2020-08-21-preview",
      "name": "[variables('managedApplicationDefinitionName')]",
      "location": "[parameters('location')]",
      "properties": {
        "lockLevel": "[variables('lockLevel')]",
        "description": "[variables('description')]",
        "displayName": "[variables('displayName')]",
        "packageFileUri": "[variables('packageFileUri')]",
        "storageAccountId": "[variables('defLocation')]"
      }
    }
  ],
  "outputs": {}
}

Vi har lagt till en ny egenskap med namnet i dina egenskaper och anger det lagringskonto-ID som du vill storageAccountId lagra definitionen i som dess applicationDefinitions värde:

Du kan kontrollera att programdefinitionsfilerna sparas i ditt angivna lagringskonto i en container med namnet applicationDefinitions .

Anteckning

För ökad säkerhet kan du skapa en definition för hanterade program som lagrar den i en Azure Storage-kontoblob där kryptering är aktiverat. Definitionsinnehållet krypteras via lagringskontots krypteringsalternativ. Endast användare med behörighet till filen kan se definitionen i tjänstkatalogen.

Kontrollera att användare kan se din definition

Du har åtkomst till definitionen för hanterade program, men du vill kontrollera att andra användare i din organisation kan komma åt den. Ge dem minst rollen Läsare på definitionen. De kan ha ärvt den här åtkomstnivån från prenumerationen eller resursgruppen. Information om hur du kontrollerar vem som har åtkomst till definitionen och lägger till användare eller grupper finns i Tilldela Azure-roller med hjälp av Azure Portal.

Nästa steg

Du har publicerat definitionen av det hanterade programmet. Nu ska du lära dig hur du distribuerar en instans av den definitionen.