Azure ロールの割り当てについて

ロールの割り当てにより、特定の Azure リソースへのプリンシパル (ユーザー、グループ、マネージド ID、サービス プリンシパルなど) アクセス権を付与できます。 この記事では、ロールの割り当ての詳細について説明します。

ロール割り当て

Azure リソースへのアクセスは、ロールの割り当てを作成することによって許可され、ロールの割り当てを削除することによって取り消されます。

ロールの割り当てには、次のようないくつかのコンポーネントがあります。

  • プリンシパル、またはロールが割り当てられているユーザー
  • 割り当てられているロール
  • ロールが割り当てられているスコープ
  • ロールの割り当ての名前と、ロールが割り当てられている理由を説明するのに役立つ記述

たとえば、Azure RBAC を使用して、次のようなロールを割り当てることができます。

  • ユーザー Sally には、リソース グループ ContosoStorage 内のストレージ アカウント contoso123 への所有者アクセス権があります。
  • Microsoft Entra ID のクラウド管理者グループの全員が、リソース グループ ContosoStorage 内のすべてのリソースに対して閲覧者アクセスを持っています。
  • アプリケーションに関連付けられているマネージド ID は、Contoso のサブスクリプション内の仮想マシンを再起動できます。

次に示すのは、Azure PowerShell を使用して表示される場合のロールの割り当てのプロパティの例です。

{
  "RoleAssignmentName": "00000000-0000-0000-0000-000000000000",
  "RoleAssignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "Scope": "/subscriptions/11111111-1111-1111-1111-111111111111",
  "DisplayName": "User Name",
  "SignInName": "user@contoso.com",
  "RoleDefinitionName": "Contributor",
  "RoleDefinitionId": "b24988ac-6180-42a0-ab88-20f7382dd24c",
  "ObjectId": "22222222-2222-2222-2222-222222222222",
  "ObjectType": "User",
  "CanDelegate": false,
  "Description": null,
  "ConditionVersion": null,
  "Condition": null
}

次に示すのは、Azure CLI、または REST API を使用して表示される場合のロールの割り当てのプロパティの例です。

{
  "canDelegate": null,
  "condition": null,
  "conditionVersion": null,
  "description": null,
  "id": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleAssignments/00000000-0000-0000-0000-000000000000",
  "name": "00000000-0000-0000-0000-000000000000",
  "principalId": "22222222-2222-2222-2222-222222222222",
  "principalName": "user@contoso.com",
  "principalType": "User",
  "roleDefinitionId": "/subscriptions/11111111-1111-1111-1111-111111111111/providers/Microsoft.Authorization/roleDefinitions/b24988ac-6180-42a0-ab88-20f7382dd24c",
  "roleDefinitionName": "Contributor",
  "scope": "/subscriptions/11111111-1111-1111-1111-111111111111",
  "type": "Microsoft.Authorization/roleAssignments"
}

次の表で、ロールの割り当てのプロパティについて説明します。

プロパティ 説明
RoleAssignmentName
name
ロールの割り当ての名前は、グローバル一意識別子 (GUID) です。
RoleAssignmentId
id
名前を含むロールの割り当ての一意の ID。
Scope
scope
ロールの割り当てにスコープが設定されている Azure リソース識別子。
RoleDefinitionId
roleDefinitionId
ロールの一意の ID です。
RoleDefinitionName
roleDefinitionName
ロールの名前。
ObjectId
principalId
ロールが割り当てられているプリンシパルの Microsoft Entra オブジェクト識別子。
ObjectType
principalType
プリンシパルが表す Microsoft Entra オブジェクトの種類。 有効な値には UserGroup、および ServicePrincipal があります。
DisplayName ユーザーのロールの割り当ての場合は、ユーザーの表示名。
SignInName
principalName
ユーザーの一意のプリンシパル名 (UPN)、またはサービス プリンシパルに関連付けられているアプリケーションの名前。
Description
description
ロールの割り当ての説明。
Condition
condition
ロールの定義と属性から 1 つ以上のアクションを使用して構築された条件文。
ConditionVersion
conditionVersion
条件バージョン番号。 既定値は 2.0 で、サポートされている唯一のバージョンです。
CanDelegate
canDelegate
実装されていません。

Scope

ロールの割り当てを作成するときは、その割り当てを適用するスコープを指定する必要があります。 スコープは、プリンシパルがアクセスできるリソースまたはリソースのセットを表します。 ロールの割り当てのスコープは、単一のリソース、リソース グループ、サブスクリプション、または管理グループに設定できます。

ヒント

