빠른 시작: 관리되는 애플리케이션 정의 만들기 및 게시Quickstart: Create and publish a managed application definition

이 빠른 시작에서는 Azure Managed Applications를 사용하는 방법을 소개합니다.This quickstart provides an introduction to working with Azure Managed Applications. 조직의 구성원을 위한 관리형 애플리케이션을 만들고 게시할 수 있습니다.You can create and publish a managed application that is intended for members of your organization.

관리형 애플리케이션을 서비스 카탈로그에 게시하려면 다음을 수행해야 합니다.To publish a managed application to your service catalog, you must:

  • 관리되는 애플리케이션과 함께 배포할 리소스를 정의하는 템플릿을 만듭니다.Create a template that defines the resources to deploy with the managed application.
  • 관리 되는 애플리케이션을 배포할 때 포털에 대한 사용자 인터페이스 요소를 정의합니다.Define the user interface elements for the portal when deploying the managed application.
  • 필요한 템플릿 파일이 포함된 .zip 패키지를 만듭니다.Create a .zip package that contains the required template files.
  • 사용자의 구독에 속한 리소스 그룹에 액세스해야 하는 사용자, 그룹 또는 애플리케이션을 결정합니다.Decide which user, group, or application needs access to the resource group in the user's subscription.
  • .zip 패키지를 나타내고 ID에 대한 액세스를 요청하는 관리형 애플리케이션 정의를 만듭니다.Create the managed application definition that points to the .zip package and requests access for the identity.

ARM 템플릿 만들기Create the ARM template

모든 관리되는 애플리케이션 정의에는 mainTemplate.json 이라는 파일이 포함됩니다.Every managed application definition includes a file named mainTemplate.json. 여기에서 표시할 Azure 리소스를 정의합니다.In it, you define the Azure resources to deploy. 템플릿은 일반 ARM 템플릿과 차이가 없습니다.The template is no different than a regular ARM template.

이름이 mainTemplate.json 인 파일을 만듭니다.Create a file named mainTemplate.json. 이름은 대/소문자를 구분합니다.The name is case-sensitive.

파일에 다음 JSON을 추가합니다.Add the following JSON to your file. 스토리지 계정을 만들기 위한 매개 변수를 정의하고 스토리지 계정의 속성을 지정합니다.It defines the parameters for creating a storage account, and specifies the properties for the storage account.

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

mainTemplate.json 파일을 저장합니다.Save the mainTemplate.json file.

만들기 환경 정의Define your create experience

게시자는 관리형 애플리케이션을 만들기 위한 포털 환경을 정의합니다.As a publisher, you define the portal experience for creating the managed application. createUiDefinition.json 파일은 포털 인터페이스를 생성합니다.The createUiDefinition.json file generates the portal interface. 사용자는 드롭다운, 텍스트 상자 및 암호 상자를 포함한 컨트롤 요소를 사용하여 각 매개 변수에 대한 입력을 제공하는 방법을 정의합니다.You define how users provide input for each parameter using control elements including drop-downs, text boxes, and password boxes.

이름이 createUiDefinition.json 인 파일을 만듭니다(이 이름은 대/소문자를 구분함).Create a file named createUiDefinition.json (This name is case-sensitive)

다음 시작 JSON을 파일에 추가하고 저장합니다.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()]"
    }
  }
}

자세히 알아보려면 CreateUiDefinition 시작을 참조하세요.To learn more, see Get started with CreateUiDefinition.

파일을 패키지로 만들기Package the files

이름이 app.zip.zip 파일에 두 개의 파일을 추가합니다.Add the two files to a .zip file named app.zip. 두 파일은 .zip 파일 의 루트 수준에 있어야 합니다.The two files must be at the root level of the .zip file. 폴더에 배치하는 경우 관리되는 애플리케이션 정의를 만들 때 필요한 파일이 없음을 나타내는 오류가 나타납니다.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 the package to an accessible location from where it can be consumed. 스토리지 계정의 고유한 이름을 제공해야 합니다.You'll need to provide a unique name for the storage account.

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

관리형 애플리케이션 정의 만들기Create the managed application definition

Azure Active Directory 사용자 그룹 또는 애플리케이션 만들기Create an Azure Active Directory user group or application

