Udostępnij za pośrednictwem


Automatyzowanie dodawania użytkownika laboratorium do laboratorium w Azure DevTest Labs

Azure DevTest Labs umożliwia szybkie tworzenie samoobsługowych środowisk deweloperskich przy użyciu Azure Portal. Jeśli jednak masz kilka zespołów i kilka wystąpień usługi DevTest Labs, automatyzacja procesu tworzenia może zaoszczędzić czas. Szablony usługi Azure Resource Manager umożliwiają tworzenie laboratoriów, maszyn wirtualnych laboratoriów, obrazów niestandardowych, formuł i dodawanie użytkowników w zautomatyzowany sposób. Ten artykuł koncentruje się konkretnie na dodawaniu użytkowników do wystąpienia usługi DevTest Labs.

Aby dodać użytkownika do laboratorium, należy dodać użytkownika do roli Użytkownika usługi DevTest Labs dla laboratorium. W tym artykule pokazano, jak zautomatyzować dodawanie użytkownika do laboratorium przy użyciu jednego z następujących sposobów:

  • Szablony usługi Azure Resource Manager
  • Polecenia cmdlet programu Azure PowerShell
  • Interfejs wiersza polecenia platformy Azure.

Korzystanie z szablonów usługi Azure Resource Manager

Poniższy przykładowy szablon Resource Manager określa użytkownika, który ma zostać dodany do roli użytkownika usługi DevTest Labs laboratorium.

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

Jeśli przypisujesz rolę w tym samym szablonie, który tworzy laboratorium, pamiętaj, aby dodać zależność między zasobem przypisania roli a laboratorium. Aby uzyskać więcej informacji, zobacz Artykuł Definiowanie zależności w szablonach usługi Azure Resource Manager.

Informacje o zasobie przypisania roli

Zasób przypisania roli musi określać typ i nazwę.

Pierwszą rzeczą, którą należy zauważyć, jest to, że typ zasobu nie Microsoft.Authorization/roleAssignments jest taki, jak w przypadku grupy zasobów. Zamiast tego typ zasobu jest zgodny ze wzorcem {provider-namespace}/{resource-type}/providers/roleAssignments. W takim przypadku typ zasobu to Microsoft.DevTestLab/labs/providers/roleAssignments.

Sama nazwa przypisania roli musi być globalnie unikatowa. Nazwa przypisania używa wzorca {labName}/Microsoft.Authorization/{newGuid}. Jest newGuid to wartość parametru szablonu. Gwarantuje to, że nazwa przypisania roli jest unikatowa. Ponieważ nie ma funkcji szablonu do tworzenia identyfikatorów GUID, musisz wygenerować identyfikator GUID samodzielnie przy użyciu dowolnego narzędzia generatora identyfikatora GUID.

W szablonie nazwa przypisania roli jest definiowana przez zmienną fullDevTestLabUserRoleName . Dokładny wiersz szablonu to:

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

Właściwości zasobu przypisania roli

Samo przypisanie roli definiuje trzy właściwości. Wymaga roleDefinitionId, principalIdi scope.

Definicja roli

Identyfikator definicji roli to identyfikator ciągu istniejącej definicji roli. Identyfikator roli ma postać /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id}.

Identyfikator subskrypcji jest uzyskiwany przy użyciu subscription().subscriptionId funkcji szablonu.

Musisz uzyskać definicję roli dla roli wbudowanej DevTest Labs User . Aby uzyskać identyfikator GUID roli użytkownika usługi DevTest Labs , możesz użyć interfejsu API REST przypisania ról lub polecenia cmdlet Get-AzRoleDefinition .

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

Identyfikator roli jest definiowany w sekcji zmiennych i o nazwie devTestLabUserRoleId. W szablonie identyfikator roli jest ustawiony na: 11111111111-0000-0000-11111111111111111111111111111.

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

Identyfikator podmiotu zabezpieczeń

Identyfikator podmiotu zabezpieczeń to identyfikator obiektu użytkownika, grupy lub jednostki usługi usługi Active Directory, którą chcesz dodać jako użytkownik laboratorium. Szablon używa parametru ObjectId jako parametru.

