我正在尝试从 gitlab CI 运行以下命令:
$ aws ecr get-login-password --region eu-west-3
以下是 .gitlab-ci.yml 中的工作的样子
publish-job:
stage: publish
image:
name: amazon/aws-cli:latest
entrypoint: [""]
script:
- aws configure set aws_access_key_id MY_ACCESS_KEY_ID
- aws configure set aws_secret_access_key MY_SECRET_ACCESS_KEY
- aws configure set default.region eu-west-3
- aws ecr get-login-password --region eu-west-3
在最后一步,我收到以下错误:
$ aws ecr get-login-password --region eu-west-3
An error occurred (UnrecognizedClientException) when calling the GetAuthorizationToken operation: The security token included in the request is invalid.
我知道堆栈溢出有一个 https://stackoverflow.com/questions/48488172/unrecognizedclientexception-error-when-authenticating-on-aws-cli 但我认为这不是同一个问题。在那个问题中,这是一个与权限有关的问题。就我而言,我很确定这不是出于两个原因:
- 我给了与访问权限相关的用户 key AdministratorAccess (暂时以排除我正在处理权限问题的可能性)
- 我用 docker 执行了完全相同的步骤(通过复制和粘贴)并且它有效,所以它不是凭据。这是 Dockerfile:
FROM amazon/aws-cli:latest
RUN aws configure set aws_access_key_id THE_SAME_ACCESS_KEY_ID
RUN aws configure set aws_secret_access_key THE_SAME_SECRET_ACCESS_KEY
RUN aws configure set default.region eu-west-3
RUN aws ecr get-login-password --region eu-west-3
然后我跑了 $ docker build --progress=plain .
并且最后一步返回了一个哈希
知道为什么这些步骤会产生不一致的结果吗?以及如何修复 CI?
回答1
我声明了一个阻止 cli 执行命令的 AWS_DEFAULT_REGION 环境变量(即使我在此阶段对凭据进行了硬编码)。当我删除环境变量时,一切都开始正常工作。