如何通过Azure DevOps SDK从服务连接获取凭证并连接AWS账户
从Azure DevOps服务连接中提取AWS凭证的实现方案
可以通过Azure DevOps SDK实现从AWS类型的服务连接中提取凭证,核心是借助官方REST API结合SDK的授权能力来获取可用凭证——SDK不会直接暴露明文敏感信息,需要通过指定API获取合法可使用的凭证数据。
核心步骤
- 先在扩展配置文件
vss-extension.json中声明必要权限:添加vso.serviceconnection_use或vso.serviceconnection_manage到scopes数组,确保扩展有权访问服务连接资源 - 使用SDK的
getHttpClient创建HTTP客户端,配合getAccessToken获取授权令牌,调用服务连接相关API - 优先调用
getcredentials接口获取临时AWS凭证,这是官方推荐的安全方式,避免直接处理存储的加密密钥
示例代码
import { getHttpClient, getAccessToken } from "azure-devops-extension-sdk"; export async function getAWSCredentials(serviceConnectionId: string, projectId: string) { try { // 初始化HTTP客户端与授权令牌 const httpClient = getHttpClient("https://dev.azure.com/"); const accessToken = await getAccessToken(); // 验证目标服务连接是否为AWS类型 const connectionDetailUrl = `/${projectId}/_apis/serviceendpoint/endpoints/${serviceConnectionId}?api-version=7.1-preview.4`; const serviceConnection = await httpClient.get(connectionDetailUrl, { headers: { Authorization: `Bearer ${accessToken}` } }); if (serviceConnection.type !== "aws") { throw new Error("目标服务连接并非AWS类型"); } // 获取可直接使用的AWS临时凭证 const credentialsUrl = `/${projectId}/_apis/serviceendpoint/endpoints/${serviceConnectionId}/getcredentials?api-version=7.1-preview.1`; const credentialsResp = await httpClient.post(credentialsUrl, {}, { headers: { Authorization: `Bearer ${accessToken}` } }); // 提取AWS连接所需的核心凭证 const awsCredentials = { accessKeyId: credentialsResp.data.accessKeyId, secretAccessKey: credentialsResp.data.secretAccessKey, sessionToken: credentialsResp.data.sessionToken // 临时凭证专属字段 }; console.log("获取到的AWS凭证:", awsCredentials); return awsCredentials; } catch (error) { console.error("获取AWS凭证失败:", error); throw error; } }
重要提示
- 不要尝试从
getService返回的对象中提取明文凭证,Azure DevOps会对敏感信息做加密处理,不会直接暴露 - 确保扩展申请的权限与实际操作匹配,权限不足会导致API调用返回403错误
- 使用
getcredentials接口获取的临时凭证有有效期限制,无需手动管理密钥轮换,安全性更高
内容的提问来源于stack exchange,提问作者Alejandro Cifuentes
相关产品推荐
相关产品推荐

