2

Haproxy (具体的には Haproxy Ingress) を使用して、S3 バケット (DigitalOcean Spaces を使用しています) にリバース プロキシをセットアップしようとしています。

いくつかの試行錯誤の後、プロキシを使用できるようになりましたが、まだうまくいきません。
GET リクエストは正常に機能しますが、「403 - SignatureDoesNotMatch」というエラーが発生するため、PUT リクエスト (putObject など) は機能しません。残念ながら、その理由を見つけることができないようで、広範囲に検索しました。

現時点での私のバックエンドは次のとおりです。

backend s3-reverse-proxy_443
    mode http
    balance roundrobin
    acl https-request ssl_fc
    http-request redirect scheme https if !https-request
    http-request set-header Host <bucket>.ams3.digitaloceanspaces.com
    http-request set-header X-Original-Forwarded-For %[hdr(x-forwarded-for)] if { hdr(x-forwarded-for) -m found }
    http-request del-header x-forwarded-for
    option forwardfor
    http-response set-header Strict-Transport-Security "max-age=15768000"
    server srv001 5.101.110.225:443 weight 1 proto h2 alpn h2 ssl no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets verify none check inter 2s

「.ams3.digitaloceanspaces.com」を使用してサーバーを無効にしようとしましたが、うまくいきませんでした。

ヘッダーと関係があると思いますが、「Authorization」および「Connection」ヘッダーを追加しようとしましたが、どれも機能していないようです。

バックエンドプロトコル「h2-ssl」も使用しています。これがないとプロキシできなかったからです。

前もって感謝します!


ある程度の進歩があり、署名バージョン v4 は機能しませんが、v2 は機能します。
ただし、私が正しければ、docker レジストリーは v4 を使用しており、最新の標準と互換性があるようにしたいと考えています。

私は S3 についてあまり知りません。現在、認証の違いに関するドキュメントを読んでいますが、どんな助けも大歓迎です!


したがって、さらに調査した後、署名バージョン v4 は要求 URI を使用して署名を計算します。バケット自体が同じ署名を計算すると、別の URI をリッスンするため、リクエスト URI は異なります。

リクエストがnginxによって処理されるときにnginxを使用して署名を再計算している人を見てきましたが、Haproxyでそれを行う方法を見つけていません.

現時点で最善の方法は、署名バージョン v2 を使用することですが、これはほとんどの S3 バケット プロバイダーで廃止される可能性があります。

4

0 に答える 0