问题描述
分享使用Python 代码列举出全部 Azure App Service 的证书信息。
最关键的信息是证书的过期时间,如果即将过期,可以及时发现并更新证书,避免因证书而导致站点不可访问。
代码示例:
from azure.identity import ClientSecretCredential from azure.identity import AzureAuthorityHosts from azure.mgmt.web import WebSiteManagementClient # import logging # logging.basicConfig(level=logging.DEBUG) # logging.getLogger("azure.core.pipeline.policies.http_logging_policy").setLevel(logging.DEBUG) client_id=" " client_secret=" " tenant_id="" # sdk ClientSecretCredential 方式认证 credentials = ClientSecretCredential( client_id=client_id, client_secret=client_secret, tenant_id=tenant_id, authority=AzureAuthorityHosts.AZURE_CHINA ) webapp_client = WebSiteManagementClient(credentials,subscription_id=" ",base_url="https://management.chinacloudapi.cn", credential_scopes=["https://management.chinacloudapi.cn/.default"]) certificates = webapp_client.certificates.list_by_resource_group(resource_group_name="<your resource group name>") print("Certificates in resource group :") for i in certificates: # print(i.as_dict()) print( i.thumbprint, i.expiration_date,i.name)
执行的结果
代码解答
这段脚本使用 Azure SDK for Python(azure-identity 与 azure-mgmt-web)在 Azure 中国(21V) 环境下,通过客户端机密方式获取管理访问令牌,然后调用 WebSiteManagementClient 列出某个资源组中的 App Service 证书(certificates.list_by_resource_group),并打印每个证书的 指纹(thumbprint)、到期时间(expiration_date) 和 资源名称(name)。
代码采用了中国区Azure 管理终结点与 Authority Host,这是在中国云环境下正确的做法。
逐行解答
# import logging
# logging.basicConfig(level=logging.DEBUG)
# logging.getLogger("azure.core.pipeline.policies.http_logging_policy").setLevel(logging.DEBUG)
这是Python代码的日志配置,如果打开,可观察 SDK 发送的 HTTP 请求/响应流水,非常便于排查权限或终结点问题
开启日志后的输出效果图:
credentials = ClientSecretCredential(
client_id=client_id,
client_secret=client_secret,
tenant_id=tenant_id,
authority=AzureAuthorityHosts.AZURE_CHINA
)
通过 ClientSecretCredential 获取令牌,authority=AzureAuthorityHosts.AZURE_CHINA 指定中国区Azure的 AAD 发行者(login.partner.microsoftonline.cn)。没有这个设置,中国区Azure环境下会因 authority 不匹配导致无法获取令牌
webapp_client = WebSiteManagementClient(
credentials,
subscription_id="your subscription id",
base_url="https://management.chinacloudapi.cn",
credential_scopes=["https://management.chinacloudapi.cn/.default"]
)
初始化App Service 管理对象 webapp_client。关键点:
- subscription_id:目标订阅。
- base_url:Mooncake 的 **资源管理器(ARM)**终结点(非全球 management.azure.com)。
- credential_scopes:令牌的 资源范围,在中国云应请求 https://management.chinacloudapi.cn/.default。这与公共云的 https://management.azure.com/.default 不同。
certificates = webapp_client.certificates.list_by_resource_group(resource_group_name="<your resource group>")
调用证书管理 API,列出资源组 (需要用真实的值替换 <your resource group>)下的所有 App Service Certificates(包括上传到 App Service 的私有证书)。
参考资料
[无]
当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!