Udostępnij za pośrednictwem


Szybki start: tworzenie i publikowanie definicji aplikacji zarządzanej platformy Azure

Ten przewodnik Szybki start zawiera wprowadzenie do korzystania z własnego magazynu (BYOS) dla aplikacji zarządzanej platformy Azure. Utworzysz i opublikujesz definicję aplikacji zarządzanej w katalogu usług dla członków organizacji. Jeśli używasz własnego konta magazynu, definicja aplikacji zarządzanej może przekroczyć limit 120 MB katalogu usług.

Aby opublikować definicję aplikacji zarządzanej w katalogu usług, wykonaj następujące zadania:

  • Utwórz szablon usługi Azure Resource Manager (szablon arm), który definiuje zasoby platformy Azure wdrożone przez aplikację zarządzaną.
  • Zdefiniuj elementy interfejsu użytkownika portalu, stosowane podczas wdrażania aplikacji zarządzanej.
  • Utwórz pakiet .zip zawierający wymagane pliki JSON.
  • Utwórz konto magazynu, na którym jest przechowywana definicja aplikacji zarządzanej.
  • Wdróż definicję aplikacji zarządzanej na własnym koncie magazynu, aby była dostępna w katalogu usług.

Jeśli definicja aplikacji zarządzanej jest mniejsza niż 120 MB i nie chcesz używać własnego konta magazynu, przejdź do przewodnika Szybki start: tworzenie i publikowanie definicji aplikacji zarządzanej platformy Azure.

Możesz użyć Bicep do opracowania definicji aplikacji zarządzanej, ale musi zostać przekonwertowana na kod JSON szablonu usługi ARM, zanim będzie można opublikować definicję na platformie Azure. Aby uzyskać więcej informacji, przejdź do przewodnika Szybki start: tworzenie i publikowanie definicji aplikacji zarządzanej platformy Azure za pomocą aplikacji Bicep.

Możesz również użyć narzędzia Bicep, aby wdrożyć definicję aplikacji zarządzanej z katalogu usług. Aby uzyskać więcej informacji, przejdź do przewodnika Szybki start: wdrażanie definicji aplikacji zarządzanej platformy Azure za pomocą narzędzia Bicep.

Wymagania wstępne

Do ukończenia tego przewodnika Szybki start potrzebne są następujące elementy:

Tworzenie szablonu usługi ARM

Każda definicja aplikacji zarządzanej zawiera plik o nazwie mainTemplate.json. Szablon definiuje zasoby platformy Azure do wdrożenia i nie różni się od zwykłego szablonu usługi ARM.

Otwórz program Visual Studio Code, utwórz plik z nazwą uwzględniającą wielkość liter mainTemplate.json i zapisz go.

Dodaj następujący kod JSON i zapisz plik. Definiuje ona zasoby aplikacji zarządzanej w celu wdrożenia usługi App Service, planu usługi App Service i konta magazynu.

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

Definiowanie środowiska portalu

Jako wydawca definiujesz środowisko portalu w celu utworzenia aplikacji zarządzanej. Plik createUiDefinition.json generuje interfejs użytkownika portalu. Definiujesz sposób, w jaki użytkownicy udostępniają dane wejściowe dla każdego parametru przy użyciu elementów sterujących, takich jak listy rozwijane i pola tekstowe.

W tym przykładzie interfejs użytkownika monituje o wprowadzenie prefiksu nazwy usługi App Service i nazwy planu usługi App Service. Podczas wdrażania mainTemplate.json appServiceName zmienne używają uniqueString funkcji do dołączania 13-znakowego ciągu do prefiksu nazwy, więc nazwa jest globalnie unikatowa na platformie Azure.

Otwórz program Visual Studio Code, utwórz plik z nazwą uwzględniającą wielkość liter createUiDefinition.json i zapisz go.

Dodaj następujący kod JSON do pliku i zapisz go.

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

Aby dowiedzieć się więcej, przejdź do tematu Wprowadzenie do metody CreateUiDefinition.

Pakowanie plików

