Аутентификация функций Azure: Azure Active Directory: используйте группу безопасности для включения удостоверений (пользователей и субъектов-служб) для доступа к функции

У меня есть функция Azure с включенной проверкой подлинности Azure Active Directory (включая "Действие, которое необходимо предпринять, если запрос не прошел проверку подлинности" = "Войти с помощью Azure Active Directory"). Дополнительно опция "Требуется назначение пользователя?" участника службы, связанного с функцией Azure (sp_func), имеет значение "Да", чтобы в конечном итоге все в клиенте не могли выполнить функцию.

Цель состоит в том, чтобы иметь единую группу безопасности (которая может включать пользователей, а также участников служб), которая добавляется в "Пользователи и группы" процедуры sp_func, чтобы назначение группе решало, можно ли получить доступ к функции или нет. С пользователями это работает нормально, но не с участниками служб (sp_nonfunc). Чтобы они (sp_nonfunc) работали, я должен установить для них разрешения (sp_nonfunc), что в конечном итоге позволяет им взаимодействовать с функцией Azure независимо от того, назначены они (sp_nonfunc) группе или нет.

Возможно ли, что я могу просто добавить участника-службы (sp_nonfunc) в группу с добавлением группы в sp_func, а затем иметь возможность выполнять функцию с помощью sp_nonfunc (без предоставления явных разрешений для sp_nonfunc)?

РЕДАКТИРОВАТЬ: также кажется невозможным добавить sp_nonfunc к sp_func напрямую, даже если я определил собственный appRole в манифесте. В настоящее время кажется, что единственный способ - добавить разрешения на sp_nonfunc для sp_func, но этого я хочу избежать.

EDIT2: вот как я определил роль в манифесте sp_func

"appRoles": [
    {
        "allowedMemberTypes": [
            "Application"
        ],
        "displayName": "AzureFunctionAccess",
        "id": "xxx-xxx-xxx-xxx-xxx",
        "isEnabled": true,
        "description": "Access Azure Function.",
        "value": "AzureFunctionAccess"
    }
]

EDIT3: когда я не назначаю роль непосредственно sp_nonfunc, а просто добавляю sp_nonfunc в группу безопасности, которую я получаю, при запросе кhttps://login.microsoftonline.com/<tenant id>/oauth2/token с resource = Application ID URI зарегистрированного приложения sp_func:

{
    "error": "invalid_grant",
    "error_description": "AADSTS501051: Application 'xxx-xxx-xx-xx-xx'(xxx) is not assigned to a role for the application 'https://xxx'(xxx).\r\nTrace ID: xxx-xxx-xx-xx-xx\r\nCorrelation ID: xxx-xxx-xx-xx-xx\r\nTimestamp: xx-xx-xx xx:xx:xxZ",
    "error_codes": [
        501051
    ],
    "timestamp": "xx-xx-xx xx:xx:xxZ",
    "trace_id": "5xxx-xxx-xx-xx-xx",
    "correlation_id": "xxx-xxx-xx-xx-xx",
    "error_uri": "https://login.microsoftonline.com/error?code=501051"
}

1 ответ

Решение

Этот способ не сработает, чтобы использовать субъект-службу (в вашем случае sp_nonfunc) получить токен для функции app (sp_func) вам необходимо предоставить разрешение API для sp_nonfunc.

Перейдите к регистрации приложения, связанной с процедурой sp_nonfunc на портале -> API permissions -> добавить AzureFunctionAccess вы определили, наконец нажмите Grant admin consent for xxx кнопка.

Затем получите токен с потоком учетных данных клиента, он будет работать нормально. (Я использую конечную точку v2.0, если вы используете v1.0, она также будет работать.)

Для получения более подробной информации о шагах, которые я писал в этом посте ранее, вы можете обратиться к нему.