Управление назначениями настраиваемых атрибутов безопасности

Настраиваемые атрибуты безопасности в Microsoft Entra ID — это бизнес-атрибуты (пары "ключ—значение"), которые можно определить и назначить Microsoft Entra объектам. Эти атрибуты можно использовать для хранения информации, классификации объектов или применения детального контроля доступа к определенным ресурсам Azure с помощью управления доступом на основе атрибутов Azure (Azure ABAC).

Настраиваемые атрибуты безопасности поддерживаются только для пользователей и субъектов-служб. В этой статье приведены примеры назначения, обновления, перечисления или удаления различных типов настраиваемых атрибутов безопасности для пользователей и приложений с помощью Microsoft Graph.

Предварительные требования

Назначение настраиваемых атрибутов безопасности

Пример 1. Назначение пользовательского атрибута безопасности со строковым значением пользователю

В следующем примере показано, как использовать API update user для назначения пользовательского атрибута безопасности со строковым значением пользователю.

  • Набор атрибутов: Engineering
  • Атрибут: ProjectDate
  • Тип данных атрибута: строка
  • Значение атрибута: "2022-10-01"

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "ProjectDate":"2022-10-01"
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Пример 2. Назначение настраиваемого атрибута безопасности со строковым значением субъекту-службе

В следующем примере показано, как использовать API Update servicePrincipal для назначения пользовательского атрибута безопасности со строковым значением субъекту-службе.

  • Набор атрибутов: Engineering
  • Атрибут: ProjectDate
  • Тип данных атрибута: строка
  • Значение атрибута: "2022-10-01"

Запрос

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "ProjectDate":"2022-10-01"
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Пример 3. Назначение пользовательского атрибута безопасности с многостроковым значением пользователю

В следующем примере показано, как использовать API обновления пользователя для назначения пользовательского атрибута безопасности с многостроковым значением пользователю.

  • Набор атрибутов: Engineering
  • Атрибут: Project
  • Тип данных атрибута: коллекция строк
  • Значение атрибута: ["Baker","Cascade"]

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "Project@odata.type":"#Collection(String)",
            "Project":["Baker","Cascade"]
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Пример 4. Назначение пользовательского атрибута безопасности с целочисленным значением пользователю

В следующем примере показано, как использовать API обновления пользователя для назначения пользовательского атрибута безопасности с целочисленным значением пользователю.

  • Набор атрибутов: Engineering
  • Атрибут: NumVendors
  • Тип данных атрибута: Целое число
  • Значение атрибута: 4

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "NumVendors@odata.type":"#Int32",
            "NumVendors":4
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Пример 5. Назначение пользовательского атрибута безопасности с многочисленным значением пользователю

В следующем примере показано, как использовать API обновления пользователя для назначения пользовательского атрибута безопасности с многочисленным значением пользователю.

  • Набор атрибутов: Engineering
  • Атрибут: CostCenter
  • Тип данных атрибута: коллекция целых чисел
  • Значение атрибута: [1001,1003]

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "CostCenter@odata.type":"#Collection(Int32)",
            "CostCenter":[1001,1003]
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Пример 6. Назначение пользовательского атрибута безопасности с логическим значением пользователю

В следующем примере показано, как использовать API обновления пользователя для назначения пользовательского атрибута безопасности с логическим значением пользователю.

  • Набор атрибутов: Engineering
  • Атрибут: Certification
  • Тип данных атрибута: логический
  • Значение атрибута: true

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "Certification":true
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Обновление назначений настраиваемых атрибутов безопасности

Пример 1. Обновление назначения пользовательского атрибута безопасности целым числом для пользователя

В следующем примере показано, как использовать API обновления пользователя для обновления назначения настраиваемого атрибута безопасности целым числом для пользователя.

  • Набор атрибутов: Engineering
  • Атрибут: NumVendors
  • Тип данных атрибута: Целое число
  • Значение атрибута: 8

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "NumVendors@odata.type":"#Int32",
            "NumVendors":8
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Пример 2. Обновление назначения настраиваемого атрибута безопасности с помощью логического значения для пользователя

В следующем примере показано, как использовать API обновления пользователя для обновления назначения настраиваемого атрибута безопасности логическим значением для пользователя.

  • Набор атрибутов: Engineering
  • Атрибут: Certification
  • Тип данных атрибута: логический
  • Значение атрибута: false

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "Certification":false
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Список назначений настраиваемых атрибутов безопасности

Пример 1. Получение назначений настраиваемых атрибутов безопасности для пользователя

В следующем примере показано, как использовать API get user для получения настраиваемых назначений атрибутов безопасности для пользователя.