Dodaj dwa pliki do pliku pakietu o nazwie app.zip. Dwa pliki muszą znajdować się na poziomie głównym pliku .zip . Jeśli pliki znajdują się w folderze, podczas tworzenia definicji aplikacji zarządzanej zostanie wyświetlony błąd wskazujący, że wymagane pliki nie są obecne.

Przekaż app.zip do konta usługi Azure Storage, aby można było go użyć podczas wdrażania definicji aplikacji zarządzanej. Nazwa konta magazynu musi być globalnie unikatowa na platformie Azure, a długość musi zawierać od 3 do 24 znaków z małymi literami i cyframi. W poleceniu zastąp symbol zastępczy <pkgstorageaccountname> zawierający nawiasy kątowe (<>), unikatową nazwą konta magazynu.

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

Zmienna $pkgstorageparms używa splatting programu PowerShell, aby zwiększyć czytelność wartości parametrów używanych w poleceniu w celu utworzenia nowego konta magazynu. Splatting jest używany w innych poleceniach programu PowerShell, które używają wielu wartości parametrów.

Po utworzeniu konta magazynu dodaj przypisanie roli Współautor danych obiektu blob usługi Storage do zakresu konta magazynu. Przypisz dostęp do konta użytkownika Microsoft Entra. W zależności od poziomu dostępu na platformie Azure może być konieczne uzyskanie innych uprawnień przypisanych przez administratora. Aby uzyskać więcej informacji, zobacz Przypisywanie roli platformy Azure w celu uzyskania dostępu do danych obiektów blob i Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Po dodaniu roli do konta magazynu aktywowanie na platformie Azure może potrwać kilka minut. Następnie możesz utworzyć kontekst potrzebny do utworzenia kontenera i przekazania pliku.

$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

Użyj następującego polecenia, aby zapisać identyfikator URI pliku pakietu w zmiennej o nazwie packageuri. Wartość zmiennej jest używana podczas wdrażania definicji aplikacji zarządzanej.

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

Używanie własnego magazynu dla definicji aplikacji zarządzanej

Definicję aplikacji zarządzanej można przechowywać na własnym koncie magazynu, aby można było zarządzać jej lokalizacją i dostępem zgodnie z potrzebami prawnymi organizacji. Użycie własnego konta magazynu umożliwia posiadanie aplikacji, która przekracza limit 120 MB dla definicji aplikacji zarządzanej katalogu usług.

Uwaga

Funkcja Bring Your Own Storage jest obsługiwana tylko w przypadku wdrożeń szablonu usługi ARM lub interfejsu API REST definicji aplikacji zarządzanej.

Tworzenie konta magazynu

Utwórz konto magazynu dla definicji aplikacji zarządzanej. Nazwa konta magazynu musi być globalnie unikatowa na platformie Azure, a długość musi zawierać od 3 do 24 znaków z małymi literami i cyframi.

W tym przykładzie zostanie utworzona nowa grupa zasobów o nazwie byosDefinitionStorageGroup. W poleceniu zastąp symbol zastępczy <byosaccountname> zawierający nawiasy kątowe (<>), unikatową nazwą konta magazynu.

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

Po utworzeniu konta magazynu dodaj przypisanie roli Współautor danych obiektu blob usługi Storage do zakresu konta magazynu. Przypisz dostęp do konta użytkownika Microsoft Entra. Będziesz potrzebować dostępu do kroku w dalszej części procesu.

Po dodaniu roli do konta magazynu aktywowanie na platformie Azure może potrwać kilka minut. Następnie możesz utworzyć kontekst potrzebny do utworzenia kontenera i przekazania pliku.

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

Użyj następującego polecenia, aby zapisać identyfikator zasobu konta magazynu w zmiennej o nazwie byosstorageid. Wartość zmiennej jest używana podczas wdrażania definicji aplikacji zarządzanej.

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

Ustawianie przypisania roli dla konta magazynu

Przed wdrożeniem definicji aplikacji zarządzanej na koncie magazynu przypisz rolę Współautor do użytkownika dostawcy zasobów urządzenia w zakresie konta magazynu. To przypisanie umożliwia zapisywanie plików definicji tożsamości w kontenerze konta magazynu.

