我正在尝试使用 python SDK 进行身份验证以提取 Azure VNet 数据。
作为验证我可以进行身份验证的第一步,我正在尝试使用订阅客户端来列出订阅。我正在创建一个用于身份验证的证书凭据。
当我调用从订阅客户端列出订阅时,调用似乎无限期挂起,没有返回错误。我正在尝试向 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
all 匹配我在活动目录中看到的内容。
我从 Microsoft 找到了以下帖子:first post和second post,它们都使用了在尝试使用 a设置客户端时azure.mgmt.resource
SubscriptionClient
给出的。no attribute 'signed_session'
CertificateCredential
CertificateCredential
我找到了以下适配器,用于将CertificateCredential
此类与此客户端一起使用并尝试使用它,但它也给我在 next(sub_client.subscriptions.list) 调用中提供了相同的超时问题。
编辑:
我仍然看到这个问题,当在最大重试次数后事情完全超时时,我收到以下错误:
尝试的凭据:
EnvironmentCredential:身份验证失败:<urllib3.connection.HTTPSConnection object at 0x7fad94f116d8>:无法建立新连接:[Errno 110] 连接超时
我认为这不是环境问题,因为我可以从同一个实例登录到 Azure CLI。