Dela via


Snabbstart: Ta med din egen lagring för att skapa och publicera en Azure Managed Application-definition

Den här snabbstarten ger en introduktion till BYOS (Bring Your Own Storage) för ett Azure-hanterat program. Du skapar och publicerar en definition av hanterade program i tjänstkatalogen för medlemmar i organisationen. När du använder ditt eget lagringskonto kan definitionen av det hanterade programmet överskrida tjänstkatalogens gräns på 120 MB.

Gör följande för att publicera en definition för hanterade program i tjänstkatalogen:

  • Skapa en Azure Resource Manager-mall (ARM-mall) som definierar de Azure-resurser som distribueras av 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 JSON-filer som krävs.
  • Skapa ett lagringskonto där du lagrar definitionen för det hanterade programmet.
  • Distribuera definitionen för det hanterade programmet till ditt eget lagringskonto så att det är tillgängligt i tjänstkatalogen.

Om definitionen för det hanterade programmet är mindre än 120 MB och du inte vill använda ditt eget lagringskonto går du till Snabbstart: Skapa och publicera en Azure Managed Application-definition.

Du kan använda Bicep för att utveckla en definition för hanterade program, men den måste konverteras till ARM-mallens JSON innan du kan publicera definitionen i Azure. Mer information finns i Snabbstart: Använd Bicep för att skapa och publicera en Azure Managed Application-definition.

Du kan också använda Bicep för att distribuera en definition av hanterade program från tjänstkatalogen. Mer information finns i Snabbstart: Använd Bicep för att distribuera en Azure Managed Application-definition.

Förutsättningar

För att slutföra den här snabbstarten behöver du följande:

Skapa ARM-mallen

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

Öppna Visual Studio Code, skapa en fil med skiftlägeskänsligt namn mainTemplate.json och spara den.

Lägg till följande JSON och spara filen. Den definierar det hanterade programmets resurser för att distribuera en App Service, App Service-plan och ett lagringskonto.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "appServicePlanName": {
      "type": "string",
      "maxLength": 40,
      "metadata": {
        "description": "App Service plan name."
      }
    },
    "appServiceNamePrefix": {
      "type": "string",
      "maxLength": 47,
      "metadata": {
        "description": "App Service name prefix."
      }
    }
  },
  "variables": {
    "appServicePlanSku": "B1",
    "appServicePlanCapacity": 1,
    "appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
    "linuxFxVersion": "DOTNETCORE|8.0"
  },
  "resources": [
    {
      "type": "Microsoft.Web/serverfarms",
      "apiVersion": "2023-01-01",
      "name": "[parameters('appServicePlanName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[variables('appServicePlanSku')]",
        "capacity": "[variables('appServicePlanCapacity')]"
      },
      "kind": "linux",
      "properties": {
        "zoneRedundant": false,
        "reserved": true
      }
    },
    {
      "type": "Microsoft.Web/sites",
      "apiVersion": "2023-01-01",
      "name": "[variables('appServiceName')]",
      "location": "[parameters('location')]",
      "properties": {
        "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
        "httpsOnly": true,
        "redundancyMode": "None",
        "siteConfig": {
          "linuxFxVersion": "[variables('linuxFxVersion')]",
          "minTlsVersion": "1.2",
          "ftpsState": "Disabled"
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
      ]
    }
  ],
  "outputs": {
    "appServicePlan": {
      "type": "string",
      "value": "[parameters('appServicePlanName')]"
    },
    "appServiceApp": {
      "type": "string",
      "value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2023-01-01').defaultHostName]"
    }
  }
}

Definiera portalupplevelsen

Som utgivare definierar du portalupplevelsen för att skapa det hanterade programmet. Filen createUiDefinition.json genererar portalens användargränssnitt. Du definierar hur användare anger indata för varje parameter med hjälp av kontrollelement som listrutor och textrutor.

I det här exemplet uppmanar användargränssnittet dig att ange prefixet App Service-namn och App Service-planens namn. Under distributionen av mainTemplate.json appServiceName använder variablerna uniqueString funktionen för att lägga till en 13-teckenssträng i namnprefixet så att namnet är globalt unikt i Hela Azure.

Öppna Visual Studio Code, skapa en fil med skiftlägeskänsligt namn createUiDefinition.json och spara den.