Атрибут №1

  • Набор атрибутов: Engineering
  • Атрибут: Project
  • Тип данных атрибута: коллекция строк
  • Значение атрибута: ["Baker","Cascade"]

Атрибут №2

  • Набор атрибутов: Engineering
  • Атрибут: CostCenter
  • Тип данных атрибута: коллекция целых чисел
  • Значение атрибута: [1001]

Атрибут №3

  • Набор атрибутов: Engineering
  • Атрибут: Certification
  • Тип данных атрибута: логический
  • Значение атрибута: true

Атрибут №4

  • Набор атрибутов: Marketing
  • Атрибут: EmployeeId
  • Тип данных атрибута: строка
  • Значение атрибута: "QN26904"

Запрос

GET https://graph.microsoft.com/v1.0/users/{id}?$select=customSecurityAttributes

Отклик

HTTP/1.1 200 OK

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(customSecurityAttributes)/$entity",
    "customSecurityAttributes": {
        "Marketing": {
            "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
            "EmployeeId": "QN26904"
        },
        "Engineering": {
            "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
            "Project@odata.type": "#Collection(String)",
            "Project": [
                "Baker",
                "Cascade"
            ],
            "CostCenter@odata.type": "#Collection(Int32)",
            "CostCenter": [
                1001
            ],
            "Certification": true
        }
    }
}

Если пользователю не назначены пользовательские атрибуты безопасности или если у вызывающего субъекта нет доступа, ответ будет следующим:

HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(customSecurityAttributes)/$entity",
    "customSecurityAttributes": null
}

Пример 2. Перечисление всех пользователей с пользовательским назначением атрибута безопасности, равным значению

В следующем примере показано, как использовать API списка пользователей для вывода списка всех пользователей с пользовательским назначением атрибута безопасности, равным значению. В этом примере извлекаются пользователи с настраиваемым атрибутом AppCountry безопасности со значением , равным Canada. Значение фильтра учитывает регистр. Необходимо добавить ConsistencyLevel=eventual в запрос или заголовок. Необходимо также включить, $count=true чтобы убедиться, что запрос маршрутизируется правильно.

Пользователь No 1

  • Набор атрибутов: Marketing
  • Атрибут: AppCountry
  • Тип данных атрибута: коллекция строк
  • Значение атрибута: ["India","Canada"]

Пользователь No 2

  • Набор атрибутов: Marketing
  • Атрибут: AppCountry
  • Тип данных атрибута: коллекция строк
  • Значение атрибута: ["Canada","Mexico"]

Запрос

GET https://graph.microsoft.com/v1.0/users?$count=true&$select=id,displayName,customSecurityAttributes&$filter=customSecurityAttributes/Marketing/AppCountry eq 'Canada'
ConsistencyLevel: eventual

Отклик

HTTP/1.1 200 OK

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,customSecurityAttributes)",
    "@odata.count": 2,
    "value": [
        {
            "id": "dbaf3778-4f81-4ea0-ac1c-502a293c12ac",
            "displayName": "Jiya",
            "customSecurityAttributes": {
                "Engineering": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "Datacenter@odata.type": "#Collection(String)",
                    "Datacenter": [
                        "India"
                    ]
                },
                "Marketing": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "AppCountry@odata.type": "#Collection(String)",
                    "AppCountry": [
                        "India",
                        "Canada"
                    ],
                    "EmployeeId": "KX19476"
                }
            }
        },
        {
            "id": "6bac433c-48c6-4213-a316-1428de32701b",
            "displayName": "Jana",
            "customSecurityAttributes": {
                "Marketing": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "AppCountry@odata.type": "#Collection(String)",
                    "AppCountry": [
                        "Canada",
                        "Mexico"
                    ],
                    "EmployeeId": "GS46982"
                }
            }
        }
    ]
}

Пример 3. Перечисление всех пользователей с пользовательским назначением атрибута безопасности, начинающимся со значения

В следующем примере показано, как использовать API списка пользователей для вывода списка всех пользователей с пользовательским назначением атрибута безопасности, начинающимся со значения. В этом примере извлекаются пользователи с настраиваемым атрибутом EmployeeId безопасности со значением, начинающимся с GS. Значение фильтра учитывает регистр. Необходимо добавить ConsistencyLevel=eventual в запрос или заголовок. Необходимо также включить, $count=true чтобы убедиться, что запрос маршрутизируется правильно.

Пользователь No 1

  • Набор атрибутов: Marketing
  • Атрибут: EmployeeId
  • Тип данных атрибута: строка
  • Значение атрибута: "KX19476"

Пользователь No 2

  • Набор атрибутов: Marketing
  • Атрибут: EmployeeId
  • Тип данных атрибута: строка
  • Значение атрибута: "GS46982"

Запрос

