Azure DevTest Labs의 랩에 랩 사용자 추가 자동화

Azure DevTest Labs를 사용하면 Azure Portal을 사용하여 셀프 서비스 개발 테스트 환경을 빠르게 만들 수 있습니다. 그러나 여러 팀과 여러 DevTest Labs 인스턴스가 있으면 만들기 프로세스를 자동화하면 시간을 절약할 수 있습니다. Azure Resource Manager 템플릿을 사용하면 랩, 랩 VM, 사용자 지정 이미지, 수식을 만들고 자동화된 방식으로 사용자를 추가할 수 있습니다. 이 문서에서는 특히 DevTest Labs 인스턴스에 사용자를 추가하는 데 중점을 둡니다.

랩에 사용자를 추가하려면 랩의 DevTest Labs 사용자 역할에 사용자를 추가합니다. 이 문서에서는 다음 방법 중 하나를 사용하여 랩에 사용자 추가를 자동화하는 방법을 보여 줍니다.

  • Azure Resource Manager 템플릿
  • Azure PowerShell cmdlet
  • Azure CLI

Azure 리소스 관리자 템플릿 사용

다음 샘플 Resource Manager 템플릿에서는 랩의 DevTest Labs 사용자 역할에 추가할 사용자를 지정합니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "principalId": {
      "type": "string",
      "metadata": {
        "description": "The objectId of the user, group, or service principal for the role."
      }
    },
    "labName": {
      "type": "string",
      "metadata": {
        "description": "The name of the lab instance to be created."
      }
    },
    "roleAssignmentGuid": {
      "type": "string",
      "metadata": {
        "description": "Guid to use as the name for the role assignment."
      }
    }
  },
  "variables": {
    "devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",
    "fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]",
    "roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"
  },
  "resources": [
    {
      "apiVersion": "2016-05-15",
      "type": "Microsoft.DevTestLab/labs",
      "name": "[parameters('labName')]",
      "location": "[resourceGroup().location]"
    },
    {
      "apiVersion": "2016-07-01",
      "type": "Microsoft.DevTestLab/labs/providers/roleAssignments",
      "name": "[variables('fullDevTestLabUserRoleName')]",
      "properties": {
        "roleDefinitionId": "[variables('devTestLabUserRoleId')]",
        "principalId": "[parameters('principalId')]",
        "scope": "[variables('roleScope')]"
      },
      "dependsOn": [
        "[resourceId('Microsoft.DevTestLab/labs', parameters('labName'))]"
      ]
    }
  ]
}

랩을 만드는 동일한 템플릿에서 역할을 할당하는 경우 역할 할당 리소스와 랩 간에 종속성을 추가해야 합니다. 자세한 정보는 Azure Resource Manager 템플릿에서 종속성 정의 문서를 참조하세요.

역할 할당 리소스 정보

역할 할당 리소스는 종류와 이름을 지정해야 합니다.

가장 먼저 주목해야 할 점은 리소스 종류가 리소스 그룹의 경우처럼 Microsoft.Authorization/roleAssignments가 아니라는 것입니다. 대신, 리소스 종류는 {provider-namespace}/{resource-type}/providers/roleAssignments 패턴을 따릅니다. 이 경우 리소스 종류는 Microsoft.DevTestLab/labs/providers/roleAssignments입니다.

역할 할당 이름 자체는 전역적으로 고유해야 합니다. 할당의 이름에는 {labName}/Microsoft.Authorization/{newGuid} 패턴이 사용됩니다. newGuid는 템플릿의 매개 변수 값입니다. 역할 할당 이름이 고유한지 확인합니다. GUID를 만드는 데 사용하는 템플릿 함수가 없으므로 GUID 생성기 도구를 사용하여 직접 GUID를 생성해야 합니다.

템플릿에서 역할 할당의 이름은 fullDevTestLabUserRoleName 변수로 정의됩니다. 템플릿에서 정확한 줄은 다음과 같습니다.

"fullDevTestLabUserRoleName": "[concat(parameters('labName'), '/Microsoft.Authorization/', parameters('roleAssignmentGuid'))]"

역할 할당 리소스 속성

역할 할당 자체는 세 가지 속성을 정의합니다. roleDefinitionId, principalIdscope가 필요합니다.

역할 정의

역할 정의 ID는 기존 역할 정의의 문자열 식별자입니다. 역할 ID의 형식은 /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}입니다.

구독 ID는 subscription().subscriptionId 템플릿 함수를 사용하여 확보합니다.

DevTest Labs User 기본 제공 역할의 역할 정의를 가져와야 합니다. DevTest Labs 사용자 역할의 GUID를 얻으려면 역할 할당 REST API 또는 Get-AzRoleDefinition cmdlet을 사용할 수 있습니다.

$dtlUserRoleDefId = (Get-AzRoleDefinition -Name "DevTest Labs User").Id

역할 ID는 변수 섹션에 정의되고 이름은 devTestLabUserRoleId입니다. 템플릿에서 역할 ID는 111111111-0000-0000-11111111111111111로 설정됩니다.

"devTestLabUserRoleId": "[concat('/subscriptions/', subscription().subscriptionId, '/providers/Microsoft.Authorization/roleDefinitions/111111111-0000-0000-11111111111111111')]",

보안 주체 ID

보안 주체 ID는 랩에 랩 사용자로 추가할 Active Directory 사용자, 그룹 또는 서비스 주체의 개체 ID입니다. 템플릿은 ObjectId를 매개 변수로 사용합니다.

