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

如何让dotnet restore使用nuget.config凭证访问AWS CodeArtifact?

解决方案:仅通过nuget.config存储凭证访问AWS CodeArtifact

AWS CodeArtifact的NuGet认证机制和GitHub Packages不同,不能直接将IAM Access Key/Secret Key写入nuget.config,但可以通过生成临时授权令牌的方式,将令牌存入nuget.config实现访问,具体步骤如下:

1. 生成AWS CodeArtifact授权令牌

使用AWS CLI执行以下命令生成有效期内的授权令牌(最长可设为12小时,示例设为15分钟):

aws codeartifact get-authorization-token --domain 你的域名 --domain-owner 你的AWS账户ID --region 你的区域(如eu-north-1) --duration-seconds 900

执行后会返回一个authorizationToken值,这就是我们需要的凭证。

2. 修改nuget.config配置

将nuget.config中的packageSourceCredentials部分修改为:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="codeartifact" value="https://{stuff}.codeartifact.eu-north-1.amazonaws.com/nuget/{stuff}/v3/index.json" />
  </packageSources>
  <packageSourceCredentials>
    <codeartifact>
      <add key="Username" value="aws" /> <!-- 此处固定为aws,不能替换为Access Key -->
      <add key="ClearTextPassword" value="生成的授权令牌" />
    </codeartifact>
  </packageSourceCredentials>
</configuration>

注意:Username必须固定为aws,这是AWS CodeArtifact要求的认证格式。

3. (可选)自动化令牌更新

由于授权令牌有有效期,你可以编写脚本自动完成令牌获取和nuget.config更新,避免手动重复操作。以PowerShell为例:

# 获取令牌
$token = aws codeartifact get-authorization-token --domain your-domain --domain-owner your-account-id --region eu-north-1 --duration-seconds 3600 --query authorizationToken --output text

# 更新nuget.config(假设文件路径为./nuget.config)
$configPath = "./nuget.config"
$xml = [xml](Get-Content $configPath)
$xml.configuration.packageSourceCredentials.codeartifact.add | Where-Object { $_.key -eq "ClearTextPassword" } | ForEach-Object { $_.value = $token }
$xml.Save($configPath)

为什么原配置无效?

AWS CodeArtifact并不支持直接使用IAM Access Key/Secret Key作为NuGet的用户名和密码,它要求使用专门的授权令牌完成认证。之前通过.aws/credentials能正常访问,是因为AWS CLI会自动获取临时令牌并注入到dotnet restore的请求中,而非直接使用文件里的Access Key。

内容的提问来源于stack exchange,提问作者Grimson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 22:33:17