问题描述
我有一个奇怪的问题,我需要一个优雅的解决方案。我使用的构建工具需要登录到服务(特别是AWS CodeArtifact)。当我通过CLI登录时,它设置了一个环境变量-我们称之为TOKEN
。当我运行任何构建时,都需要存在TOKEN
进行身份验证。
现在,登录后,建立相同的外壳程序工作,但是显然,由于TOKEN
当然没有定义,因此建立新的外壳程序(不是子外壳程序)会失败。我正在寻找解决这个问题的方法;理想的解决方案是执行以下操作:
我有2个问题:
最后的收获是,这是我将分发给最终用户的机器上的东西,因此,如果它易于编写脚本,那就太好了。
提前感谢-保持安全!
解决方法
回答问题2时,问题1的解决方案很简单: 开始编写将返回令牌的函数。
TOKEN=$(get_token)
第一个实现将在不进行任何缓存或共享的情况下重新计算新令牌。
您多久需要一次令牌?如果您不是每分钟都构建一次,则不需要额外的工作(cronjob)每分钟刷新一次令牌。在这种情况下,您可以通过调用函数在每次api调用之前刷新令牌。您不需要存储或共享它。
当您确实非常需要令牌时,可以修改功能。使用文件很简单,但是您也可以使用其他解决方案,例如服务器(当您希望令牌在远程主机上可供已被其他令牌标识的用户使用时)。
下一个挑战是如何使获取新令牌的手动过程自动化。
是否可以找到不需要输入密码的方法(例如使用.aws/config
或(更好)为服务器分配正确的角色)?还是您需要使用expect
编写通话脚本?
API调用get-authorization-token需要codeartifact:GetAuthorizationToken和sts:GetServiceBearerToken权限。