Get-AzureRMADUser, [Get-AzureRMADGroup 또는 Get-AzureRMADServicePrincipal PowerShell cmdlets을 사용하여 ObjectId를 가져올 수 있습니다. 해당 cmdlet은 필요한 개체 ID인 ID 속성이 있는 단일 또는 Active Directory 개체 목록을 반환합니다. 다음 예제에서는 회사에서 단일 사용자의 개체 ID를 가져오는 방법을 보여 줍니다.

$userObjectId = (Get-AzureRmADUser -UserPrincipalName 'email@company.com').Id

Get-MgUser, Get-MgGroupGet-MgServicePrincipal을 포함하는 Microsoft Graph PowerShell cmdlet을 사용할 수도 있습니다.

범위

범위는 역할 할당을 적용해야 하는 리소스 또는 리소스 그룹을 지정합니다. 리소스의 경우 범위의 형식은 /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}입니다. 템플릿은 subscription().subscriptionId 함수를 사용하여 subscription-id 파트를 채우고 resourceGroup().name 템플릿 함수를 사용하여 resource-group-name 파트를 채웁니다. 이 함수를 사용하면 역할을 할당하는 랩이 현재 구독에 있어야 하며, 템플릿 배포가 수행된 것과 같은 리소스 그룹에 있어야 합니다. 마지막 파트인 resource-name은 랩의 이름입니다. 이 값은 이 예제에서 템플릿 매개 변수를 통해 수신됩니다.

템플릿의 역할 범위:

"roleScope": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/', resourceGroup().name, '/providers/Microsoft.DevTestLab/labs/', parameters('labName'))]"

템플릿 배포

먼저 Resource Manager 템플릿의 매개 변수 값을 전달하는 매개 변수 파일(예: azuredeploy.parameters.json)을 만듭니다.

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "principalId": {
      "value": "11111111-1111-1111-1111-111111111111"
    },
    "labName": {
      "value": "MyLab"
    },
    "roleAssignmentGuid": {
      "value": "22222222-2222-2222-2222-222222222222"
    }
  }
}

그런 다음 New-AzureRmResourceGroupDeployment PowerShell cmdlet을 사용하여 Resource Manager 템플릿을 배포합니다. 다음 예제 명령은 랩의 DevTest Labs 사용자 역할에 사용자, 그룹 또는 서비스 주체를 할당합니다.

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateParameterFile .\azuredeploy.parameters.json -TemplateFile .\azuredeploy.json

참고 항목

그룹 배포 이름 및 역할 할당 GUID는 고유해야 합니다. 고유하지 않은 GUID를 사용하여 리소스 할당을 배포하려고 하면 RoleAssignmentUpdateNotPermitted 오류가 표시됩니다.

템플릿을 여러 번 사용하여 랩의 DevTest Labs 사용자 역할에 여러 Active Directory 개체를 추가하려는 경우 PowerShell 명령에서 동적 개체를 사용하는 것이 좋습니다. 다음 예제에서는 New-Guid cmdlet을 사용하여 리소스 그룹 배포 이름과 역할 할당 GUID를 동적으로 지정합니다.

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "11111111-1111-1111-1111-111111111111"

Azure PowerShell 사용

소개에서 설명한 대로 새 Azure 역할 할당을 만들어 랩의 DevTest Labs 사용자 역할에 사용자를 추가합니다. PowerShell에서는 New-AzureRMRoleAssignment cmdlet을 사용하여 수행합니다. 이 cmdlet에는 유연성을 허용하는 많은 선택적 매개 변수가 있습니다. ObjectId, SigninName 또는 ServicePrincipalName은 권한이 부여되는 개체로 지정할 수 있습니다.

다음은 지정된 랩의 DevTest Labs 사용자 역할에 사용자를 추가하는 샘플 Azure PowerShell 명령입니다.

New-AzureRmRoleAssignment -UserPrincipalName <email@company.com> -RoleDefinitionName 'DevTest Labs User' -ResourceName '<Lab Name>' -ResourceGroupName '<Resource Group Name>' -ResourceType 'Microsoft.DevTestLab/labs'

권한이 부여되는 리소스를 지정하려면 ResourceName, ResourceType, ResourceGroup 조합 또는 scope 매개 변수로 지정할 수 있습니다. 사용되는 매개 변수 조합과 관계없이 Active Directory 개체(사용자, 그룹 또는 서비스 주체), 범위(리소스 그룹 또는 리소스) 및 역할 정의를 고유하게 식별하는 데 충분한 정보를 cmdlet에 제공합니다.

Azure CLI 사용

Azure CLI에서 랩 사용자를 랩에 추가하려면 az role assignment create 명령을 사용합니다. Azure CLI cmdlet에 관한 자세한 내용은 Azure CLI를 사용하여 Azure 역할 할당 추가 또는 제거를 참조하세요.

액세스 권한이 부여되는 개체는 objectId, signInName, spn 매개 변수로 지정할 수 있습니다. 개체에 액세스 권한이 부여되는 랩은 scope URL 또는 resource-name, resource-typeresource-group 매개 변수의 조합으로 식별할 수 있습니다.

다음 Azure CLI 예제는 지정된 랩의 DevTest Labs 사용자 역할에 사용자를 추가하는 방법을 보여 줍니다.

az role assignment create --roleName "DevTest Labs User" --signInName <email@company.com> -–resource-name "<Lab Name>" --resource-type "Microsoft.DevTestLab/labs" --resource-group "<Resource Group Name>" --role Contributor --scope /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>

다음 단계

다음 문서를 참조하세요.