无法从GitHub动作中使用AWS CodeArtifact进行身份验证

4

我无法在GitHub操作中从AWS CodeArtifact进行身份验证。 AWS的响应始终是401。

我正在执行以下步骤:

    steps:
    - name: Configure AWS credentials
      uses: aws-actions/configure-aws-credentials@v1
      with:
        aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
        aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        aws-region: ${{ secrets.AWS_REGION }}

    - run: aws configure --profile my-custom-profile set region ${{ secrets.AWS_REGION }}
    - run: aws configure --profile my-custom-profile set role_arn ${{ secrets.AWS_ARN }}
    - run: aws configure --profile my-custom-profile set source_profile default
    - run: dotnet tool install -g AWS.CodeArtifact.NuGet.CredentialProvider
    - run: dotnet codeartifact-creds install
    - run: dotnet codeartifact-creds configure set profile my-custom-profile

    - uses: actions/checkout@v2
    
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 5.0.100

    - name: Restore dependencies
      run: dotnet restore

我的问题是在dotnet restore这一行总是出现错误:

enter image description here

请问有没有人能够建议我哪些步骤做错了或者遗漏了?

顺便说一下:在这之前,虽然花了一些时间,但我最终成功地在我的本地Windows开发机上运行了它。所以我保存的凭据似乎是有效的。

1个回答

4
以下是在 GitHub action 中进行 AWS CodeArtifact 验证的步骤:

高级步骤

  • 创建一个带有 [default] 档案/凭据的 ./aws/credentials
  • 创建一个带有特定 AWS CodeArtifact 凭据的 config 文件。
  • 从 AWS CodeArtifact 获取身份验证令牌。
  • 将此身份验证令牌保存到环境变量中。
  • 拉取所有的代码。这需要在开始使用 "nuget sources" 之前完成。
  • 手动将 AWS CodeArtifact nuget 源添加到您的 nuget 源中,并附带身份验证令牌。
  • 检查 AWS CodeArtifact 是否现在在 nuget 源列表中。
  • 运行 dotnet restore 命令。

GitHub action 代码

注意:将类似于 <domain><some-id> 等内容替换为您自己的自定义 AWS 设置等内容。

    - run: |
        echo '[default]' >> ~/.aws/credentials
        echo 'aws_access_key_id=${{ secrets.AWS_ACCESS_KEY_ID }}' >> ~/.aws/credentials
        echo 'aws_secret_access_key=${{ secrets.AWS_SECRET_ACCESS_KEY }}' >> ~/.aws/credentials

    - run: |
        aws configure --profile nuget-read set region us-east-1
        aws configure --profile nuget-read set role_arn arn:aws:iam::<some-id>:role/nuget-read
        aws configure --profile nuget-read set source_profile default
        aws configure list

    - run: aws codeartifact get-authorization-token --domain <some domain> --profile nuget-read > at.json
    - run: echo "AUTH_TOKEN= $(jq '.authorizationToken' at.json)" >> $GITHUB_ENV

    - uses: actions/checkout@v2

    - run: dotnet nuget add source https://<domain>-<id>.d.codeartifact.<aws region>.amazonaws.com/nuget/cosmos-nuget/v3/index.json --name <name of this nuget source. It can be anything> --password ${{ env.AUTH_TOKEN }} --username aws --store-password-in-clear-text

    - run: dotnet nuget list source

    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 5.0.100
    
    - name: Restore dependencies
      run: dotnet restore

注意在手动添加nuget源时的--store-password-in-clear-text。这是很糟糕的,但至少在Linux机器上需要这么做才能工作。否则,它将无法添加该源,因为它不知道如何加密密码。


因此可能有更好的方法来解决这个问题,但至少现在它可以工作了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接