Jenkins S3 정적호스팅 업로드 오류 (s3 인증 오류)
jenkins로 git에서 소스를 내려 받아 서버에서 빌드 후 AWS S3에 업로드하여 정적호스팅을 하려고 설정을 했다
그러다 다음과 같은 오류가 발생하였다
The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256
원인은 2버전의 인증을 허용하지 않는 리전에서 4버전의 인증을 이용하기 때문에 발생하는 오류라고 한다. (V4 인증 오류) *아래 링크 참고
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/API/sig-v4-authenticating-requests.html
Exception caught during task execution: A client error (InvalidRequest) occurred when calling the PutObjects operation: The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256
검색해보면 꽤 다양한 방법이 나오는데…
명령어를 사용해서 v4 정책을 default 로 설정하라는 내용이 많았다
$aws configure set default.s3.signature_version s3v4
그러나 불행히도, 나의 환경에서는 위의 방법으로 문제를 해결 할 수 없었다
그렇게 얼마간의 삽질을 거듭할 무렵… 나와 같은 문제로 고통받는 외국인의 글을 발견했다!
https://github.com/aws/aws-cli/issues/2432
문제가 발생한 이유가 aws cli를 리눅스 apt 패키지 관리자로 설치하였기 때문이라고 한다 (엥!? 정말??)
aws cli를 apt 패키지 관리자로 설치하게 되면 최신 버전으로 설치되지 않아서 인증관련 문제가 발생하는 것
즉, aws cli 를 pip3 로 설치해야 문제가 발생하지 않는다.
해결방법
aws cli 를 pip3 패키지로 (python 3.x) 설치해야 한다
먼저, ubunutu 에 pip3 를 설치해야 한다
설치 후 $pip3 --version
명령으로 확인한다
$sudo apt install python3-pip
$pip3 --version
pip 가 설치되면 aws 에서 안내하는 대로 awscli 를 설치하면 된다
https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/cli-chap-install.html
https://github.com/aws/aws-cli/blob/master/README.rst
$pip3 install awscli --upgrade --user
이후 다시 s3 버킷에 파일을 업로드하면 문제없이 업로드가 될 것이다
$aws s3 cp /home/jenkins/.jenkins/jobs/jenkins-s3-test/workspace/dist/ s3://jenkins-s3-test --recursive --grant read=uri=http://acs.amazonaws.com/groups/global/AllUsers
혹시 다른 권한 오류가 발생한다면
S3 버킷 정책에 GetObject
, PutObject
, DeleteObject
등의 내용이 잘 있는지 확인해 볼 것!
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": "arn:aws:s3:::jenkins-s3-test/*"
}
]
}
Leave a comment