问题描述
通过Python SDK收集所有订阅简略信息,例如订阅id 名称, 资源组及组内资源信息等,如何给Python应用赋予相应的权限才能获取到信息呢?在一个企业的账号中,同一个组织有一个相同的Tenant ID,每一个员工有一个独立的订阅号。默认情况下,一个订阅账号只能访问当前订阅下的资源,而当通过其他订阅共享权限后,就可以使用相同的代码查看其他订阅中资源使用信息。
解决办法
Python SDK身份验证大致分为三种:基于托管标识的验证、基于应用注册的clientid和clientsecret的验证、基于 CLI 的身份验证
基于托管标识的验证:把代码运行在Azure VM中,为Azure VM开启托管标识,然后给托管标识赋予其他订阅的权限,然后在该VM中即可使用DefaultAzureCredential 方法进行认证。
关于VM开启托管标识可以参考:https://docs.azure.cn/zh-cn/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm
基于应用注册的clientid和clientsecret的验证:通过AAD注册应用,并在Python代码中使用应用的Client ID 和Client Secret作为认证手段。可参考博文:Python代码通过AAD认证访问微软Azure密钥保管库(Azure Key Vault)中机密信息(Secret)中的注册AAD部分
基于 CLI 的身份验证:通过登录账户和密码的方式
注:根据文档描述Azure Cli 登录自 2018 年 8 月起,此令牌在不活动 90 天后将被撤销,但此值可由 Microsoft 或租户管理员更改。 令牌被撤销后,你会收到来自 CLI 的消息,指示你需要重新登录。详细请参考:https://docs.azure.cn/zh-cn/cli/authenticate-azure-cli?view=azure-cli-latest