다음 단계는 고객의 리소스를 관리하기 위한 사용자 그룹, 사용자 또는 애플리케이션을 선택하는 것입니다.The next step is to select a user group, user, or application for managing the resources for the customer. 이 ID에는 할당된 역할에 따라 관리되는 리소스 그룹에 대한 권한이 있습니다.This identity has permissions on the managed resource group according to the role that is assigned. 역할은 소유자 또는 기여자 같은 Azure 기본 제공 역할입니다.The role can be any Azure built-in role like Owner or Contributor. 새 Active Directory 사용자 그룹을 만들려면 그룹을 만들고 Azure Active Directory에 구성원 추가를 참조하세요.To create a new Active Directory user group, see Create a group and add members in Azure Active Directory.

리소스 관리에 사용할 사용자 그룹의 개체 ID가 필요합니다.You need the object ID of the user group to use for managing the resources.

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

역할 정의 ID 가져오기Get the role definition ID

다음으로 사용자, 사용자 그룹 또는 애플리케이션에 대한 액세스 권한을 부여하려는 Azure 기본 제공 역할에 대한 역할 정의 ID가 필요합니다.Next, you need the role definition ID of the Azure built-in role you want to grant access to the user, user group, or application. 일반적으로 소유자 또는 참가자 또는 읽기 권한자 역할을 사용합니다.Typically, you use the Owner or Contributor or Reader role. 다음 명령은 소유자 역할에 대한 역할 정의 ID를 가져오는 방법을 보여 줍니다.The following command shows how to get the role definition ID for the Owner role:

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

관리형 애플리케이션 정의 만들기Create the managed application definition

관리되는 애플리케이션 정의를 저장하기 위한 리소스 그룹이 아직 없는 경우 지금 새로 만듭니다.If you don't already have a resource group for storing your managed application definition, create one now:

New-AzResourceGroup -Name appDefinitionGroup -Location westcentralus

이제 관리형 애플리케이션 정의 리소스를 만듭니다.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

명령이 완료되면 리소스 그룹에 관리되는 애플리케이션 정의가 있습니다.When the command completes, you have a managed application definition in your resource group.

앞의 예제에서 사용된 몇 가지 매개 변수는 다음과 같습니다.Some of the parameters used in the preceding example are:

  • 리소스 그룹: 관리형 애플리케이션 정의를 만든 리소스 그룹의 이름입니다.resource group: The name of the resource group where the managed application definition is created.
  • 잠금 수준: 관리되는 리소스 그룹에 배치하는 잠금 유형입니다.lock level: The type of lock placed on the managed resource group. 고객이 이 리소스 그룹에서 바람직하지 않은 작업을 수행할 수 없게 합니다.It prevents the customer from performing undesirable operations on this resource group. 현재 지원되는 유일한 잠금 수준은 ReadOnly입니다.Currently, ReadOnly is the only supported lock level. ReadOnly를 지정하는 경우 고객은 관리되는 리소스 그룹에 있는 리소스만 읽을 수 있습니다.When ReadOnly is specified, the customer can only read the resources present in the managed resource group. 관리되는 리소스 그룹에 대한 액세스 권한이 부여된 게시자 ID는 잠금에서 제외됩니다.The publisher identities that are granted access to the managed resource group are exempt from the lock.
  • 권한 부여: 관리되는 리소스 그룹에 권한을 부여하는 데 사용되는 보안 주체 ID 및 역할 정의 ID를 설명합니다.authorizations: Describes the principal ID and the role definition ID that are used to grant permission to the managed resource group. <principalId>:<roleDefinitionId> 형식으로 지정됩니다.It's specified in the format of <principalId>:<roleDefinitionId>. 둘 이상의 값이 필요한 경우 <principalId1>:<roleDefinitionId1>,<principalId2>:<roleDefinitionId2> 형식으로 지정합니다.If more than one value is needed, specify them in the form <principalId1>:<roleDefinitionId1>,<principalId2>:<roleDefinitionId2>. 값은 쉼표로 구분됩니다.The values are separated by a comma.
  • 패키지 파일 URI: 필요한 파일이 포함되어 있는 .zip 패키지의 위치입니다.package file URI: The location of a .zip package that contains the required files.

관리형 애플리케이션 정의에 대한 사용자 고유의 스토리지 가져오기Bring your own storage for the managed application definition

생성 시 사용자가 제공한 스토리지 계정 내에 관리형 애플리케이션 정의를 저장하도록 선택하여 해당 위치와 액세스를 사용자가 자신의 규정 요구에 맞도록 완벽하게 관리할 수 있습니다.You can choose to store your managed application definition within a storage account provided by you during creation so that its location and access can be fully managed by you for your regulatory needs.

참고

사용자 고유의 스토리지 가져오기는 ARM 템플릿 또는 관리형 애플리케이션 정의의 REST API 배포에서만 지원됩니다.Bring your own storage is only supported with ARM template or REST API deployments of the managed application definition.

