1

我有一个奇怪的问题,我需要一个优雅的解决方案。我正在使用需要登录服务(特别是 AWS CodeArtifact)的构建工具。当我通过 CLI 登录时,它会设置一个环境变量 - 我们称之为TOKEN. 当我运行任何构建时,它需要存在TOKEN才能进行身份验证。

现在,登录后,在相同的 shell 中构建工作,但显然,在新的 shell(不是子 shell)中构建失败,因为TOKEN当然没有定义。我正在寻找解决这个问题的方法;理想的解决方案是这样的:

  1. 登录shell:登录后,保存TOKEN~/.token
  2. 所有shell:每分钟运行一些设置TOKEN为值的东西~/.token

我有两个问题:

  • 这是最好的方法 - 还是有更优雅的方法?
  • 如果是这样,上述(2)的最佳方法是什么?

最后一个问题是,这是我将在他们的机器上分发给最终用户的东西,所以如果它易于编写脚本会很棒。

在此先感谢-保持安全!

4

1 回答 1

1

回答完问题 2 后,问题 1 的解决方案很简单:开始编写一个返回令牌的函数。

TOKEN=$(get_token)

第一个实现将重新计算一个新的令牌,而不进行任何缓存或共享。

您多久需要一次令牌?如果您不是每分钟都构建,则不需要每分钟刷新令牌的额外作业(cronjob)。在这种情况下,您可以通过调用函数在每次 api 调用之前刷新令牌。您不需要存储或共享它。
当您确实经常需要 TOKEN 时,您可以修改该功能。使用文件很简单,但您也可以使用其他解决方案,如服务器(当您希望远程主机上的令牌可用于已使用其他令牌标识的用户时)。
如何自动化获取新令牌的手动过程是下一个挑战。
您能找到一种不需要输入密码的方法(例如使用.aws/config或(更好地)为您的服务器分配正确的角色)?或者您是否需要编写调用脚本expect?
API 调用get-authorization-token需要 codeartifact:GetAuthorizationToken 和 sts:GetServiceBearerToken 权限。

于 2020-08-31T19:57:52.017 回答