如何使用Azure Go SDK操作角色分配?含特定主体分配列表查询
使用Azure Go SDK处理角色分配:查询特定主体的角色分配
核心依赖包
需要导入Azure身份认证包和授权管理包:
import ( "context" "fmt" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/authorization/armauthorization/v2" )
1. 创建角色分配客户端
利用默认Azure凭据(支持本地开发、Azure托管环境等多种认证场景)初始化客户端:
// 初始化默认凭据 cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { panic(err) // 实际项目中请替换为业务错误处理逻辑 } // 初始化角色分配客户端(替换为你的订阅ID) client, err := armauthorization.NewRoleAssignmentsClient("your-subscription-id", cred, nil) if err != nil { panic(err) }
2. 查询特定主体的角色分配
通过设置Filter参数,使用Azure RBAC的过滤语法assignedTo('<principal-id>')筛选目标主体的角色分配。你可以根据需要指定查询范围(订阅、资源组、资源等):
示例1:查询订阅范围内的角色分配
// 替换为目标主体的ID(用户/服务主体/组的Azure AD ID) principalID := "target-principal-id" filter := fmt.Sprintf("assignedTo('%s')", principalID) // 创建分页查询器 pager := client.NewListPager(&armauthorization.RoleAssignmentsClientListOptions{ Filter: &filter, }) // 遍历所有结果页 for pager.More() { page, err := pager.NextPage(context.TODO()) if err != nil { panic(err) } // 处理每个角色分配条目 for _, assignment := range page.Value { fmt.Printf("角色分配ID: %s\n", *assignment.ID) fmt.Printf("角色定义ID: %s\n", *assignment.Properties.RoleDefinitionID) fmt.Printf("主体ID: %s\n", *assignment.Properties.PrincipalID) fmt.Printf("作用范围: %s\n", *assignment.Properties.Scope) fmt.Println("---") } }
示例2:查询资源组范围内的角色分配
如果需要限定在特定资源组查询,使用NewListForResourceGroupPager方法:
resourceGroupName := "your-resource-group-name" pager := client.NewListForResourceGroupPager(resourceGroupName, &armauthorization.RoleAssignmentsClientListForResourceGroupOptions{ Filter: &filter, }) // 后续遍历逻辑同示例1
关键注意事项
- 权限要求:执行查询的身份需要具备
Microsoft.Authorization/roleAssignments/read权限,常见角色如Reader、Role Based Access Control Administrator都包含该权限。 - 过滤语法扩展:可以组合过滤条件,比如
assignedTo('<principal-id>')+and+atScope()仅查询当前范围(不包含继承的)角色分配。 - 获取主体ID:可以通过Azure CLI命令获取,比如查询用户ID:
az ad user show --id user@example.com --query id -o tsv
内容的提问来源于stack exchange,提问作者Matt Welke
相关产品推荐
相关产品推荐

