Azure PowerShell を使用して Azure ロールを割り当てる

Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure リソースへのアクセスを管理するために使用する承認システムです。 アクセス権を付与するには、特定のスコープでユーザー、グループ、サービス プリンシパル、またはマネージド ID にロールを割り当てます。 この記事では、Azure PowerShell を使用してロールを割り当てる方法について説明します。

注

Azure Az PowerShell モジュールを使用して Azure と対話することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「 Azure PowerShell を AzureRM から Az に移行する」を参照してください。

[前提条件]

ロールを割り当てるには、次が必要です。

Azure ロールを割り当てる手順

ロールを割り当てるには、セキュリティ プリンシパル、ロール定義、スコープの 3 つの要素で構成されます。

手順 1: アクセスが必要なユーザーを決定する

ユーザー、グループ、サービス プリンシパル、またはマネージド ID にロールを割り当てることができます。 ロールを割り当てるには、オブジェクトの一意の ID を指定することが必要になる場合があります。 ID の形式は 11111111-1111-1111-1111-111111111111 です。 この ID は、Azure portal または Azure PowerShell を使用して取得できます。

User

Microsoft Entra ユーザーの場合は、ユーザー プリンシパル名 ( patlong@contoso.com やユーザー オブジェクト ID など) を取得します。 オブジェクト ID を取得するには、 Get-AzADUser を使用します。

Get-AzADUser -StartsWith <userName>
(Get-AzADUser -DisplayName <userName>).id

グループ

Microsoft Entra グループの場合は、グループ オブジェクト ID が必要です。 オブジェクト ID を取得するには、 Get-AzADGroup を使用します。

Get-AzADGroup -SearchString <groupName>
(Get-AzADGroup -DisplayName <groupName>).id

サービス プリンシパル

Microsoft Entra サービス プリンシパル (アプリケーションで使用される ID) には、サービス プリンシパル オブジェクト ID が必要です。 オブジェクト ID を取得するには、 Get-AzADServicePrincipal を使用します。 サービス プリンシパルの場合は、アプリケーション ID ではなく オブジェクト ID を使用します。

Get-AzADServicePrincipal -SearchString <principalName>
(Get-AzADServicePrincipal -DisplayName <principalName>).id

マネージド ID

システム割り当てマネージド ID またはユーザー割り当てマネージド ID の場合は、オブジェクト ID が必要です。 オブジェクト ID を取得するには、 Get-AzADServicePrincipal を使用します。

Get-AzADServicePrincipal -SearchString <principalName>
(Get-AzADServicePrincipal -DisplayName <principalName>).id

手順 2: 適切なロールを選択する

権限はロールにグループ化されます。 複数の Azure 組み込みロール の一覧から選択することも、独自のカスタム ロールを使用することもできます。 必要最小限の特権でアクセス権を付与することをお勧めします。そのため、より広範なロールを割り当てないでください。

ロールを一覧表示し、一意のロール ID を取得するには、 Get-AzRoleDefinition を使用できます。

Get-AzRoleDefinition | Format-Table -Property Name, IsCustom, Id

特定のロールの詳細を一覧表示する方法を次に示します。

Get-AzRoleDefinition -Name <roleName>

詳細については、「 Azure ロール定義の一覧表示」を参照してください。

手順 3: 必要なスコープを特定する

Azure には、リソース、 リソース グループ、サブスクリプション、 管理グループの 4 つのレベルのスコープが用意されています。 必要最小限の特権でアクセス権を付与することをお勧めします。そのため、より広範なスコープでロールを割り当てないようにします。 スコープの詳細については、「 スコープについて」を参照してください。

リソース スコープ

リソース スコープの場合は、リソースのリソース ID が必要です。 リソース ID は、Azure portal でリソースのプロパティを確認することで確認できます。 リソース ID の形式は次のとおりです。

/subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>

リソース グループのスコープ

リソース グループ スコープの場合は、リソース グループの名前が必要です。 この名前は、Azure portal の [リソース グループ ] ページで確認することも、 Get-AzResourceGroup を使用することもできます。

Get-AzResourceGroup

サブスクリプション スコープ

サブスクリプション スコープの場合は、サブスクリプション ID が必要です。 この ID は、Azure portal の [サブスクリプション ] ページで確認することも、 Get-AzSubscription を使用することもできます。

Get-AzSubscription

管理グループのスコープ

管理グループスコープの場合は、管理グループ名が必要です。 この名前は、Azure portal の [管理グループ ] ページで確認するか、 Get-AzManagementGroup を使用できます。

Get-AzManagementGroup

手順 4: ロールを割り当てる

ロールを割り当てるには、 New-AzRoleAssignment コマンドを 使用します。 スコープに応じて、通常、コマンドの形式は次のいずれかになります。

リソース スコープ