Lägg till följande JSON-kod 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": "webAppSettings",
        "label": "Web App settings",
        "subLabel": {
          "preValidation": "Configure the web app settings",
          "postValidation": "Completed"
        },
        "elements": [
          {
            "name": "appServicePlanName",
            "type": "Microsoft.Common.TextBox",
            "label": "App Service plan name",
            "placeholder": "App Service plan name",
            "defaultValue": "",
            "toolTip": "Use alphanumeric characters or hyphens with a maximum of 40 characters.",
            "constraints": {
              "required": true,
              "regex": "^[a-z0-9A-Z-]{1,40}$",
              "validationMessage": "Only alphanumeric characters or hyphens are allowed, with a maximum of 40 characters."
            },
            "visible": true
          },
          {
            "name": "appServiceName",
            "type": "Microsoft.Common.TextBox",
            "label": "App Service name prefix",
            "placeholder": "App Service name prefix",
            "defaultValue": "",
            "toolTip": "Use alphanumeric characters or hyphens with minimum of 2 characters and maximum of 47 characters.",
            "constraints": {
              "required": true,
              "regex": "^[a-z0-9A-Z-]{2,47}$",
              "validationMessage": "Only alphanumeric characters or hyphens are allowed, with a minimum of 2 characters and maximum of 47 characters."
            },
            "visible": true
          }
        ]
      }
    ],
    "outputs": {
      "location": "[location()]",
      "appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
      "appServiceNamePrefix": "[steps('webAppSettings').appServiceName]"
    }
  }
}

Mer information finns i Kom igång med CreateUiDefinition.

Paketera filerna

Lägg till de två filerna i en paketfil med namnet app.zip. De två filerna måste vara på rotnivån för .zip-filen. Om filerna finns i en mapp får du ett felmeddelande om att de filer som krävs inte finns när du skapar definitionen för det hanterade programmet.

Ladda upp app.zip till ett Azure Storage-konto så att du kan använda det när du distribuerar definitionen för det hanterade programmet. Lagringskontonamnet måste vara globalt unikt i Azure och längden måste vara 3–24 tecken med endast gemener och siffror. I kommandot ersätter du platshållaren <pkgstorageaccountname> inklusive vinkelparenteserna (<>) med ditt unika lagringskontonamn.

New-AzResourceGroup -Name packageStorageGroup -Location westus

$pkgstorageparms = @{
  ResourceGroupName = "packageStorageGroup"
  Name = "<pkgstorageaccountname>"
  Location = "westus"
  SkuName = "Standard_LRS"
  Kind = "StorageV2"
  MinimumTlsVersion = "TLS1_2"
  AllowBlobPublicAccess = $true
  AllowSharedKeyAccess = $false
}

$pkgstorageaccount = New-AzStorageAccount @pkgstorageparms

Variabeln $pkgstorageparms använder PowerShell-splatting för att förbättra läsbarheten för de parametervärden som används i kommandot för att skapa det nya lagringskontot. Splatting används i andra PowerShell-kommandon som använder flera parametervärden.

När du har skapat lagringskontot lägger du till rolltilldelningen Storage Blob Data Contributor i lagringskontots omfång. Tilldela åtkomst till ditt Microsoft Entra-användarkonto. Beroende på din åtkomstnivå i Azure kan du behöva andra behörigheter som tilldelats av administratören. Mer information finns i Tilldela en Azure-roll för åtkomst till blobdata och Tilldela Azure-roller med hjälp av Azure Portal.

När du har lagt till rollen i lagringskontot tar det några minuter att bli aktiv i Azure. Du kan sedan skapa den kontext som behövs för att skapa containern och ladda upp filen.

$pkgstoragecontext = New-AzStorageContext -StorageAccountName $pkgstorageaccount.StorageAccountName -UseConnectedAccount

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

$blobparms = @{
  File = "app.zip"
  Container = "appcontainer"
  Blob = "app.zip"
  Context = $pkgstoragecontext
}

Set-AzStorageBlobContent @blobparms

Använd följande kommando för att lagra paketfilens URI i en variabel med namnet packageuri. Du använder variabelns värde när du distribuerar definitionen för det hanterade programmet.

$packageuri=(Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $pkgstoragecontext).ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri

Ta med din egen lagring för definitionen för det hanterade programmet

Du lagrar definitionen för ditt hanterade program i ditt eget lagringskonto så att dess plats och åtkomst kan hanteras av dig för organisationens regelbehov. Med ditt eget lagringskonto kan du ha ett program som överskrider gränsen på 120 MB för en tjänstkatalogs definition av hanterade program.

Kommentar

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

Skapa lagringskontot

Skapa lagringskontot för definitionen av det hanterade programmet. Lagringskontonamnet måste vara globalt unikt i Azure och längden måste vara 3–24 tecken med endast gemener och siffror.

I det här exemplet skapas en ny resursgrupp med namnet byosDefinitionStorageGroup. I kommandot ersätter du platshållaren <byosaccountname> inklusive vinkelparenteserna (<>) med ditt unika lagringskontonamn.

New-AzResourceGroup -Name byosDefinitionStorageGroup -Location westus

$byostorageparms = @{
  ResourceGroupName = "byosDefinitionStorageGroup"
  Name = "<byosaccountname>"
  Location = "westus"
  SkuName = "Standard_LRS"
  Kind = "StorageV2"
  MinimumTlsVersion = "TLS1_2"
  AllowBlobPublicAccess = $true
  AllowSharedKeyAccess = $true
}

