Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure リソースへのアクセスを管理するために使用する承認システムです。 アクセス権を付与するには、特定のスコープでユーザー、グループ、サービス プリンシパル、またはマネージド ID にロールを割り当てます。 この記事では、Azure PowerShell を使用してロールを割り当てる方法について説明します。
注
Azure Az PowerShell モジュールを使用して Azure と対話することをお勧めします。 作業を始めるには、「Azure PowerShell をインストールする」を参照してください。 Az PowerShell モジュールに移行する方法については、「 Azure PowerShell を AzureRM から Az に移行する」を参照してください。
[前提条件]
ロールを割り当てるには、次が必要です。
-
Microsoft.Authorization/roleAssignments/write権限(たとえば役割ベースのアクセス制御管理者など) - Azure Cloud Shell の PowerShell または Azure PowerShell
- PowerShell コマンドの実行に使用するアカウントには、Microsoft Graph
Directory.Read.Allアクセス許可が必要です。
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