mc) mc cp 사용시 인증서 오류날 때_s3v2,s3v4
mc를 통해서 object storage의 데이터를 A cluster에서 B cluster로 옮기려고 했어요
참고로 저는 온프렘 k8s rook-ceph를 사용하고 있어요
alias 등록하고 목록 조회는 되는데, 다른 작업이 안되더라고요
$ mc alias ls
ceph-test
URL : http://192.16.172.56:30071
AccessKey : access-key
SecretKey : secret-key
API : S3v4
Path : dns
ceph-vm
URL : http://172.17.172.11:30071
AccessKey : access-key
SecretKey : secret-key
API : s3v4
Path : auto
$ mc ls ceph-test/
[2022-10-12 16:01:48 KST] 0B hgkim/
[2022-10-12 16:01:48 KST] 0B test/
데이터를 이동하려 할 때, signature 오류가 나왔어요
# The request signature we calculated does not match the signature you provided. Check your key and signing method.
$ mc cp -r ceph-test/hgkim/kdt=20221130 ceph-vm/hgkim/kdt=20221130
mc: <ERROR> Failed to copy
`http://192.16.172.56:30071/hgkim/kdt=20221130/dt=20221130/part-00042-aeb759fc-e244-4f78-b215-44a339989a8a.c000.snappy.parquet`.
Put "http://172.17.172.11:30071/hgkim/kdt=20221130/part-00042-aeb759fc-e244-4f78-b215-44a339989a8a.c000.snappy.parquet?partNumber=1&uploadId=2~jK0epFbRsmtyE3MbMWXsgfADR65wKKx"
: readfrom tcp 172.17.172.56:34826->172.17.172.11:30071: The request signature we calculated does not match the signature you provided. Check your key and signing method.
ip가 3개 나오는데, mc cp로 local에 다운로드하는건 같은 대역대는 되요.
- 172.17.172.56 #mc 실행하는 local
- 192.16.172.56:30071 #source
- 172.17.172.11:30071 #target
경우의 수는 아래와 같아요
- 172.17.172.56(local) : 172.17.172.11:30071 #target -> local 복사 : 정상
- 172.17.172.56(local) : 192.16.172.56:30071 #source -> local 복사 : 안됨
- 172.17.172.56(local) : 192.16.172.56:30071 -> 172.17.172.11:30071 # #source -> target 복사 : 안됨
해결 방법은 아래와 같아요
alias를 설정할 때 `--api`를 s3v4에서 s3v2로 변경해줬어요
mc alias set --api "S3v4" myminiov4 http://localhost:9000 minioadmin minioadmin
mc alias set --api "S3v2" myminiov2 http://localhost:9000 minioadmin minioadmin
이미 수정했다면 json을 변경하는것도 방법이에요
$cat ~/.mc/config.json
{
"version": "10",
"aliases": {
"ceph-test": {
"url": "http://192.16.172.56:30071",
"accessKey": "access-key",
"secretKey": "secret-key",
"api": "s3v4",
"path": "auto"
},
"ceph-vm": {
"url": "http://172.17.172.56:30071",
"accessKey": "access-key",
"secretKey": "secret-key",
"api": "s3v4",
"path": "auto"
}
}
}
문제는 해결했고,
s3v2와 s3v4에 대해서 알아보죠.
s3v2는 deprecated 되었다고 합니다. 참고로 제가 사용한 mc 버전은 2021-09입니다.
2006년부터 서비스된 s3여서 그런지 sigV2를 어쩔 수 없이 사용했는데 이제는 업그레이드한다고 합니다.
2012년에 sigV4를 발표했고, s3 작업할 때는 v4를 이제 써야한다는 것도 추가합니다.
그런데 왜 2에서 4를 바꿧는지는 명확하게 안나오네요
(4버전은 데이터 보호와 사용자 확인 기능이 된다고 합니다. 2버전은 어떤 방식인지만 설명하고요)
Signature Version 4 is the AWS signing protocol.
Revised Plan
– Any new buckets created after June 24, 2020 will not support SigV2 signed requests, although existing buckets will continue to support SigV2 while we work with customers to move off this older request signing method.
https://aws.amazon.com/ko/blogs/aws/amazon-s3-update-sigv2-deprecation-period-extended-modified/
참고
https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html
https://aws.amazon.com/ko/blogs/aws/amazon-s3-update-sigv2-deprecation-period-extended-modified/