次の方法で共有


Azure DevTest Labs でのラボへのラボ ユーザーの追加を自動化する

Azure DevTest Labs によって、Azure portal を使用することにより、セルフサービスの開発テスト環境をすばやく作成できます。 しかし、複数のチームがあり、いくつかの DevTest Labs インスタンスがある場合、作成プロセスの自動化によって時間を節約できます。 Azure Resource Manager テンプレートでは、ラボ、ラボ VM、カスタム イメージ、数式を作成し、自動でユーザーを追加できます。 この記事では、DevTest Labs インスタンスにユーザーを追加することに特に焦点を絞って説明します。

ユーザーをラボに追加するには、ラボに DevTest Labs ユーザー ロールを追加します。 この記事では、以下の方法のいずれかを使用して、ユーザーのラボへの追加を自動化する方法を示します。

  • Azure Resource Manager のテンプレート
  • Azure PowerShell コマンドレット
  • 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'))]"

ロールの割り当てリソースのプロパティ

ロールの割り当て自体で 3 つのプロパティを定義します。 roleDefinitionIdprincipalIdscope が必要です。

ロールの定義

ロールの定義 ID は、既存のロールの定義に対する文字列 ID です。 このロール ID は /subscriptions/{subscription-id}/providers/Microsoft.Authorization/roleDefinitions/{role-definition-id} のフォームに含まれます。

サブスクリプション ID は、subscription().subscriptionId テンプレート関数を使用することによって取得されます。

DevTest Labs User 組み込みロールに対するロールの定義を取得する必要があります。 DevTest Labs ユーザー ロールの GUID を取得するには、Role Assignments REST API または Get-AzRoleDefinition コマンドレットを使用できます。

$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 コマンドレットを使用することで、ObjectId を取得できます。 これらのコマンドレットによって、ID プロパティがある Active Directory オブジェクトが 1 つまたはその一覧が返されます。これが必要なオブジェクト ID です。 次の例では、会社の単一ユーザーのオブジェクト ID を取得する方法を示します。

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

Get-MgUserGet-MgGroupGet-MgServicePrincipal を含む Microsoft Graph PowerShell コマンドレットを使用することもできます。

Scope

スコープでは、ロールの割り当てを適用する必要があるリソースまたはリソース グループを指定します。 リソースには、スコープは次のフォームに含まれます: /subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/{provider-namespace}/{resource-type}/{resource-name}。 テンプレートでは、subscription-id パーツに入力するための subscription().subscriptionId 関数および resource-group-name パーツに入力するための resourceGroup().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": "aaaaaaaa-bbbb-cccc-1111-222222222222"
    },
    "labName": {
      "value": "MyLab"
    },
    "roleAssignmentGuid": {
      "value": "22222222-2222-2222-2222-222222222222"
    }
  }
}

次に、New-AzureRmResourceGroupDeployment PowerShell コマンドレットを使用して、Resource Manager テンプレートをデプロイします。 次の例のコマンドでは、ユーザー、グループ、またはサービス プリンシパルをラボに対する DevTest Labs ユーザー ロールに割り当てます。

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

注意

グループのデプロイ名とロールの割り当て GUID は、一意である必要があります。 一意ではない GUID を使用してリソースの割り当てをデプロイしようとすると、RoleAssignmentUpdateNotPermitted エラーが発生します。

いくつかの Active Directory オブジェクトを自分のラボに対する DevTest Labs ユーザー ロールに追加するために、テンプレートを数回使用する場合は、PowerShell コマンドで動的オブジェクトを使用することを検討してください。 次の例では、New-Guid コマンドレットを使用して、リソース グループのデプロイ名とロールの割り当て GUID を動的に指定します。

New-AzureRmResourceGroupDeployment -Name "MyLabResourceGroup-$(New-Guid)" -ResourceGroupName 'MyLabResourceGroup' -TemplateFile .\azuredeploy.json -roleAssignmentGuid "$(New-Guid)" -labName "MyLab" -principalId "aaaaaaaa-bbbb-cccc-1111-222222222222"

Azure PowerShell の使用

概要で説明されているように、新しい Azure のロールの割り当てを作成して、ラボに対する DevTest Labs ユーザー ロールにユーザーを追加します。 PowerShell で、New-AzureRMRoleAssignment コマンドレットを使用してこれを行います。 このコマンドレットには、柔軟性のために多くの省略可能なパラメーターがあります。 ObjectIdSigninName、または 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'

アクセス許可が付与されているリソースを指定するには、ResourceNameResourceTypeResourceGroup の組み合わせ、または scope パラメーターによって指定できます。 どのパラメーターの組み合わせが使用されていても、Active Directory オブジェクト (ユーザー、グループ、またはサービス プリンシパル)、スコープ (リソース グループまたはリソース)、ロールの定義を一意に識別するために、コマンドレットに十分な情報を提供します。

Azure CLI の使用

Azure CLI で、az role assignment create コマンドを使用して、ラボ ユーザーをラボに追加します。 Azure CLI コマンドレットの詳細については、「Azure CLI を使用して Azure でのロールの割り当てを追加または削除する」を参照してください。

アクセス権が付与されているオブジェクトは、objectIdsignInNamespn パラメーターによって指定できます。 オブジェクトにアクセス権が付与されているラボは、scope URL または resource-nameresource-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>

次のステップ

次の記事をご覧ください。