Ошибка SSL в azureml при создании конвейера с помощью Python SDK v1

Вопрос или проблема

Однажды все было хорошо, но на следующий день я начал сталкиваться с проблемами при использовании Python SDK azureml v1 для отправки заданий конвейера с моего локального компьютера в рабочую область Azure Machine Learning Studio. У меня начали появляться ошибки SSL. Я создал минимальное задание конвейера, чтобы воспроизвести ошибку. Этот код просто создает задание конвейера с одним шагом, с токен-скриптом под названием “script.py”, который ничего не делает.

Можно ли игнорировать проверку SSL где-то, или, может, как-то исправить это, не игнорируя проверку?

Версии библиотек:

azureml-core 1.55.0
azureml-pipeline 1.55.0

Вот мой минимальный код:

from azureml.core import Workspace, Environment, Experiment
from azureml.pipeline.steps import PythonScriptStep
from azureml.core.runconfig import RunConfiguration
from azureml.pipeline.core import Pipeline

subscription_id = <SUBSCRIPTION_ID>
resource_group = <RESOURCE_GROUP>
workspace_name = <WORKSPACE_NAME>

ws = Workspace(subscription_id, resource_group, workspace_name)

compute_target="my_compute_target"
runconfig = RunConfiguration()
runconfig.target = compute_target
curated_environment = Environment.get(workspace=ws, name="myenv")
runconfig.environment = curated_environment

step = PythonScriptStep(
    script_name="script.py",
    source_directory='.',
    runconfig=runconfig,
    allow_reuse=False,
)

pipeline = Pipeline(workspace=ws, steps=[step])
pipeline_run = Experiment(ws, 'token_experiment').submit(pipeline)

Вот сообщение об ошибке:

