Как включить аутентификацию для веб-сервиса ACI в службе машинного обучения Azure?

#azure #azure-machine-learning-service #azure-container-instances

#azure #azure-machine-learning-service #azure-container-instances

Вопрос:

Я могу развернуть службу прогнозирования машинного обучения Azure в своей рабочей области ws , используя синтаксис

 aciconfig = AciWebservice.deploy_configuration(cpu_cores=1, 
                                               memory_gb=8, 
                                               tags={"method" : "some method"}, 
                                               description='Predict something')
  

и затем

 service = Webservice.deploy_from_image(deployment_config = aciconfig,
                                       image = image,
                                       name = service_name,
                                       workspace = ws)
  

как описано в документации.
Однако при этом сервис становится общедоступным, а это не совсем оптимально.

Какой самый простой способ защитить службу ACI? Я понимаю, что передача auth_enabled=True параметра может выполнить задание, но тогда как я могу поручить клиенту (скажем, использующему curl или Postman) использовать службу впоследствии?

Ответ №1:

Смотрите здесь пример (на C #). Когда вы включите аутентификацию, вам нужно будет отправить ключ API в заголовке «Авторизация» в HTTP-запросе:

 client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authKey);
  

Смотрите здесь, как получить ключ.

Комментарии:

1. Если у нас есть несколько пользователей и / или приложений, которые будут использовать API, мы не должны предоставлять им всем один и тот же первичный ключ API. Как это сделать?

2. Вы могли бы, например, поставить управление Azure API впереди. learn.microsoft.com/en-us/azure/api-management

3. Да, я уже просмотрел Azure API Management, но было неясно, куда передавать основной токен. Не могли бы вы немного уточнить? Ценю это.

4. Смотрите здесь, как добавить HTTP-заголовок: learn.microsoft.com/en-us/azure/api-management/… Итак, вы должны выполнить авторизацию пользователя в API management, а затем заставить API mgmt вводить один и тот же первичный ключ для всех запросов к вашей серверной службе ML

Ответ №2:

Сначала извлеките первичный и вторичный ключи с помощью синтаксиса (Python), подобного

 service.get_keys()
  

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

 curl -H "Content-Type:application/json" -H "Authorization: Bearer <authKey>" -X POST -d '{"data": [some data]}' http://<url>:<port>/<method>
  

где <authKey> находится один из ключей, полученных выше.