REST API を使用して Azure ロールを割り当てる
Azure ロールベースのアクセス制御 (Azure RBAC) は、Azure のリソースに対するアクセスを管理するために使用する承認システムです。 アクセス権を付与するには、特定のスコープでユーザー、グループ、サービス プリンシパル、またはマネージド ID にロールを割り当てます。 この記事では、REST API を使用してロールを割り当てる方法について説明します。
前提条件
Azure ロールを割り当てるには、次のものが必要です。
Microsoft.Authorization/roleAssignments/write
アクセス許可 (ロール ベースのアクセス制御管理istrator、ユーザー アクセス 管理istrator など)
次のバージョンを使用する必要があります。
- Azure ロールを割り当てるには
2015-07-01
以降 - 新しいサービス プリンシパルに Azure ロールを割り当てるには
2018-09-01-preview
以降
詳細については、Azure RBAC REST API の API バージョンに関するページを参照してください。
Azure ロールを割り当てる
ロールを割り当てるには、ロールの割り当て - 作成 REST API を使用し、セキュリティ プリンシパル、ロールの定義、スコープを指定します。 この API を呼び出すには、ロール ベースのMicrosoft.Authorization/roleAssignments/write
アクセス制御管理istrator などのアクションにアクセスできる必要があります。
ロールの定義 - 一覧表示 REST API を使用するか、組み込みロールを参照し、割り当てるロール定義の識別子を取得します。
GUID ツールを使用し、ロール割り当て識別子に使用する一意の識別子を生成します。 この識別子の形式は
00000000-0000-0000-0000-000000000000
になります。次の要求と本文から開始します。
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{ "properties": { "roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}", "principalId": "{principalId}" } }
URI の {scope} をロールの割り当てのスコープに変更します。
Scope Type providers/Microsoft.Management/managementGroups/{groupId1}
管理グループ subscriptions/{subscriptionId1}
サブスクリプション subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1
Resource group subscriptions/{subscriptionId1}/resourceGroups/myresourcegroup1/providers/microsoft.web/sites/mysite1
リソース 前の例で、microsoft.web は App Service インスタンスを参照するリソース プロバイダーです。 同様に、他の任意のリソース プロバイダーを使用してスコープを指定できます。 詳細については、「Azure リソース プロバイダーと種類」およびサポートされている「Azure リソース プロバイダーの操作」を参照してください。
{roleAssignmentId} を、ロールの割り当ての GUID 識別子に置き換えます。
要求本文内で、{scope} を URI と同じスコープに置き換えます。
{roleDefinitionId} を、ロールの定義の識別子に置き換えます。
{principalId} を、ロールが割り当てられるユーザー、グループ、またはサービス プリンシパルのオブジェクト識別子に置き換えます。
次の要求と本文では、サブスクリプションのスコープでユーザーにバックアップ リーダー ロールが割り当てられます。
PUT https://management.azure.com/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}"
}
}
出力例を次に示します。
{
"properties": {
"roleDefinitionId": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleDefinitions/a795c7a0-d4a2-40c1-ae25-d81f01202912",
"principalId": "{objectId1}",
"principalType": "User",
"scope": "/subscriptions/{subscriptionId1}",
"condition": null,
"conditionVersion": null,
"createdOn": "2022-05-06T23:55:23.7679147Z",
"updatedOn": "2022-05-06T23:55:23.7679147Z",
"createdBy": null,
"updatedBy": "{updatedByObjectId1}",
"delegatedManagedIdentityResourceId": null,
"description": null
},
"id": "/subscriptions/{subscriptionId1}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId1}",
"type": "Microsoft.Authorization/roleAssignments",
"name": "{roleAssignmentId1}"
}
新しいサービス プリンシパル
新しいサービス プリンシパルを作成し、そのサービス プリンシパルにロールをすぐに割り当てようとすると、場合によってはそのロールの割り当てが失敗することがあります。 たとえば、新しいマネージド ID を作成し、そのサービス プリンシパルにロールを割り当てようとすると、ロールの割り当てが失敗する可能性があります。 このエラーの原因は、レプリケーションの遅延である可能性があります。 サービス プリンシパルは 1 つのリージョンに作成されます。ただし、ロールの割り当ては、サービス プリンシパルがまだレプリケートされていない別のリージョンで発生する可能性があります。
このシナリオに対処するには、Role Assignments - Create REST API を使用し、principalType
プロパティを ServicePrincipal
に設定します。 また、apiVersion
を 2018-09-01-preview
以降に設定する必要もあります。 2022-04-01
は最初の安定版です。
PUT https://management.azure.com/{scope}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
"properties": {
"roleDefinitionId": "/{scope}/providers/Microsoft.Authorization/roleDefinitions/{roleDefinitionId}",
"principalId": "{principalId}",
"principalType": "ServicePrincipal"
}
}