REST API を使用して Azure ロールの割り当て条件を追加または編集する

Azure ロール割り当ての条件は、必要に応じてロール割り当てに追加し、細かなアクセス制御を行うことで、安全確認を強化するための仕組みです。 たとえば、特定のタグが設定されたオブジェクトしか読み取れない、という条件を設定できます。 この記事では、REST API を使用して、ロールの割り当ての条件を追加、編集、一覧表示、または削除する方法について説明します。

前提条件

次のバージョンを使用する必要があります。

  • 2020-03-01-preview 以降
  • ロール割り当てに description プロパティを活用する場合、2020-04-01-preview 以降
  • 2022-04-01 は最初の安定版です

ロール割り当ての条件を追加、編集するための要件は、条件の要件に関する記事をご覧ください。

条件の追加

ロールの割り当て条件を追加するには、ロールの割り当て - 作成 REST API を使用します。 ロールの割り当て - 作成 には、条件に関連する次のパラメーターが含まれています。

パラメーター Type Description
condition String ユーザーにアクセス許可を付与できる条件。
conditionVersion String 条件構文のバージョン。 conditionVersion なしで condition を指定した場合、バージョンは既定値の 2.0 に設定されます。

次の要求と本文を使用します。

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}",
        "condition": "{condition}",
        "conditionVersion": "2.0",
        "description": "{description}"
    }
}

次の例は、条件を使用してストレージ BLOB データ 閲覧者ロールを割り当てる方法を示しています。 この条件は、コンテナー名が 'blob-example-container' と等しいかどうかを確認します。

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container"
    }
}

出力例を次に示します。

{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "principalType": "User",
        "scope": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container'))",
        "conditionVersion": "2.0",
        "createdOn": "2022-07-20T06:20:44.0205560Z",
        "updatedOn": "2022-07-20T06:20:44.2955371Z",
        "createdBy": null,
        "updatedBy": "{updatedById}",
        "delegatedManagedIdentityResourceId": null,
        "description": "Read access if container name equals blobs-example-container"
    },
    "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}",
    "type": "Microsoft.Authorization/roleAssignments",
    "name": "{roleAssignmentId}"
}

条件を編集する

既存のロールの割り当て条件を編集するには、ロールの割り当て条件を追加する際に使用したのと同じ ロールの割り当て - 作成 REST API を使用します。 JSON ファイルで conditiondescription が更新される例を次に示します。 編集できるのは、conditionconditionVersiondescription のプロパティのみです。 既存のロールの割り当てと一致するように、他のプロパティを指定する必要があります。

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleAssignments/{roleAssignmentId}?api-version=2022-04-01
{
    "properties": {
        "roleDefinitionId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Authorization/roleDefinitions/2a2b9908-6ea1-4ae2-8e65-a410df84e7d1",
        "principalId": "{principalId}",
        "condition": "((!(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})) OR (@Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container' OR @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name] StringEquals 'blobs-example-container2'))",
        "conditionVersion": "2.0",
        "description": "Read access if container name equals blobs-example-container or blobs-example-container2"
    }
}

条件を一覧表示する

ロールの割り当て条件を一覧表示するには、ロールの割り当て Get または List REST API を使用します。 詳細については、「REST API を使用して Azure ロールの割り当てを一覧表示する」を参照してください。

条件の削除

ロールの割り当て条件を削除するには、ロールの割り当て条件を編集し、条件と条件バージョンの両方を空の文字列または null に設定します。

あるいは、ロールの割り当てとその条件の両方を削除する場合は、ロールの割り当て - 削除 API を使用できます。 詳細については、「Azure ロールの割り当ての削除」を参照してください。

次のステップ