$byosstorageaccount = New-AzStorageAccount @byostorageparms

När du har skapat lagringskontot lägger du till rolltilldelningen Storage Blob Data Contributor i lagringskontots omfång. Tilldela åtkomst till ditt Microsoft Entra-användarkonto. Du behöver åtkomst för ett steg senare i processen.

När du har lagt till rollen i lagringskontot tar det några minuter att bli aktiv i Azure. Du kan sedan skapa den kontext som behövs för att skapa containern och ladda upp filen.

$byosstoragecontext = New-AzStorageContext -StorageAccountName $byosstorageaccount.StorageAccountName -UseConnectedAccount

Använd följande kommando för att lagra lagringskontots resurs-ID i en variabel med namnet byosstorageid. Du använder variabelns värde när du distribuerar definitionen för det hanterade programmet.

$byosstorageid = (Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).Id

Ange rolltilldelningen för ditt lagringskonto

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

Du kan använda variabler för att konfigurera rolltilldelningen. I det här exemplet används variabeln $byosstorageid du skapade i föregående steg och variabeln $arpid skapas.

$arpid = (Get-AzADServicePrincipal -SearchString "Appliance Resource Provider").Id

New-AzRoleAssignment -ObjectId $arpid -RoleDefinitionName Contributor -Scope $byosstorageid

Resursprovidern för installationen är ett huvudnamn för tjänsten i din Microsoft Entra-klientorganisation. Från Azure Portal kan du kontrollera om det har registrerats genom att gå till Microsoft Entra ID>Enterprise-program och ändra sökfiltret till Microsoft Applications. Sök efter resursprovidern för installationen. Om den inte hittas registrerar du resursprovidern Microsoft.Solutions .

Hämta grupp-ID och rolldefinitions-ID

Nästa steg är att välja en användare, säkerhetsgrupp eller ett program för att hantera kundens resurser. Den här identiteten har behörigheter för den hanterade resursgruppen enligt den tilldelade rollen. Rollen kan vara valfri inbyggd Azure-roll som Ägare eller Deltagare.

I det här exemplet används en säkerhetsgrupp och ditt Microsoft Entra-konto bör vara medlem i gruppen. Om du vill hämta gruppens objekt-ID ersätter du platshållaren <managedAppDemo> inklusive vinkelparenteserna (<>) med gruppens namn. Du använder variabelns värde när du distribuerar definitionen för det hanterade programmet.

Om du vill skapa en ny Microsoft Entra-grupp går du till Hantera Microsoft Entra-grupper och gruppmedlemskap.

$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id

Hämta sedan rolldefinitions-ID:t för den inbyggda Azure-roll som du vill ge åtkomst till användaren, gruppen eller programmet. Du använder variabelns värde när du distribuerar definitionen för det hanterade programmet.

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

Skapa mallen för definitionsdistribution

Använd en Bicep-fil för att distribuera definitionen av det hanterade programmet i tjänstkatalogen. Efter distributionen lagras definitionsfilerna i ditt eget lagringskonto.

Öppna Visual Studio Code, skapa en fil med namnet deployDefinition.bicep och spara den.

Lägg till följande Bicep-kod och spara filen.

param location string = resourceGroup().location

@description('Name of the managed application definition.')
param managedApplicationDefinitionName string

@description('Resource ID for the bring your own storage account where the definition is stored.')
param definitionStorageResourceID string

@description('The URI of the .zip package file.')
param packageFileUri string

@description('Publishers Principal ID that needs permissions to manage resources in the managed resource group.')
param principalId string

@description('Role ID for permissions to the managed resource group.')
param roleId string

var definitionLockLevel = 'ReadOnly'
var definitionDisplayName = 'Sample BYOS managed application'
var definitionDescription = 'Sample BYOS managed application that deploys web resources'

resource managedApplicationDefinition 'Microsoft.Solutions/applicationDefinitions@2021-07-01' = {
  name: managedApplicationDefinitionName
  location: location
  properties: {
    lockLevel: definitionLockLevel
    description: definitionDescription
    displayName: definitionDisplayName
    packageFileUri: packageFileUri
    storageAccountId: definitionStorageResourceID
    authorizations: [
      {
        principalId: principalId
        roleDefinitionId: roleId
      }
    ]
  }
}

Mer information om mallens egenskaper finns i Microsoft.Solutions/applicationDefinitions.

lockLevel den hanterade resursgruppen hindrar kunden från att utföra oönskade åtgärder i den här resursgruppen. ReadOnly Är för närvarande den enda låsnivå som stöds. ReadOnly anger att kunden bara kan läsa de resurser som finns i den hanterade resursgruppen. De utgivaridentiteter som beviljas åtkomst till den hanterade resursgruppen är undantagna från låsnivån.

