aws-sdk-go에서 S3 객체를 얻으려고 "SignatureDoesNotMatch"라고 말하면
                                            
                                                
                                                
                                                
                                                
                                                
                                                 4193 단어  5aws-sdk-goS3AWS
                    
signed url을 사용하는 것은 아니지만 SignatureDoesNotMatch라고합니다.
ACL을 설정하지 않은 signed url도 사용하지 않는 버킷에 연결하여 객체를 검색하는 코드를 구현하면 SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.라고합니다.
비슷한 오류에 빠진 사람의 도움이 되시길 바랍니다.
 TL;DR
/를 포함하지 마십시오. 코드
코드는 적당하지만 분위기는 다음과 같습니다.
func hogehoge() error {
    config := aws.Config{
        Region: aws.String(os.Getenv("REGION")),
    }
    sess := session.New(&config)
    d := s3manager.NewDownloader(sess)
    n, err := d.Download(file, &s3.GetObjectInput{
        Bucket: aws.String("hogehoge/"), //!!!!!!!
        Key:    aws.String("piyopiyo/year=2020/month=04/fugafuga.gz"),
    })
    if err != nil {
        return err //エラーになる
    }
    fmt.Printf("downloaded %d bytes", n)
}
오류가 발생하거나 그렇지 않으면
코드에 쓰여진 대로입니다만, 버킷명의 뒤에 실수해
/ 를 붙여 버리고 있습니다.이 버킷 이름에서
/를 제거하면 모든 경우에 올바르게 작동합니다.그러나
/ 를 붙이면 조금 이상한 동작을 했습니다.오류가 발생하지 않음
ListObjects를 실행하여 객체 목록을 얻을 수 있습니다. =를 포함하지 않는 S3 객체를 DL 할 수 있습니다. 오류
=를 포함하는 S3 객체를 DL 할 수 없습니다. 직접적인 원인은 몰랐지만 aws-sdk-go 내부의 구현을 보는 한 S3 객체를 DL 할 때는 GET 요청을 발행하고있는 것 같습니다. 하고 있는 것이 아닐까라고 생각했습니다.
htps : // 기주 b. 코 m / 아 ws / 아 ws-sdk 고 / 이스에 s / 3110
또한 이 issue에서 언급한 것처럼 "버킷 이름으로
= 또는 /를 사용할 수 없습니다."라는 S3 자체의 규칙이 있습니다.aws-sdk-go에서도 그 전제에 따라 구현한 결과, 이번과 같이 「DL 할 수 있거나 할 수 없거나 한다」이상한 거동이 일어난 것이 아닐까 생각됩니다.
 
                Reference
이 문제에 관하여(aws-sdk-go에서 S3 객체를 얻으려고 "SignatureDoesNotMatch"라고 말하면), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/S-Elly/items/b1020437eb3f2033b65e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)