New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-Scope /subscriptions/<subscriptionId>/resourcegroups/<resourceGroupName>/providers/<providerName>/<resourceType>/<resourceSubType>/<resourceName>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionId <roleId> `
-ResourceName <resourceName> `
-ResourceType <resourceType> `
-ResourceGroupName <resourceGroupName>

リソース グループのスコープ

New-AzRoleAssignment -SignInName <emailOrUserprincipalname> `
-RoleDefinitionName <roleName> `
-ResourceGroupName <resourceGroupName>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-ResourceGroupName <resourceGroupName>

サブスクリプション スコープ

New-AzRoleAssignment -SignInName <emailOrUserprincipalname> `
-RoleDefinitionName <roleName> `
-Scope /subscriptions/<subscriptionId>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-Scope /subscriptions/<subscriptionId>

管理グループのスコープ

New-AzRoleAssignment -SignInName <emailOrUserprincipalname> `
-RoleDefinitionName <roleName> `
-Scope /providers/Microsoft.Management/managementGroups/<groupName>
New-AzRoleAssignment -ObjectId <objectId> `
-RoleDefinitionName <roleName> `
-Scope /providers/Microsoft.Management/managementGroups/<groupName>

ロールの割り当ての例

ストレージ アカウント リソース スコープ内のすべての BLOB コンテナーにロールを割り当てる

オブジェクト ID 55555555-5555-5555-5555-555555555555 とアプリケーション ID 66666666-6666-6666-6666-666666666666 を持つサービス プリンシパルに、ストレージ BLOB データ共同作成者 ロールを、storage12345 という名前のストレージ アカウントのリソース スコープで割り当てます。

PS C:\> New-AzRoleAssignment -ApplicationId 66666666-6666-6666-6666-666666666666 `
-RoleDefinitionName "Storage Blob Data Contributor" `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345"

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/providers/Microsoft.Authorization/roleAssignments/cccccccc-cccc-cccc-cccc-cccccccccccc
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345
DisplayName        : example-identity
SignInName         :
RoleDefinitionName : Storage Blob Data Contributor
RoleDefinitionId   : ba92f5b4-2d11-453d-a403-e96b0029c9fe
ObjectId           : 55555555-5555-5555-5555-555555555555
ObjectType         : ServicePrincipal
CanDelegate        : False

特定の BLOB コンテナー リソース スコープにロールを割り当てる

オブジェクト ID 55555555-5555-5555-5555-555555555555 とアプリケーション ID 66666666-6666-6666-6666-666666666666 を持つサービス プリンシパルに ストレージ BLOB データ寄稿者 ロールを BLOB コンテナー blob-container-01 のスコープで割り当てます。

PS C:\> New-AzRoleAssignment -ApplicationId 66666666-6666-6666-6666-666666666666 `
-RoleDefinitionName "Storage Blob Data Contributor" `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01"

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01/providers/Microsoft.Authorization/roleAssignm
                     ents/dddddddd-dddd-dddd-dddd-dddddddddddd
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/Example-Storage-rg/providers/Microsoft.Storage/storageAccounts/storage12345/blobServices/default/containers/blob-container-01
DisplayName        : example-identity
SignInName         :
RoleDefinitionName : Storage Blob Data Contributor
RoleDefinitionId   : ba92f5b4-2d11-453d-a403-e96b0029c9fe
ObjectId           : 55555555-5555-5555-5555-555555555555
ObjectType         : ServicePrincipal
CanDelegate        : False

特定の仮想ネットワーク リソース スコープ内のグループにロールを割り当てる

仮想マシン共同作成者ロールを、pharma-sales-project-network という名前の仮想ネットワークのリソース スコープで ID aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaa を持つPharma Sales Admins グループに割り当てます。

PS C:\> New-AzRoleAssignment -ObjectId aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa `
-RoleDefinitionName "Virtual Machine Contributor" `
-ResourceName pharma-sales-project-network `
-ResourceType Microsoft.Network/virtualNetworks `
-ResourceGroupName MyVirtualNetworkResourceGroup

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyVirtualNetworkResourceGroup
                     /providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network/providers/Microsoft.Authorizat
                     ion/roleAssignments/bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/MyVirtualNetworkResourceGroup
                     /providers/Microsoft.Network/virtualNetworks/pharma-sales-project-network
DisplayName        : Pharma Sales Admins
SignInName         :
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId   : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId           : aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
ObjectType         : Group
CanDelegate        : False

リソース グループ スコープでユーザーのロールを割り当てる

仮想マシン共同作成者ロールをpatlong@contoso.comリソース グループ スコープユーザーに割り当てます。

PS C:\> New-AzRoleAssignment -SignInName patlong@contoso.com `
-RoleDefinitionName "Virtual Machine Contributor" `
-ResourceGroupName pharma-sales

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales/pr
                     oviders/Microsoft.Authorization/roleAssignments/55555555-5555-5555-5555-555555555555
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName        : Pat Long
SignInName         : patlong@contoso.com
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId   : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId           : 44444444-4444-4444-4444-444444444444
ObjectType         : User
CanDelegate        : False

または、 -Scope パラメーターを使用して完全修飾リソース グループを指定することもできます。

PS C:\> New-AzRoleAssignment -SignInName patlong@contoso.com `
-RoleDefinitionName "Virtual Machine Contributor" `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales/providers/Microsoft.Authorization/roleAssignments/55555555-5555-5555-5555-555555555555
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName        : Pat Long
SignInName         : patlong@contoso.com
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId   : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId           : 44444444-4444-4444-4444-444444444444
ObjectType         : User
CanDelegate        : False

リソース グループ スコープで一意のロール ID を使用してユーザーにロールを割り当てる

ロール名が変更されることがあります。次に例を示します。

  • 独自のカスタム ロールを使用していて、名前を変更することにしました。
  • 名前に (プレビュー) を含む プレビュー ロールを使用している。 ロールが解放されると、ロールの名前が変更されます。

ロールの名前が変更されても、ロール ID は変更されません。 スクリプトまたは自動化を使用してロールの割り当てを作成する場合は、ロール名ではなく一意のロール ID を使用することをお勧めします。 そのため、ロールの名前が変更されると、スクリプトが機能する可能性が高くなります。

次の例では、製薬販売リソース グループ スコープのpatlong@contoso.com ユーザーに仮想マシン共同作成者ロールを割り当てます。

PS C:\> New-AzRoleAssignment -ObjectId 44444444-4444-4444-4444-444444444444 `
-RoleDefinitionId 9980e02c-c2be-4d73-94e8-173b1dc7cf3c `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales"

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales/providers/Microsoft.Authorization/roleAssignments/55555555-5555-5555-5555-555555555555
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName        : Pat Long
SignInName         : patlong@contoso.com
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId   : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId           : 44444444-4444-4444-4444-444444444444
ObjectType         : User
CanDelegate        : False

リソース グループ スコープでアプリケーションのロールを割り当てる

サービス プリンシパル オブジェクト ID 77777777-7777-7777-7777-7777-77777777777 を持つアプリケーションに、製薬販売リソース グループ スコープで仮想マシン共同作成者ロールを割り当てます。

PS C:\> New-AzRoleAssignment -ObjectId 77777777-7777-7777-7777-777777777777 `
-RoleDefinitionName "Virtual Machine Contributor" `
-ResourceGroupName pharma-sales

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleAssignments/66666666-6666-6666-6666-666666666666
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/pharma-sales
DisplayName        : MyApp1
SignInName         :
RoleDefinitionName : Virtual Machine Contributor
RoleDefinitionId   : 9980e02c-c2be-4d73-94e8-173b1dc7cf3c
ObjectId           : 77777777-7777-7777-7777-777777777777
ObjectType         : ServicePrincipal
CanDelegate        : False

サブスクリプション スコープでユーザーのロールを割り当てる

サブスクリプション スコープの ユーザーにannm@example.comロールを割り当てます。

PS C:\> New-AzRoleAssignment -SignInName annm@example.com `
-RoleDefinitionName "Reader" `
-Scope "/subscriptions/00000000-0000-0000-0000-000000000000"

RoleAssignmentId   : /subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleAssignments/66666666-6666-6666-6666-666666666666
Scope              : /subscriptions/00000000-0000-0000-0000-000000000000
DisplayName        : Ann M
SignInName         : annm@example.com
RoleDefinitionName : Reader
RoleDefinitionId   : acdd72a7-3385-48ef-bd42-f606fba81ae7
ObjectId           : 77777777-7777-7777-7777-777777777777
ObjectType         : ServicePrincipal
CanDelegate        : False

管理グループ スコープでユーザーのロールを割り当てる

管理グループ スコープの ユーザーにalain@example.comロールを割り当てます。

PS C:\> New-AzRoleAssignment -SignInName alain@example.com `
-RoleDefinitionName "Billing Reader" `
-Scope "/providers/Microsoft.Management/managementGroups/marketing-group"

RoleAssignmentId   : /providers/Microsoft.Management/managementGroups/marketing-group/providers/Microsoft.Authorization/roleAssignments/22222222-2222-2222-2222-222222222222
Scope              : /providers/Microsoft.Management/managementGroups/marketing-group
DisplayName        : Alain Charon
SignInName         : alain@example.com
RoleDefinitionName : Billing Reader
RoleDefinitionId   : fa23ad8b-c56e-40d8-ac0c-ce449e1d2c64
ObjectId           : 44444444-4444-4444-4444-444444444444
ObjectType         : User
CanDelegate        : False

次のステップ