Skapa parameterfilen

Distributionsmallen för den hanterade programdefinitionen behöver indata för flera parametrar. Distributionskommandot frågar efter värdena eller så kan du skapa en parameterfil för värdena. I det här exemplet använder vi en parameterfil för att skicka parametervärdena till distributionskommandot.

I Visual Studio Code skapar du en ny fil med namnet deployDefinition-parameters.bicepparam och sparar den.

Lägg till följande i parameterfilen och spara den. Ersätt sedan inklusive <placeholder values> vinkelparenteser (<>) med dina värden.

using './deployDefinition.bicep'

param managedApplicationDefinitionName = 'sampleByosManagedApplication'
param definitionStorageResourceID = '<placeholder for you BYOS storage account ID>'
param packageFileUri = '<placeholder for the packageFileUri>'
param principalId = '<placeholder for principalid value>'
param roleId = '<placeholder for roleid value>'

I följande tabell beskrivs parametervärdena för definitionen av det hanterade programmet.

Parameter Värde
managedApplicationDefinitionName Namnet på definitionen för det hanterade programmet. I det här exemplet använder du sampleByosManagedApplication.
definitionStorageResourceID Resurs-ID för lagringskontot där definitionen lagras. byosstorageid Använd variabelns värde.
packageFileUri Ange URI:n för din .zip-paketfil . packageuri Använd variabelns värde.
principalId Utgivarens huvudnamns-ID som behöver behörighet för att hantera resurser i den hanterade resursgruppen. principalid Använd variabelns värde.
roleId Roll-ID för behörigheter till den hanterade resursgruppen. Till exempel Ägare, Deltagare, Läsare. roleid Använd variabelns värde.

Så här hämtar du dina variabelvärden:

  • Azure PowerShell: I PowerShell skriver du $variableName för att visa en variabels värde.
  • Azure CLI: I Bash skriver du echo $variableName för att visa en variabels värde.

Distribuera definitionen

När du distribuerar definitionen för det hanterade programmet blir den tillgänglig i tjänstkatalogen. Den här processen distribuerar inte det hanterade programmets resurser.

Skapa en resursgrupp med namnet byosAppDefinitionGroup och distribuera definitionen av det hanterade programmet till ditt lagringskonto.

New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus

$deployparms = @{
  ResourceGroupName = "byosAppDefinitionGroup"
  TemplateFile = "deployDefinition.bicep"
  TemplateParameterFile = "deployDefinition-parameters.bicepparam"
  Name = "deployDefinition"
}

New-AzResourceGroupDeployment @deployparms

Verifiera lagring av definitionsfiler

Under distributionen använder mallens egenskap ditt lagringskontos resurs-ID och skapar en ny container med skiftlägeskänsligt storageAccountId namn applicationdefinitions. Filerna från det .zip paket som du angav under distributionen lagras i den nya containern.

Du kan använda följande kommandon för att kontrollera att definitionsfilerna för hanterade program sparas i lagringskontots container.

Get-AzStorageContainer -Name applicationdefinitions -Context $byosstoragecontext |
Get-AzStorageBlob | Select-Object -Property Name | Format-List

Kommentar

För ökad säkerhet kan du skapa en definition av hanterade program och lagra 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 komma åt definitionen i tjänstkatalogen.

Uppdatera säkerheten för lagringskontot

Inaktivera egenskapen för delad åtkomstnyckel för att förbättra lagringskontots säkerhet efter en lyckad distribution. När lagringskontot skapades lade du till en rolltilldelning för Storage Blob Data Contributor som ger dig åtkomst till containern och blobarna utan att använda lagringsnycklar.

Om du vill granska och uppdatera lagringskontots inställningar för delad åtkomstnyckel använder du följande kommandon:

(Get-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName).AllowSharedKeyAccess

Set-AzStorageAccount -ResourceGroupName $byosstorageaccount.ResourceGroupName -Name $byosstorageaccount.StorageAccountName -AllowSharedKeyAccess $false

Kontrollera att användarna kan komma åt 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. Om du vill kontrollera vem som har åtkomst till definitionen och lägga till användare eller grupper går du till Tilldela Azure-roller med hjälp av Azure Portal.

Rensa resurser

Om du ska distribuera definitionen fortsätter du med avsnittet Nästa steg som länkar till artikeln för att distribuera definitionen.

Om du är klar med definitionen för det hanterade programmet kan du ta bort de resursgrupper som du skapade med namnet packageStorageGroup, byosDefinitionStorageGroup och byosAppDefinitionGroup.

Kommandot uppmanar dig att bekräfta att du vill ta bort resursgruppen.

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name byosDefinitionStorageGroup

Remove-AzResourceGroup -Name byosAppDefinitionGroup

Nästa steg

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