我正在尝试实现一个使用 Gitlab CI 将 Python 代码打包并复制到 S3 的管道。 这是导致问题的工作:
package:
stage: package
image: python:3.8
script:
- apt-get update && apt-get install -y zip unzip jq
- pip3 install awscli
- aws s3 ls
- ./cicd/scripts/copy_zip_to_s3.sh
only:
refs:
- developer
我想提一下,在 .gitlab-ci.yml 中的 before_script 部分中,我已经从 Gitlab 环境变量导出了 AWS 凭证(AWS SECRET ACCESS KEY、AWS_ACCESS_KEY_ID 等)。 我已经检查了数千次我的凭据,它们完全正确。我还想提一下,相同的脚本非常适合 Gitlab 中同一组下的另一个项目。 这是错误:
$ aws s3 ls
An HTTP Client raised an unhandled exception: Invalid header value b'AWS4-HMAC-SHA256 Credential=AKIAZXXXXXXXXXX\n/2020XX2/us-east-1/sts/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=ab53XX6eb72XXXXXX2152e4XXXX93b104XXXXXXX363b1da6f9XXXXX'
ERROR: Job failed: exit code 1
./cicd/scripts/copy_zip_to_s3.sh 进行打包和复制,执行时会发生同样的错误,这就是为什么我添加了一个简单的 aws 命令 aws s3 ls 以表明即使是简单的 'ls' 也不是工作。
请问有什么解决办法吗?提前谢谢大家。
这是因为向 AWS ACCESS KEY 变量添加了额外的行。
我在 Windows 中的 Cygwin 上运行 bash 脚本时遇到了类似的问题。修复方法是删除 从我放入环境变量的值的末尾开始。
如果有人感兴趣的话,这是我的整个脚本。它承担一个新的 AWS 角色,将这些信用设置到环境变量中,然后打开一个新的 bash shell,它将尊重这些设置的变量。
#!/bin/bash
hash aws 2>/dev/null
if [ $? -ne 0 ]; then
echo >&2 "'aws' command line tool required, but not installed. Aborting.";
exit 1;
fi;
unset AWS_ACCESS_KEY_ID
unset AWS_SECRET_ACCESS_KEY
unset AWS_SESSION_TOKEN
ROLEID=123918273981723
TARGETARN="arn:aws:iam::${ROLEID}:role/OrganizationAccountAccessRole"
COMMAND="aws sts assume-role --role-arn $TARGETARN --role-session-name damien_was_here"
RESULT=$($COMMAND)
#对 tr -d 的调用 是这个问题的重要部分。
AccessKeyId=$(echo -n "$RESULT" | jq -r '.Credentials.AccessKeyId' | tr -d '\r\n')
SecretAcessKey=$(echo -n "$RESULT" | jq -r '.Credentials.SecretAccessKey' | tr -d '\r\n')
SessionToken=$(echo -n "$RESULT" | jq -r '.Credentials.SessionToken' | tr -d '\r\n')
export AWS_ACCESS_KEY_ID=$AccessKeyId
export AWS_SECRET_ACCESS_KEY=$SecretAcessKey
export AWS_SESSION_TOKEN=$SessionToken
echo Running a new bash shell with the environment variable set.
bash
就我而言,这是一个附加字符' ' 在 AWS_ACCESS_KEY_ID 的 Base64 编码期间由“echo”命令创建。
为了修复此问题,请使用“-n”参数和“echo”命令,例如
$ echo -n AKIAJGN2PSI2F5OHJSQQ | base64
QUtJQUpHTjJQU0kyRjVPSEpTUVE=