特定のラボ ポリシーに対するアクセス許可をユーザーに付与する

概要

この記事では、PowerShell を使用して、特定のラボ ポリシーに対するアクセス許可をユーザーに付与する方法を説明します。 そうすることで、アクセス許可を各ユーザーのニーズに基づいて適用できます。 たとえば、特定のユーザーに、VM ポリシー設定は変更できるがコスト ポリシーは変更できない能力を付与することができます。

リソースとしてのポリシー

Azure ロールベースのアクセス制御 (Azure RBAC) の記事で説明されているように、Azure RBAC を使用すると、Azure のリソースのアクセスをきめ細かく管理できます。 Azure RBAC を使用して、DevOps チーム内で職務を分け、職務に必要なアクセス権のみをユーザーに付与します。

DevTest ラボでは、ポリシーは、リソースの種類の 1 つであり、Azure RBAC の操作 Microsoft.DevTestLab/labs/policySets/policies/ を可能にするものです。 各ラボ ポリシーはこの種類のポリシー リソースのリソースであり、Azure ロールにスコープとして割り当てることができます。

たとえば、許可される VM サイズ ポリシーに対する読み取り/書き込みアクセス許可をユーザーに付与するには、Microsoft.DevTestLab/labs/policySets/policies/ アクションを扱うカスタム ロールを作成し、Microsoft.DevTestLab/labs/policySets/policies/AllowedVmSizesInLab スコープ内でこのカスタム ロールに適切なユーザーを割り当てます。

Azure RBAC でのカスタム ロールの詳細については、「Azure カスタム ロール」を参照してください。

PowerShell を使用してラボ カスタム ロールを作成する

始めるには、Azure PowerShell をインストールする必要があります。

Azure PowerShell コマンドレットを設定すると、次のタスクを実行できるようになります。

  • リソース プロバイダーのすべての操作の一覧
  • 特定のロールの操作の一覧:
  • カスタム ロールの作成

次の PowerShell スクリプトは、これらのタスクを実行する方法の例を示しています。

# List all the operations/actions for a resource provider.
Get-AzProviderOperation -OperationSearchString "Microsoft.DevTestLab/*"

# List actions in a particular role.
(Get-AzRoleDefinition "DevTest Labs User").Actions

# Create custom role.
$policyRoleDef = (Get-AzRoleDefinition "DevTest Labs User")
$policyRoleDef.Id = $null
$policyRoleDef.Name = "Policy Contributor"
$policyRoleDef.IsCustom = $true
$policyRoleDef.AssignableScopes.Clear()
$policyRoleDef.AssignableScopes.Add("/subscriptions/<SubscriptionID> ")
$policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/policySets/policies/*")
$policyRoleDef = (New-AzRoleDefinition -Role $policyRoleDef)

カスタム ロールを使用して特定のポリシーに対しユーザーにアクセス許可を割り当てる

カスタム ロールを定義すると、ユーザーにカスタム ロールを割り当てられるようになります。 カスタム ロールをユーザーに割り当てるには、まず、そのユーザーを表す ObjectId を取得する必要があります。 そのためには、Get-AzADUser コマンドレットを使用します。

次の例では、 SomeUser ユーザーの ObjectId は 05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3 です。

PS C:\>Get-AzADUser -SearchString "SomeUser"

DisplayName                    Type                           ObjectId
-----------                    ----                           --------
someuser@hotmail.com                                          05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3

ユーザーの ObjectId とカスタム ロール名を取得したら、New-AzRoleAssignment コマンドレットを使用してユーザーにそのロールを割り当てることができます。

PS C:\>New-AzRoleAssignment -ObjectId 05DEFF7B-0AC3-4ABF-B74D-6A72CD5BF3F3 -RoleDefinitionName "Policy Contributor" -Scope /subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.DevTestLab/labs/<LabName>/policySets/default/policies/AllowedVmSizesInLab

前の例では、 AllowedVmSizesInLab ポリシーを使用しました。 次のいずれかのポリシーを使用できます。

  • MaxVmsAllowedPerUser
  • MaxVmsAllowedPerLab
  • AllowedVmSizesInLab
  • LabVmsShutdown

特定の 1 つのタスクの実行をユーザーに許可するようにロールを作成する

このスクリプトの例では、ラボ内のすべての VM を起動および停止するアクセス許可を持つ DevTest Labs Advanced User ロールを作成します。

    $policyRoleDef = Get-AzRoleDefinition "DevTest Labs User"
    $policyRoleDef.Actions.Remove('Microsoft.DevTestLab/Environments/*')
    $policyRoleDef.Id = $null
    $policyRoleDef.Name = "DevTest Labs Advanced User"
    $policyRoleDef.IsCustom = $true
    $policyRoleDef.AssignableScopes.Clear()
    $policyRoleDef.AssignableScopes.Add("/subscriptions/<subscription Id>")
    $policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/virtualMachines/Start/action")
    $policyRoleDef.Actions.Add("Microsoft.DevTestLab/labs/virtualMachines/Stop/action")
    $policyRoleDef = New-AzRoleDefinition -Role $policyRoleDef 

Azure DevTest Labs を使用する

Azure を利用するのが初めてであれば、 無料の Azure アカウントを作成してください

既に Azure をご利用中であれば、 DevTest Labs での最初のラボでの作業開始: Azure DevTest Labs の使用を数分で開始します

次のステップ

特定のラボ ポリシーに対するアクセス許可をユーザーに付与した後で実行する手順として、以下のようなものがあります。