You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:11:15