如何使用Go代码根据存储账户名称等参数获取Azure存储账户密钥
实现思路
az storage account keys list本质是调用Azure资源管理器(ARM)的存储账户管理接口,属于控制平面接口,不需要提前持有存储账户密钥,只需调用身份具有目标存储账户的Microsoft.Storage/storageAccounts/listKeys/action权限即可(存储账户参与者、订阅参与者等默认角色均包含该权限)。- Go语言实现依赖Azure官方的ARM存储管理SDK和身份认证SDK,不需要自行封装API请求。其中
azidentity包提供和Azure CLI对齐的默认认证逻辑,支持Azure CLI登录身份、托管身份、服务主体等多种认证方式,无需额外配置即可适配不同运行环境。 - 核心流程:初始化Azure AD身份凭据 -> 初始化存储账户管理客户端 -> 调用ListKeys方法传入资源组、存储账户名 -> 解析返回结果获取存储账户访问密钥。
依赖安装
执行如下命令安装所需依赖:
go get github.com/Azure/azure-sdk-for-go/sdk/azidentity go get github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage
完整示例代码
package main import ( "context" "log" "github.com/Azure/azure-sdk-for-go/sdk/azidentity" "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage" ) func main() { // 替换为实际参数 subscriptionID := "你的Azure订阅ID" resourceGroupName := "存储账户所属资源组名" storageAccountName := "目标存储账户名" // 初始化默认凭据,优先级读取:环境变量服务主体配置 > 本地Azure CLI登录身份 > 云服务托管身份 cred, err := azidentity.NewDefaultAzureCredential(nil) if err != nil { log.Fatalf("初始化身份凭据失败: %v", err) } // 初始化存储账户管理客户端 accountClient, err := armstorage.NewAccountsClient(subscriptionID, cred, nil) if err != nil { log.Fatalf("初始化存储账户管理客户端失败: %v", err) } // 调用接口获取密钥 keyResp, err := accountClient.ListKeys(context.TODO(), resourceGroupName, storageAccountName, nil) if err != nil { log.Fatalf("拉取存储账户密钥失败: %v", err) } // 输出密钥 log.Println("存储账户访问密钥如下:") for idx, key := range keyResp.Keys { if key.KeyName != nil && key.Value != nil { log.Printf("密钥%d | 名称: %s | 值: %s", idx+1, *key.KeyName, *key.Value) } } }
使用说明
- 本地调试时执行
az login登录对应Azure租户即可直接运行,无需额外配置身份信息。 - 在Azure云服务(VM、函数应用、容器应用等)运行时,给服务分配系统托管身份并授予对应存储账户的列表密钥权限,代码无需修改即可自动获取身份运行。
- 拿到密钥后即可初始化存储数据平面客户端,执行Blob、文件存储等相关操作。
内容的提问来源于stack exchange,提问作者Neel
相关产品推荐
相关产品推荐

