0

我正在尝试使用 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_idclient_idall 匹配我在活动目录中看到的内容。

我从 Microsoft 找到了以下帖子:first postsecond post,它们都使用了在尝试使用 a设置客户端时azure.mgmt.resource SubscriptionClient给出的。no attribute 'signed_session'CertificateCredentialCertificateCredential

我找到了以下适配器,用于将CertificateCredential此类与此客户端一起使用并尝试使用它,但它也给我在 next(sub_client.subscriptions.list) 调用中提供了相同的超时问题。

编辑:

我仍然看到这个问题,当在最大重试次数后事情完全超时时,我收到以下错误:

尝试的凭据:

EnvironmentCredential:身份验证失败:<urllib3.connection.HTTPSConnection object at 0x7fad94f116d8>:无法建立新连接:[Errno 110] 连接超时

我认为这不是环境问题,因为我可以从同一个实例登录到 Azure CLI。

4

0 回答 0