Identyfikator ObjectId można uzyskać przy użyciu poleceń cmdlet get-AzureRMADUser[ Get-AzureRMADGroup lub Get-AzureRMADServicePrincipal programu PowerShell. Te polecenia cmdlet zwracają pojedynczą listę obiektów usługi Active Directory, które mają właściwość ID, czyli identyfikator obiektu, którego potrzebujesz. W poniższym przykładzie pokazano, jak uzyskać identyfikator obiektu pojedynczego użytkownika w firmie.

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

Możesz również użyć poleceń cmdlet programu PowerShell programu Microsoft Graph, które obejmują polecenia cmdlet Get-MgUser, Get-MgGroup i Get-MgServicePrincipal.

Zakres

Zakres określa zasób lub grupę zasobów, dla której ma być stosowane przypisanie roli. W przypadku zasobów zakres ma postać: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}. Szablon używa subscription().subscriptionId funkcji, aby wypełnić subscription-id część i funkcję szablonu resourceGroup().nameresource-group-name , aby wypełnić tę część. Użycie tych funkcji oznacza, że laboratorium, do którego przypisujesz rolę, musi istnieć w bieżącej subskrypcji i tej samej grupie zasobów, do której jest wykonywane wdrożenie szablonu. Ostatnia część to resource-namenazwa laboratorium. Ta wartość jest odbierana za pośrednictwem parametru szablonu w tym przykładzie.

Zakres roli w szablonie:

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

Wdrażanie szablonu

Najpierw utwórz plik parametrów (na przykład azuredeploy.parameters.json), który przekazuje wartości parametrów w szablonie Resource Manager.

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

Następnie użyj polecenia cmdlet New-AzureRmResourceGroupDeployment Programu PowerShell, aby wdrożyć szablon Resource Manager. Poniższe przykładowe polecenie przypisuje osobę, grupę lub jednostkę usługi do roli użytkownika usługi DevTest Labs dla laboratorium.

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

Uwaga

Nazwa wdrożenia grupy i identyfikator GUID przypisania roli muszą być unikatowe. Jeśli spróbujesz wdrożyć przypisanie zasobu przy użyciu nie unikatowego identyfikatora RoleAssignmentUpdateNotPermitted GUID, zostanie wyświetlony błąd.

Jeśli planujesz kilka razy użyć szablonu, aby dodać kilka obiektów usługi Active Directory do roli użytkownika usługi DevTest Labs dla laboratorium, rozważ użycie obiektów dynamicznych w poleceniu programu PowerShell. W poniższym przykładzie użyto polecenia cmdlet New-Guid w celu dynamicznego określenia nazwy wdrożenia grupy zasobów i identyfikatora GUID przypisania roli.

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

Korzystanie z programu Azure PowerShell

Jak wspomniano we wprowadzeniu, utworzysz nowe przypisanie roli platformy Azure, aby dodać użytkownika do roli użytkownika usługi DevTest Labs dla laboratorium. W programie PowerShell można to zrobić za pomocą polecenia cmdlet New-AzureRMRoleAssignment . To polecenie cmdlet ma wiele opcjonalnych parametrów, aby zapewnić elastyczność. Obiekt ObjectId, SigninNamelub ServicePrincipalName można określić jako obiekt, któremu przyznano uprawnienia.

Oto przykładowe polecenie Azure PowerShell, które dodaje użytkownika do roli Użytkownika usługi DevTest Labs w określonym laboratorium.

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

Aby określić zasób, do którego udzielono uprawnień, można określić za pomocą kombinacji parametru ResourceName, ResourceTypeResourceGroup lub parametru scope . Niezależnie od kombinacji parametrów, podaj wystarczające informacje do polecenia cmdlet, aby jednoznacznie zidentyfikować obiekt usługi Active Directory (użytkownik, grupa lub jednostka usługi), zakres (grupa zasobów lub zasób) i definicję roli.

Interfejs wiersza polecenia platformy Azure

W interfejsie wiersza polecenia platformy Azure dodawanie użytkownika laboratorium do laboratorium odbywa się za pomocą az role assignment create polecenia . Aby uzyskać więcej informacji na temat poleceń cmdlet interfejsu wiersza polecenia platformy Azure, zobacz Dodawanie lub usuwanie przypisań ról platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure.

Obiekt, któremu udzielono dostępu, można określić za pomocą parametrów objectId, . signInNamespn Laboratorium, do którego obiekt otrzymuje dostęp, można zidentyfikować za pomocą scope adresu URL lub kombinacji resource-nameparametrów , resource-typei resource-group .

Poniższy przykład interfejsu wiersza polecenia platformy Azure pokazuje, jak dodać osobę do roli użytkownika usługi DevTest Labs dla określonego laboratorium.

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>

Następne kroki

Zobacz następujące artykuły: