AWS CodeArtifact令牌更新

14

我创建了AWS CodeArtifact仓库,使用aws codeartifact get-authorization-token命令获取了token,并将其正确设置到.m2/settings.xml中(我的项目使用maven作为构建工具和包管理器)。

问题在于token在12小时后会过期。这意味着我和所有开发项目的开发人员都必须获取新的token并将新的token设置到settings.xml文件中。 同样,ci/cd服务器也需要连接到CodeArtifact以便在构建后推送构件,因此也需要执行相同的操作。

必须有一种方法来解决这个问题,但不幸的是,我没有找到解决方案。


1
我也在想同样的问题。在我看来,部署应该像“mvn deploy”一样简单 - 运行所需的任何内容都应该在构建本身中自动化。肯定有比每12小时重新生成一个环境变量更好的方法。我看到有人使用的一种方式是使用Maven扩展动态重新创建存储库:https://stackoverflow.com/a/44540550/3634630也许插件更适合?不知道是否存在用于配置存储库的Maven插件API。 - brcolow
1
@Nemanja:你找到解决这个问题的合适方法了吗?我也处于同样的情况。 - fredde
1
我想澄清一下,我之所以谈论如何动态创建存储库,是因为我们可以使用与此聪明项目中使用的方法类似的方法,该项目与Gradle一起使用:https://github.com/unbroken-dome/gradle-aws-codeartifact-plugin - brcolow
1
我处于相同的情况。我最初尝试将命令添加到maven的所有阶段中,但这也不起作用。因此,我们只是推送了一个powershell文件,他们每天早上都必须运行它。我们可能会在任务计划程序/ cron tab中运行它。 - Chris Maggiulli
3个回答

3
为什么不直接使用 ~/.mavenrc 文件,并添加类似于这样的内容?
CA_TOKEN_FILE=~/.m2/.ca_token

# is our token file more than 12 hours old (or missing?)
if [[ $(find $CA_TOKEN_FILE -mmin -710 2> /dev/null) != $CA_TOKEN_FILE ]]; then
    # Do we need to refresh AWS creds?
    if ! aws sts get-caller-identity --profile default &> /dev/null; then
        # refresh your creds here
    fi

    echo "export CODEARTIFACT_AUTH_TOKEN=$(aws codeartifact get-authorization-token --domain <domain> --domain-owner <ownerid> --query authorizationToken --output text)" > $CA_TOKEN_FILE
fi
# source the env file
. $CA_TOKEN_FILE

AWS刷新是可选的,但通常会在必要时提示凭证。

您还需要将以下内容添加到.m2/settings.xml中:

<server>
    <id>ca-servername</id>
    <username>aws</username>
    <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
</server>

2
我已经制作了一个概念验证的Maven扩展,它自动获取并使用授权令牌为您的Maven项目设置存储库: https://github.com/brcolow/codeartifact-maven-extension 目前它还不是非常灵活。我特别注意记录了扩展程序应该如何设置(Codeartifact存储库和Maven中央上游配置,IAM配置文件凭据等)。目前它只能适用于单个用户/测试人员 - 就是我 :)。

-1

出于安全原因,您无法将令牌的生命周期延长超过12小时,但有方法可以使其更容易。

您可以更改settings.xml以利用环境变量。

    <server>
        <id>codeartifact</id>
        <username>aws</username>
        <password>${env.CODEARTIFACT_AUTH_TOKEN}</password>
    </server>

使用以下命令设置环境变量(Linux)

export CODEARTIFACT_AUTH_TOKEN=`aws codeartifact get-authorization-token ...`

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