Zmienne umożliwiają skonfigurowanie przypisania roli. W tym przykładzie użyto zmiennej $byosstorageid utworzonej w poprzednim kroku i utworzono zmienną $arpid .

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

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

Dostawca zasobów urządzenia jest jednostką usługi w dzierżawie firmy Microsoft Entra. W witrynie Azure Portal możesz sprawdzić, czy została zarejestrowana, przechodząc do aplikacji firmy Microsoft Entra ID>Dla przedsiębiorstw i zmieniając filtr wyszukiwania na Aplikacje firmy Microsoft. Wyszukaj dostawcę zasobów urządzenia. Jeśli nie zostanie znaleziony, zarejestruj dostawcę Microsoft.Solutions zasobów.

Pobieranie identyfikatora grupy i identyfikatora definicji roli

Następnym krokiem jest wybranie użytkownika, grupy zabezpieczeń lub aplikacji do zarządzania zasobami dla klienta. Ta tożsamość ma uprawnienia do zarządzanej grupy zasobów zgodnie z przypisaną rolą. Rola może być dowolną wbudowaną rolą platformy Azure, na przykład właścicielem lub współautorem.

W tym przykładzie użyto grupy zabezpieczeń, a Twoje konto Microsoft Entra powinno być członkiem grupy. Aby uzyskać identyfikator obiektu grupy, zastąp symbol zastępczy <managedAppDemo> , w tym nawiasy kątowe (<>), nazwą grupy. Wartość zmiennej jest używana podczas wdrażania definicji aplikacji zarządzanej.

Aby utworzyć nową grupę firmy Microsoft Entra, przejdź do sekcji Zarządzanie grupami i członkostwem w grupach firmy Microsoft.

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

Następnie uzyskaj identyfikator definicji roli wbudowanej roli platformy Azure, której chcesz udzielić dostępu użytkownikowi, grupie lub aplikacji. Wartość zmiennej jest używana podczas wdrażania definicji aplikacji zarządzanej.

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

Tworzenie szablonu wdrożenia definicji

Użyj pliku Bicep, aby wdrożyć definicję aplikacji zarządzanej w katalogu usług. Po wdrożeniu pliki definicji są przechowywane na własnym koncie magazynu.

Otwórz program Visual Studio Code, utwórz plik o nazwie deployDefinition.bicep i zapisz go.

Dodaj następujący kod Bicep i zapisz plik.

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

Aby uzyskać więcej informacji na temat właściwości szablonu, zobacz Microsoft.Solutions/applicationDefinitions.

Grupa lockLevel zasobów zarządzanych uniemożliwia klientowi wykonywanie niepożądanych operacji w tej grupie zasobów. ReadOnly Obecnie jest jedynym obsługiwanym poziomem blokady. ReadOnly określa, że klient może odczytywać tylko zasoby obecne w zarządzanej grupie zasobów. Tożsamości wydawcy, którym udzielono dostępu do zarządzanej grupy zasobów, są wykluczone z poziomu blokady.

Tworzenie pliku parametrów

Szablon wdrożenia definicji aplikacji zarządzanej wymaga danych wejściowych dla kilku parametrów. Polecenie wdrożenia wyświetla monit o wartości lub możesz utworzyć plik parametrów dla wartości. W tym przykładzie użyjemy pliku parametrów, aby przekazać wartości parametrów do polecenia wdrożenia.

W programie Visual Studio Code utwórz nowy plik o nazwie deployDefinition-parameters.bicepparam i zapisz go.

Dodaj następujący kod do pliku parametrów i zapisz go. Następnie zastąp nawiasy <placeholder values> kątowe (<>), swoimi wartościami.

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>'

W poniższej tabeli opisano wartości parametrów definicji aplikacji zarządzanej.

