特定のラボ ポリシーに対するアクセス許可をユーザーに付与する
概要
この記事では、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 は aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb です。
PS C:\>Get-AzADUser -SearchString "SomeUser"
DisplayName Type ObjectId
----------- ---- --------
someuser@hotmail.com aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
ユーザーの ObjectId とカスタム ロール名を取得したら、New-AzRoleAssignment コマンドレットを使用してユーザーにそのロールを割り当てることができます。
PS C:\>New-AzRoleAssignment -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb -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 をご利用中であれば、 最初のラボを作成し、Azure DevTest Labs の使用を数分で開始しましょう。
次のステップ
特定のラボ ポリシーに対するアクセス許可をユーザーに付与した後で実行する手順として、以下のようなものがあります。