要件を満たすために必要な最小のスコープを使用してください。

たとえば、1 つのストレージ アカウントへのマネージド ID アクセスを許可する必要がある場合は、リソース グループまたはサブスクリプションのスコープではなく、ストレージ アカウントのスコープでロールの割り当てを作成することをセキュリティの面からお勧めします。

スコープの詳細については、スコープについての理解に関する記事を参照してください。

割り当てるロール

ロールの割り当てはロールの定義に関連付けられます。 ロールの定義は、ロールの割り当てのスコープ内でプリンシパルが持つ必要があるアクセス許可を指定します。

組み込みのロールの定義またはカスタム ロールの定義を割り当てることができます。 ロールの割り当てを作成する場合、一部のツールではロールの定義 ID を使用する必要がありますが、他のツールではロールの名前を指定できます。

ロールの定義について詳しくは、「ロールの定義について」を参照してください。

プリンシパル

プリンシパルには、ユーザー、セキュリティ グループ、マネージド ID、ワークロード ID、サービス プリンシパルが含まれます。 プリンシパルは Microsoft Entra テナントで作成および管理されます。 任意のプリンシパルへロールを割り当てることができます。 Microsoft Entra ID オブジェクト ID を使用して、ロールを割り当てるプリンシパルを識別します。

Azure PowerShell、Azure CLI、Bicep、または別のコードとしてのインフラストラクチャ (IaC) テクノロジを使用してロールの割り当てを作成する場合は、プリンシパルの種類を指定します。 プリンシパルの種類には、ユーザーグループサービス プリンシパルが含まれます。 正しいプリンシパルの種類を指定することが重要です。 そうしないと、特にサービス プリンシパルやマネージド ID を扱うときに、断続的なデプロイ エラーが発生する場合があります。

名前

ロールの割り当てのリソース名は、グローバル一意識別子 (GUID) である必要があります。

ロール割り当てのスコープが狭くても、ロールの割り当てリソース名は Microsoft Entra テナント内で一意である必要があります。

ヒント

Azure portal、Azure PowerShell、または Azure CLI を使用してロールの割り当てを作成すると、作成プロセスによってロールの割り当てが自動的に一意の名前になります。

Bicep または別のコードとしてのインフラストラクチャ (IaC) テクノロジを使用してロールの割り当てを作成する場合は、ロールの割り当てにどのような名前を付けるかを慎重に計画する必要があります。 詳細については、「Bicep を使用して Azure RBAC リソースを作成する」を参照してください。

リソースの削除動作

Microsoft Entra ID からユーザー、グループ、サービス プリンシパル、またはマネージド ID を削除する場合、ロールの割り当てを削除することをお勧めします。 これらは自動的には削除されません。 削除されたプリンシパル ID を参照するすべてのロールの割り当てが無効になります。

ロールの割り当ての名前を別のロールの割り当てに再利用しようとすると、デプロイは失敗します。 この問題は、Bicep または Azure Resource Manager テンプレート (ARM テンプレート) を使用してロールの割り当てをデプロイする場合に発生する可能性が高くなります。これらのツールを使用する場合は、ロールの割り当て名を明示的に設定する必要があるためです。 この動作を回避するには、再作成する前に古いロールの割り当てを削除するか、新しいロールの割り当てをデプロイするときに一意の名前を使用する必要があります。

説明

ロールの割り当てにテキストの説明を追加できます。 説明は省略可能ですが、ロールの割り当てに追加することをお勧めします。 プリンシパルに割り当てられたロールが必要な理由を簡単に説明します。 だれかがロールの割り当てを監査する場合、説明があれば、なぜそれらが作成されたのか、まだ適用されるかどうかなどを理解するのに役立ちます。

条件

一部のロールは、特定のアクションのコンテキストでの属性に基づいてロールの割り当て条件をサポートします。 ロールの割り当て条件は、ロールの割り当てに追加することによってさらにきめ細かなアクセス制御を可能にする確認のしくみの 1 つです。

たとえば、ユーザーがオブジェクトを読み取るために、オブジェクトに特定のタグが必要であるという条件を追加できます。

通常は、ビジュアル条件エディターを使用して条件を作成しますが、コードを使用した場合の条件の例を次に示します。

((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})) OR (@resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEqualsIgnoreCase 'Cascade'))

前途の条件により、ユーザーは、BLOB インデックス タグのキーが Project で、値が Cascade の BLOB を読み取ることができます。

条件の詳細については、「Azure の属性ベースのアクセス制御 (Azure ABAC) とは」を参照してください。

次のステップ