GET https://graph.microsoft.com/v1.0/users?$count=true&$select=id,displayName,customSecurityAttributes&$filter=startsWith(customSecurityAttributes/Marketing/EmployeeId,'GS')
ConsistencyLevel: eventual

Отклик

HTTP/1.1 200 OK

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,customSecurityAttributes)",
    "@odata.count": 1,
    "value": [
        {
            "id": "6bac433c-48c6-4213-a316-1428de32701b",
            "displayName": "Jana",
            "customSecurityAttributes": {
                "Marketing": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "AppCountry@odata.type": "#Collection(String)",
                    "AppCountry": [
                        "Canada",
                        "Mexico"
                    ],
                    "EmployeeId": "GS46982"
                }
            }
        }
    ]
}

Пример 4. Вывод списка всех пользователей с пользовательским назначением атрибута безопасности, которое не равно значению

В следующем примере показано, как использовать API списка пользователей для вывода списка всех пользователей с пользовательским назначением атрибута безопасности, которое не равно значению. В этом примере извлекаются пользователи с настраиваемым атрибутом AppCountry безопасности со значением, не равным Canada. Значение фильтра учитывает регистр. Необходимо добавить ConsistencyLevel=eventual в запрос или заголовок. Необходимо также включить, $count=true чтобы убедиться, что запрос маршрутизируется правильно.

Пользователь No 1

  • Набор атрибутов: Marketing
  • Атрибут: AppCountry
  • Тип данных атрибута: коллекция строк
  • Значение атрибута: ["France"]

Все остальные пользователи

  • AppCountry атрибут не добавлен

Запрос

GET https://graph.microsoft.com/v1.0/users?$count=true&$select=id,displayName,customSecurityAttributes&$filter=customSecurityAttributes/Marketing/AppCountry ne 'Canada'
ConsistencyLevel: eventual

Отклик

HTTP/1.1 200 OK

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users(id,displayName,customSecurityAttributes)",
    "@odata.count": 32,
    "value": [
        {
            "id": "c4f9ecd3-d3c1-4544-b49a-bc9bb62beb67",
            "displayName": "Alain",
            "customSecurityAttributes": null
        },
        {
            "id": "de4f1218-b0fb-4449-b3a0-1e1dd193e6e7",
            "displayName": "Joe",
            "customSecurityAttributes": {
                "Engineering": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "Project3@odata.type": "#Collection(String)",
                    "Project3": [
                        "Baker",
                        "Cascade"
                    ],
                    "CostCenter@odata.type": "#Collection(Int32)",
                    "CostCenter": [
                        1001
                    ],
                    "Certification": true
                },
                "Marketing": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "EmployeeId": "QN26904"
                }
            }
        },
        {
            "id": "f24d1474-ded5-432d-be08-8abd39921aac",
            "displayName": "Isabella",
            "customSecurityAttributes": {
                "Marketing": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "AppCountry@odata.type": "#Collection(String)",
                    "AppCountry": [
                        "France"
                    ]
                }
            }
        },
        {
            "id": "849e81fe-1109-4d57-9536-a25d537eec1f",
            "displayName": "Dara",
            "customSecurityAttributes": {
                "Engineering": {
                    "@odata.type": "#microsoft.graph.customSecurityAttributeValue",
                    "ProjectDate": "2023-04-12"
                }
            }
        },
        {
            "id": "42c88239-db99-45f0-85af-cbb6c8acb2a3",
            "displayName": "Chandra",
            "customSecurityAttributes": null
        }
    ]
}

Удаление назначений настраиваемых атрибутов безопасности

Пример 1. Удаление однозначного назначения пользовательского атрибута безопасности от пользователя

В следующем примере показано, как с помощью API обновления пользователя удалить пользовательское назначение пользовательского атрибута безопасности, поддерживающее одно значение, от пользователя.

  • Набор атрибутов: Engineering
  • Атрибут: ProjectDate
  • Значение атрибута: null

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "ProjectDate":null
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Пример 2. Удаление многозначного назначения настраиваемых атрибутов безопасности от пользователя

В следующем примере показано, как использовать API обновления пользователя для удаления настраиваемого назначения атрибута безопасности, поддерживающего несколько значений, от пользователя.

  • Набор атрибутов: Engineering
  • Атрибут: Project
  • Значение атрибута: []

Запрос

PATCH https://graph.microsoft.com/v1.0/users/{id}
Content-type: application/json

{
    "customSecurityAttributes":
    {
        "Engineering":
        {
            "@odata.type":"#Microsoft.DirectoryServices.CustomSecurityAttributeValue",
            "Project":[]
        }
    }
}

Отклик

HTTP/1.1 204 No Content

Следующее действие