ECS:OBS: バケット間のコピーがHTTP 403-SignatureDoesNotMatchで失敗する
概要: 同じネームスペース内の2つのバケット間でオブジェクトをコピーすると、次のエラーで失敗します。03 (SignatureDoesNotMatch): 計算されたリクエストの署名が、指定した署名と一致しません。シークレット アクセス キーと署名方法を確認します。詳細については、「REST認証」および「SOAP認証」を参照してください。
現象
ERROR HTTP 403 (SignatureDoesNotMatch): The request signature we calculated does not match the signature you provided. Check your Secret Access Key and signing method. For more information, see REST Authentication and SOAP Authentication for details.)
他のバケットでは、バケット間でオブジェクトをコピーできる場合があります。
クライアントからのエラーの例(以下の例ではs3cmd)
user@ubuntu:~$ s3cmd cp s3://sourcebucket/0001.txt s3://destinationbucket/0001.txt --add-header=x-emc-copy-mode:deep ERROR: Copy failed for: 's3://sourcebucket/0001.txt' (403 (SignatureDoesNotMatch): The request signature we calculated does not match the signature you provided. Check your Secret Access Key and signing method. For more information, see REST Authentication and SOAP Authentication for details.)
ログ元 svc_request このセッションの内容:
x.x.x.159 02-20 11:43:04 0a3c129f:195052e2352:383d:6d0 s3 GET - x.x.x.253 200 454 4 y-test sourcebucket/0001.txt?acl x.x.x.159 02-20 11:43:04 0a3c129f:195052e2352:37e3:1045 s3 HEAD - x.x.x.253 200 0 2 y-test sourcebucket/0001.txt x.x.x.159 02-20 11:43:04 0a3c129f:195052e2352:383d:6d3 s3 PUT No x.x.x.253 400 - 7 y-test destinationbucket/0001.txt x.x.x.159 02-20 11:43:04 0a3c129f:195052e2352:37e3:1048 s3 PUT No x.x.x.253 403 - 1 - destinationbucket/0001.txt
ECSログには次のように表示されます。
varray mismatch: source bucket has urn:storageos:VirtualArray:IDb.urn:storageos:ReplicationGroupInfo:ID:global, dest bucket has urn:storageos:VirtualArray:ID.urn:storageos:ReplicationGroupInfo:ID:global
HTTP 400リクエストをトレースすると、「varray mismatch」が表示されます。
xxx.xxx.x.1 2025-02-20 11:43:04,682 0a3c129f:195052e2352:383d:6d3 x.x.x.159:9020 x.x.x.253:60062 y-test-1 - PUT y-test destinationbucket 0001.txt - HTTP/1.1 400 7 - - 6 - copy - - 'X-Forwarded-For: -' 'x-amz-meta-firstName: -' 'x-amz-meta-lastname: -' 'x-amz-meta-age: -' xxx.xxx.x.1 2025-02-20 11:43:04,682 0a3c129f:195052e2352:383d:6d3 x.x.x.159:9020 x.x.x.253:60062 y-test-1 - PUT y-test destinationbucket 0001.txt - HTTP/1.1 400 7 - - 6 - copy - - 'X-Forwarded-For: -' 'x-amz-meta-firstName: -' 'x-amz-meta-lastname: -' 'x-amz-meta-age: -' xxx.xxx.x.1 2025-02-20T11:43:04,675 [qtp2087040347-23314-0a3c129f:195052e2352:383d:6d3-s3-x.x.x.253] INFO V4Signer.java (line 118) credential: y-test-1/20250220/US-EAST-1/s3/aws4_request, amz_expires: null, amz_signed_headers: content-type;host;x-amz-content-sha256;x-amz-copy-source;x-amz-date;x-amz-meta-s3b-last-modified;x-amz-meta-sha256;x-amz-metadata-directive;x-amz-storage-class;x-emc-copy-mode;x-emc-mtime, amz_signature: 65edd5ab6e7b30a19993f88c160df46b826010f199583a41468272321c229ea0, payloadHash: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855, amz_date: 20250220T114323Z xxx.xxx.x.1 2025-02-20T11:43:04,678 [qtp2087040347-23314-0a3c129f:195052e2352:383d:6d3-s3-x.x.x.253] ERROR S3Exception.java (line 1733) got object access exception. RequestId 0a3c129f:195052e2352:383d:6d3 com.emc.storageos.objcontrol.object.exception.ObjectAccessException: varray mismatch: source bucket has urn:storageos:VirtualArray:<ID>.urn:storageos:ReplicationGroupInfo:<ID>:global, dest bucket has urn:storageos:VirtualArray:<ID>.urn:storageos:<ID>:global
原因
AWS準拠のほとんどのツールは、同じソース上のバケット間でコピーするときに s3コピー オプション を使用します。このオプションでは、クライアントを使用してオブジェクトをダウンロードおよびアップロードせず、代わりにターゲットにコピー操作を実行するように要求します。
ソース バケットとターゲット バケットが異なるレプリケーション グループでホストされている場合、コピーは失敗し、ECSは同じレプリケーション グループ内でのみS3コピーを許可します。レプリケーション グループの概念はAmazon AWSでは使用されません。クライアント ツールでは、別のレプリケーション グループが使用されていることは検出されません
バケットが別のレプリケーション グループにあることを確認する方法:
CLIから次のコマンドを実行します。
svc_bucket list -n <namespace>
admin@ecsnode2:~> svc_bucket list -n y-test
svc_bucket v1.1.3 (svc_tools v2.24.0) Started 2025-07-29 07:18:45
Bucket Temp
Replication Owner Owner API FS Versioning Failed
Bucket Name Namespace Group User VDC Type Enabled Enabled (TSO)
destinationbucket y-test local_vdc y-test-1 VDC1 S3 False Disabled False
destinationiam y-test local_vdc urn:ec...t:root VDC1 S3 False Disabled False
destsamerg y-test RG1 y-test-1 VDC1 S3 False Disabled False
iam y-test RG1 urn:ec...t:root VDC1 S3 False Disabled False
iamsamerg y-test RG1 urn:ec...t:root VDC1 S3 False Disabled False
new-bucket-37494b67 y-test RG1 y-test-1 VDC1 S3 False Enabled False
s3 y-test RG1 y-test-1 VDC1 S3 False Disabled False
sourcebucket y-test RG1 y-test-1 VDC1 S3 False Disabled False
sourceiam y-test RG1 urn:ec...t:root VDC1 S3 False Disabled False
steve y-test RG1 y-test-1 VDC1 S3 False Disabled False
versioning-test y-test RG1 y-test-1 VDC1 S3 False Enabled False
上記の例では、名前に destination が含まれる両方のバケットが local_vdcですが、他は RG1
すべての間でコピーできます RG1 両方の間のバケットも同様です local_vdc バケット、ただしバケット間は local_vdc と rg1 バケツ。
解決方法
これは設計どおりに機能しています
ECSからクライアントにオブジェクトをダウンロードし、新しいソースに再アップロードします。または、同じネームスペースとレプリケーション グループ内でバケットを使用します。