#python #azure #azure-authentication #azure-sdk-python #azure-gov
Вопрос:
Я пытаюсь пройти аутентификацию с помощью python SDK для извлечения данных виртуальной сети Azure.
В качестве первого шага для проверки того, что я могу аутентифицировать, я пытаюсь использовать клиент подписки для составления списка подписок. Я создаю учетные данные сертификата для использования для аутентификации.
Когда я звоню, чтобы перечислить подписки от клиента подписки, вызов зависает, по-видимому, на неопределенный срок без возвращенной ошибки. Я пытаюсь аутентифицироваться на azure_gov. Вот код:
import logging
import os
import boto3
from msrestazure.azure_cloud import AZURE_US_GOV_CLOUD as CLOUD
from azure.identity import CertificateCredential
from azure.mgmt.subscription import SubscriptionClient
# Setup logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logging.basicConfig(level=logging.INFO)
# Constants
CERT_PATH = '/tmp/cert.pem'
AZURE_CERT_PATH = '/tmp/cert.pem'
AZURE_TENANT_ID = os.environ['AZURE_TENANT_ID']
AZURE_CLIENT_ID = os.environ['AZURE_CLIENT_ID']
AZURE_SDK_S3_BUCKET = os.environ['AZURE_SDK_S3_BUCKET']
s3 = boto3.client('s3')
s3.download_file(AZURE_SDK_S3_BUCKET, 'certs/cert.pem', CERT_PATH)
# Setup Azure credentials
credential = CertificateCredential(
tenant_id=AZURE_TENANT_ID,
client_id=AZURE_CLIENT_ID,
certificate_path=AZURE_CERT_PATH,
authority=CLOUD.endpoints.active_directory)
logger.info(f'tenant_id = {AZURE_TENANT_ID}, client_id = {AZURE_CLIENT_ID}')
logger.info(f'CLOUD: {CLOUD}')
sub_client = SubscriptionClient(
credential=credential,
base_url=CLOUD.endpoints.resource_manager)
#Code times out here
subscription = next(sub_client.subscriptions.list())
logger.info(f'Fetched subscription {subscription.subscription_id}')
Я несколько раз проверял, что все cert
tenant_id
, и client_id
все совпадают с тем, что я вижу в active directory.
Я нашел следующие сообщения от Microsoft: первое сообщение и второе сообщение, которые оба используют azure.mgmt.resource
SubscriptionClient
, что дает no attribute 'signed_session'
CertificateCredential
при попытке использовать a CertificateCredential
для настройки клиента.
Я нашел следующий адаптер для использования CertificateCredential
класса с этим клиентом и попытался использовать его, но он также выдает мне ту же проблему с таймаутом при следующем вызове(sub_client.subscriptions.list).
Редактировать:
Я все еще вижу проблемы с этим, когда время ожидания полностью истекает после максимального количества повторных попыток, я получаю следующую ошибку:
Попытка проверки учетных данных:
Данные среды: Не удалось выполнить проверку подлинности: Объект HTTPSConnection в 0x7fad94f116d8>: Не удалось установить новое соединение: [Ошибка 110] Время ожидания соединения истекло
Я не думаю, что это проблема среды, так как я могу войти в Azure CLI из того же экземпляра.
Комментарии:
1. «нет атрибута «signed_session»» означает, что вы используете старый ресурс azure-mgmt. Чтобы azure-identity работала, вам нужна как минимум версия 15.0.0 (последняя версия, тем лучше). В случае сомнений, пожалуйста, создайте проблему github.com/Azure/azure-sdk-for-python/issues
2. Это устраняет проблему, которую я видел с «без атрибута» signed_session»», так что спасибо, но я все еще вижу, что соединение просто зависает, и я не уверен, почему.