[英]How to delete a file from amazon S3 bucket using cURL
我试图从我客户的内部存储s3.fidapp.org
中托管的 s3 存储桶中删除一个文件。 我使用了以下命令,但没有用。 我遇到错误。
<Error><Code>SignatureDoesNotMatch</Code><Message>The request signature we calculated does not match the signature you provided. Check your Secret Access Key and signing method.</Message>
查找 signingKey 的脚本
function hmac_sha256 {key="$1"
data="$2"
echo -n "$data" | openssl dgst -sha256 -hmac "$key" -binary | base64| sed
's/^.* //'}
secret="$1"
date="$2"
region="$3"
service="$4"
testaws4='AWS4'$secret
s1=$(echo -n $date | openssl sha256 -hmac AWS4$secret | sed 's/^.* //')
s2=$(echo -n $region | openssl dgst -sha256 -mac HMAC -macopt hexkey:$s1 |
sed 's/^.* //')
s3=$(echo -n $service | openssl dgst -sha256 -mac HMAC -macopt hexkey:$s2 |
sed 's/^.* //')
signingkey=$(echo -n aws4_request | openssl dgst -sha256 -mac HMAC -macopt
hexkey:$s3 | sed 's/^.* //')
删除脚本
bucketName="test_bucket"
accessKey="test-key"
fileName="test.dat"
Region="us-east-1"
DateTime=`date -u +%Y%m%dT%H%M%SZ`
Date=`date -u +%Y%m%d`
SecretKey="**********************"
HashKey=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
CRequest="DELETE\n/test_bucket/\n\nhost:s3.fidapp.org\nx-amz-content-
sha256:"$HashKey"\n\nx-amz-date:"$DateTime"\n\nhost;x-amz-content-
sha256;x-amz-date\n"$HashKey"\n"
CRHkey=`echo -en $CRequest|openssl dgst -sha256| cut -d ' ' -f2`
StringToSign="AWS4-HMAC-SHA256\n"$DateTime"\n"$Date"/us-
east-/s3/aws4_request\n"$CRHkey
SigningKey=`sh signing_key.sh $SecretKey $Date $Region s3`
echo -en $StringToSign | openssl dgst -sha256 -mac HMAC -macopt
hexkey:$SigningKey | sed 's/^.* //' |cut -d ' ' -f2 > Signature.txt
cat Signature.txt
AuthorizationHeader="Authorization: AWS4-HMAC-SHA256
Credential="$accessKey"/"$Date"/us-east-1/s3/aws4_request,
SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature="`cat
Signature.txt`
curl -X DELETE https://s3.fidapp.org//${bucketName}/${fileName}
-H "$AuthorizationHeader"
-H "host: s3.fidapp.org"
-H "X-Amz-Content-SHA256: "$HashKey
-H "X-Amz-Date: "$DateTime
我使用相同的命令通过将DELETE
替换为PUT
将文件上传到 S3 存储桶。
如果我遗漏了什么或者我必须更改命令中的任何内容,请告诉我。
错误码SignatureDoesNotMatch一般是我们在curl中计算并提供的签名与S3或Minio服务器根据我们提供的headers准备的相应匹配签名不匹配时出现的。 请确保 curl 命令中提供的标头与您签名中的内容相匹配。
此外,在您在 curl 删除请求中提供的 URL 中,在https://s3.fidapp.org/之后似乎有一个额外的“/”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.