사용자의 스토리지 계정을 선택합니다.Select your storage account

서비스 카탈로그와 함께 사용하기 위해 관리형 애플리케이션 정의를 포함할 스토리지 계정을 만들어야 합니다.You must create a storage account to contain your managed application definition for use with Service Catalog.

스토리지 계정의 리소스 ID를 복사합니다.Copy the storage account's resource ID. 나중에 정의를 배포할 때 사용됩니다.It will be used later when deploying the definition.

스토리지 계정에서 “어플라이언스 리소스 공급자”에 대한 역할 할당을 설정합니다.Set the role assignment for "Appliance Resource Provider" in your storage account

스토리지 계정에 관리형 애플리케이션 정의를 배포하기 전에 어플라이언스 리소스 공급자 역할에 대한 기여자 권한을 부여하여 스토리지 계정의 컨테이너에 정의 파일을 쓸 수 있도록 해야 합니다.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. Azure Portal에서 스토리지 계정으로 이동합니다.In the Azure portal, navigate to your storage account.
  2. 액세스 제어(IAM) 를 선택하여 스토리지 계정에 대한 액세스 제어 설정을 표시합니다.Select Access control (IAM) to display the access control settings for the storage account. 역할 할당 탭을 선택하여 역할 할당 목록을 봅니다.Select the Role assignments tab to see the list of role assignments.
  3. 역할 할당 추가 창에서 기여자 역할을 선택합니다.In the Add role assignment window, select the Contributor role.
  4. 액세스 할당 필드에서 Azure AD 사용자, 그룹 또는 서비스 주체 를 선택합니다.From the Assign access to field, select Azure AD user, group, or service principal.
  5. 선택 에서 어플라이언스 리소스 공급자 역할을 검색하여 선택합니다.Under Select, search for Appliance Resource Provider role and select it.
  6. 역할 할당을 저장합니다.Save the role assignment.

ARM 템플릿을 사용하여 관리형 애플리케이션 정의 배포Deploy the managed application definition with an ARM template

다음 ARM 템플릿을 사용하여 패키지된 관리형 애플리케이션을 서비스 카탈로그에 새 관리형 애플리케이션 정의로 배포합니다. 정의 파일은 해당 스토리지 계정에 저장되고 유지 관리됩니다.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/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": {}
}

applicationDefinitions 속성에 storageAccountId라는 새 속성을 추가하고 정의를 해당 값으로 저장할 스토리지 계정 ID를 제공합니다.We have added a new property named storageAccountId to your applicationDefinitions properties and provide storage account ID you wish to store your definition in as its value:

애플리케이션 정의 파일이 applicationDefinitions라는 컨테이너에 제공된 스토리지 계정에 저장되어 있는지 확인할 수 있습니다.You can verify that the application definition files are saved in your provided storage account in a container titled applicationDefinitions.

참고

보안 강화를 위해 관리형 애플리케이션 정의를 만들어 암호화를 사용하도록 설정된 Azure Storage 계정 Blob에 저장할 수 있습니다.For added security, you can create a managed applications definition store it in an Azure storage account blob where encryption is enabled. 정의 콘텐츠는 스토리지 계정의 암호화 옵션을 통해 암호화됩니다.The definition contents are encrypted through the storage account's encryption options. 파일에 대한 권한이 있는 사용자만 서비스 카탈로그의 정의를 볼 수 있습니다.Only users with permissions to the file can see the definition in Service Catalog.

사용자가 정의를 볼 수 있는지 확인합니다.Make sure users can see your definition

사용자가 관리되는 애플리케이션 정의에 액세스할 수 있지만 조직의 다른 사용자도 액세스할 수 있는 것이 좋습니다.You have access to the managed application definition, but you want to make sure other users in your organization can access it. 정의에서 최소한 읽기 역할을 부여합니다.Grant them at least the Reader role on the definition. 구독 또는 리소스 그룹에서 이 수준의 액세스를 상속받을 수 있습니다.They may have inherited this level of access from the subscription or resource group. 정의에 대한 액세스 권한이 있는 사용자를 확인하고 사용자 또는 그룹을 추가하려면 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.To check who has access to the definition and add users or groups, see Assign Azure roles using the Azure portal.

다음 단계Next steps

관리되는 애플리케이션 정의를 게시했습니다.You've published the managed application definition. 이제 해당 정의의 인스턴스를 배포하는 방법을 알아보세요.Now, learn how to deploy an instance of that definition.