Parametr Wartość
managedApplicationDefinitionName Nazwa definicji aplikacji zarządzanej. W tym przykładzie użyj metody sampleByosManagedApplication.
definitionStorageResourceID Identyfikator zasobu dla konta magazynu, na którym jest przechowywana definicja. byosstorageid Użyj wartości zmiennej.
packageFileUri Wprowadź identyfikator URI pliku pakietu .zip . packageuri Użyj wartości zmiennej.
principalId Identyfikator podmiotu zabezpieczeń wydawców, który potrzebuje uprawnień do zarządzania zasobami w zarządzanej grupie zasobów. principalid Użyj wartości zmiennej.
roleId Identyfikator roli uprawnień do zarządzanej grupy zasobów. Na przykład Właściciel, Współautor, Czytelnik. roleid Użyj wartości zmiennej.

Aby uzyskać wartości zmiennych:

  • Azure PowerShell: w programie PowerShell wpisz $variableName , aby wyświetlić wartość zmiennej.
  • Interfejs wiersza polecenia platformy Azure: w powłoce Bash wpisz echo $variableName , aby wyświetlić wartość zmiennej.

Wdrażanie definicji

Po wdrożeniu definicji aplikacji zarządzanej staje się ona dostępna w katalogu usług. Ten proces nie wdraża zasobów aplikacji zarządzanej.

Utwórz grupę zasobów o nazwie byosAppDefinitionGroup i wdróż definicję aplikacji zarządzanej na koncie magazynu.

New-AzResourceGroup -Name byosAppDefinitionGroup -Location westus

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

New-AzResourceGroupDeployment @deployparms

Weryfikowanie magazynu plików definicji

Podczas wdrażania właściwość szablonu storageAccountId używa identyfikatora zasobu konta magazynu i tworzy nowy kontener o nazwie applicationdefinitionsz uwzględnieniem wielkości liter. Pliki z pakietu .zip określonego podczas wdrażania są przechowywane w nowym kontenerze.

Następujące polecenia umożliwiają sprawdzenie, czy pliki definicji aplikacji zarządzanej są zapisywane w kontenerze konta magazynu.

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

Uwaga

W przypadku dodanych zabezpieczeń można utworzyć definicję aplikacji zarządzanych i przechowywać ją w obiekcie blob konta usługi Azure Storage, w którym jest włączone szyfrowanie. Zawartość definicji jest szyfrowana za pośrednictwem opcji szyfrowania konta magazynu. Tylko użytkownicy z uprawnieniami do pliku mogą uzyskiwać dostęp do definicji w katalogu usług.

Aktualizowanie zabezpieczeń konta magazynu

Po pomyślnym wdrożeniu, aby zwiększyć bezpieczeństwo konta magazynu, wyłącz właściwość klucza dostępu współdzielonego. Po utworzeniu konta magazynu dodano przypisanie roli współautora danych obiektu blob usługi Storage, które umożliwia dostęp do kontenera i obiektów blob bez używania kluczy magazynu.

Aby przejrzeć i zaktualizować ustawienia klucza dostępu współdzielonego konta magazynu, użyj następujących poleceń:

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

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

Upewnij się, że użytkownicy mogą uzyskiwać dostęp do definicji

Masz dostęp do definicji aplikacji zarządzanej, ale chcesz mieć pewność, że inni użytkownicy w Twojej organizacji również mają do niej dostęp. Z definicji przyznaj im co najmniej rolę czytelnika. Mogą one dziedziczyć ten poziom dostępu z subskrypcji lub grupy zasobów. Aby sprawdzić, kto ma dostęp do definicji i dodać użytkowników lub grupy, przejdź do sekcji Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.

Czyszczenie zasobów

Jeśli zamierzasz wdrożyć definicję, przejdź do sekcji Następne kroki , która zawiera linki do artykułu, aby wdrożyć definicję.

Jeśli skończysz z definicją aplikacji zarządzanej, możesz usunąć utworzone grupy zasobów o nazwie packageStorageGroup, byosDefinitionStorageGroup i byosAppDefinitionGroup.

Polecenie wyświetla monit o potwierdzenie, że chcesz usunąć grupę zasobów.

Remove-AzResourceGroup -Name packageStorageGroup

Remove-AzResourceGroup -Name byosDefinitionStorageGroup

Remove-AzResourceGroup -Name byosAppDefinitionGroup

Następne kroki

Opublikowano definicję aplikacji zarządzanej. Teraz możesz dowiedzieć się, jak wdrożyć wystąpienie tej definicji.