Traceback (most recent call last):
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 715, in urlopen
    httplib_response = self._make_request(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 404, in _make_request
    self._validate_conn(conn)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 1058, in _validate_conn
    conn.connect()
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connection.py", line 419, in connect
    self.sock = ssl_wrap_socket(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\util\ssl_.py", line 449, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\ssl.py", line 1073, in _create
    self.do_handshake()
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\ssl.py", line 1342, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1131)

Во время обработки вышеупомянутого исключения возникло другое исключение:

Traceback (most recent call last):
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\adapters.py", line 486, in send
    resp = conn.urlopen(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 799, in urlopen
    retries = retries.increment(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\util\retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host="brazilsouth.api.azureml.ms", port=443): Max retries exceeded with url: /rp/workspaces/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace_name>/computes?$skipToken=W3sidG9rZW4iOiIrUklEOn5nNTExQU13bVlTSmlLR1lBQUFBQUFBPT0jUlQ6MSNUUkM6MTAjSVNWOjIjSUVPOjY1NTUxI1FDRjo4I0ZQQzpBZ0tZQVo4Qm1BRUVBR0tvUEkrZkFRUUF4YU9FbXc9PSIsInJhbmdlIjp7Im1pbiI6IiIsIm1heCI6IkZGIn19XQ&api-version=2020-02-02 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1131)')))

Во время обработки вышеупомянутого исключения возникло другое исключение:

Traceback (most recent call last):
  File "token_pipeline.py", line 35, in <module>
    pipeline = Pipeline(workspace=ws, steps=[step])
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\core\_experiment_method.py", line 104, in wrapper
    return init_func(self, *args, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\pipeline.py", line 180, in __init__
    self._graph = self._graph_builder.build(self._name, steps, finalize=False)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\builder.py", line 1497, in build
    graph = self.construct(name, steps)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\builder.py", line 1519, in construct
    self.process_collection(steps)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\builder.py", line 1555, in process_collection
    builder.process_collection(collection)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\builder.py", line 1845, in process_collection
    self._base_builder.process_collection(item)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\builder.py", line 1549, in process_collection
    return self.process_step(collection)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\builder.py", line 1593, in process_step
    node = step.create_node(self._graph, self._default_datastore, self._context)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\steps\python_script_step.py", line 243, in create_node
    return super(PythonScriptStep, self).create_node(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\_python_script_step_base.py", line 150, in create_node
    compute_target_name, compute_target_type, compute_target_object = _PythonScriptStepBase.\
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\_python_script_step_base.py", line 214, in _extract_compute_target_params
    compute_target_object = context.get_target(compute_target_name)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\pipeline\core\_graph_context.py", line 60, in get_target
    self._targets = self._workspace.compute_targets
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\core\workspace.py", line 1069, in compute_targets
    compute_target.name: compute_target for compute_target in ComputeTarget.list(self)}
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\core\compute\compute.py", line 519, in list
    paginated_results = get_paginated_compute_results(result_list, headers)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\_compute\_util.py", line 46, in get_paginated_compute_results
    resp = ClientBase._execute_func(get_requests_session().get, next_link, headers=headers)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\_restclient\clientbase.py", line 375, in _execute_func
    return cls._execute_func_internal(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\_restclient\clientbase.py", line 368, in _execute_func_internal
    left_retry = cls._handle_retry(back_off, left_retry, total_retry, error, logger, func)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\_restclient\clientbase.py", line 400, in _handle_retry
    raise error
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\_restclient\clientbase.py", line 359, in _execute_func_internal
    response = func(*args, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\sessions.py", line 602, in get
    return self.request("GET", url, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\adapters.py", line 517, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host="brazilsouth.api.azureml.ms", port=443): Max retries exceeded with url: /rp/workspaces/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.MachineLearningServices/workspaces/<workspace_name>/computes?$skipToken=W3sidG9rZW4iOiIrUklEOn5nNTExQU13bVlTSmlLR1lBQUFBQUFBPT0jUlQ6MSNUUkM6MTAjSVNWOjIjSUVPOjY1NTUxI1FDRjo4I0ZQQzpBZ0tZQVo4Qm1BRUVBR0tvUEkrZkFRUUF4YU9FbXc9PSIsInJhbmdlIjp7Im1pbiI6IiIsIm1heCI6IkZGIn19XQ&api-version=2020-02-02 (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1131)')))

(myenv) C:\Users\myuser\token_pipeline>python token_pipeline.py
Traceback (most recent call last):
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 715, in urlopen
    httplib_response = self._make_request(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 404, in _make_request
    self._validate_conn(conn)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 1058, in _validate_conn
    conn.connect()
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connection.py", line 419, in connect
    self.sock = ssl_wrap_socket(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\util\ssl_.py", line 449, in ssl_wrap_socket
    ssl_sock = _ssl_wrap_socket_impl(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\util\ssl_.py", line 493, in _ssl_wrap_socket_impl
    return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\ssl.py", line 500, in wrap_socket
    return self.sslsocket_class._create(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\ssl.py", line 1073, in _create
    self.do_handshake()
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\ssl.py", line 1342, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1131)

Во время обработки вышеупомянутого исключения возникло другое исключение:

Traceback (most recent call last):
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\adapters.py", line 486, in send
    resp = conn.urlopen(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\connectionpool.py", line 799, in urlopen
    retries = retries.increment(
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\urllib3\util\retry.py", line 592, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host="brazilsouth.experiments.azureml.net", port=443): Max retries exceeded with url: /environment/v1.0/subscriptions/b5d6fe63-452f-433a-9bb3-53f751969cc9/resourceGroups/rg-sbx-pocd-brazilsouth/providers/Microsoft.MachineLearningServices/workspaces/mlw-sbx-pocd-brazilsouth/environments/myenv (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1131)')))

Во время обработки вышеупомянутого исключения возникло другое исключение:

Traceback (most recent call last):
  File "token_pipeline.py", line 25, in <module>
    curated_environment = Environment.get(workspace=ws, name="myenv")
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\core\environment.py", line 1158, in get
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\azureml\_restclient\environment_client.py", line 36, in _get_environment_definition
    response = requests.get(environment_url, headers=headers)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\api.py", line 73, in get
    return request("get", url, params=params, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\api.py", line 59, in request
    return session.request(method=method, url=url, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\sessions.py", line 589, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\sessions.py", line 703, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\myuser\AppData\Local\miniforge3\envs\myenv\lib\site-packages\requests\adapters.py", line 517, in send
    raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host="brazilsouth.experiments.azureml.net", port=443): Max retries exceeded with url: /environment/v1.0/subscriptions/b5d6fe63-452f-433a-9bb3-53f751969cc9/resourceGroups/rg-sbx-pocd-brazilsouth/providers/Microsoft.MachineLearningServices/workspaces/mlw-sbx-pocd-brazilsouth/environments/myenv (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self-signed certificate in certificate chain (_ssl.c:1131)')))

Ответ или решение

В данной ситуации вы сталкиваетесь с ошибкой SSL, связанной с самоподписанными сертификатами при использовании Azure Machine Learning SDK в Python (версии 1.x). Ошибка SSLCertVerificationError указывает на то, что ваша локальная машина не доверяет сертификату, который используется для обеспечения безопасного соединения с сервисами Azure.

Возможные решения проблемы:

1. Убедитесь в правильности сертификатов

Наиболее предпочтительное решение – это удостовериться, что сертификаты на вашей локальной машине обновлены и корректны. Убедитесь, что ваша версия библиотеки certifi, которая используется для проверки SSL сертификатов, актуальна:

pip install --upgrade certifi

2. Настройка переменных окружения

Если вы находитесь в корпоративной сети или используете локальный прокси-сервер, возможно, ваш сетевой администратор требует дополнительной настройки. В таких случаях вам может быть необходимо указать переменные окружения для импортирования необходимых сертификатов:

set SSL_CERT_FILE=<path_to_certifi_certificates>

где <path_to_certifi_certificates> должен указывать на файл сертификатов из вашей установки certifi.

3. Игнорирование проверки SSL (не рекомендуется)

Если предыдущие шаги не помогли, вы можете временно отключить проверку SSL. Однако это решение небезопасно и не рекомендуется для производственной среды. Для этого можно добавить следующие строки в свой код:

import os
os.environ['CURL_SSL_BACKEND'] = 'secure-transport'  # Если на Mac
os.environ['REQUESTS_CA_BUNDLE'] = '/path/to/your/certificate.pem'  # Укажите свой сертификат

Или просто игнорировать ошибки SSL:

import requests
from requests.packages.urllib3.exceptions import InsecureRequestWarning

# Игнорировать предупреждения о SSL сертификате
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

response = requests.get('your_url', verify=False)

Важно: Игнорирование проверки сертификатов может подвергать ваши данные риску, а также не рекомендуется использовать в рабочей среде.

4. Проверка надстроек прокси

Если ваш интернет-трафик проходит через прокси-сервер, убедитесь, что настройки прокси корректно настроены в AzureML и Python. Вы можете указать прокси в коде:

import os
os.environ['HTTP_PROXY'] = "http://user:pass@proxy:port"
os.environ['HTTPS_PROXY'] = "http://user:pass@proxy:port"

Заключение

Если ни одно из указанных выше решений не помогло устранить вашу ошибку, вам стоит обратиться к вашему сетевому администратору или в службу поддержки Azure. Они смогут диагностировать проблемы с сертификатами и сетевыми настройками более тщательно. Убедитесь также, что ваша версия SDK и другие зависимости актуальны, так как с помощью обновлений могут закладываться важные исправления безопасности.

Оцените материал
Добавить комментарий

Капча загружается...