【问题标题】:Amazon S3 file download through curl by using IAM user credentials使用 IAM 用户凭证通过 curl 下载 Amazon S3 文件
【发布时间】:2015-02-17 12:39:35
【问题描述】:

我创建了一个只能访问一个存储桶的 IAM 用户。我已经通过 web 和 python boto 测试了凭据和权限。它工作正常。

现在我需要使用这些凭据并通过curl 从该存储桶下载私有文件。

signature="$(echo -n "GET" | openssl sha1 -hmac "f/rHQ8yCvPthxxxxxxxXxxxx" -binary | base64)"
date="$(LC_ALL=C date -u +"%a, %d %b %Y %X %z")"

curl -H "Host: my-bucket.s3.amazonaws.com" -H "Date: $date" -H "Authorization: AWS 'XXXAJX2NY3QXXX35XXX':$signature" -H "Content-Type: 'text/plain'" https://my-bucket.s3.amazonaws.com/path/to_file.txt

但我收到以下错误:

InvalidAccessKeyId我们的记录中不存在您提供的 AWS 访问密钥 ID。

请帮忙,如何使用curl 下载文件?我有什么遗漏或无法通过curl 命令实现的吗?

谢谢!

【问题讨论】:

  • 您的密钥 'XXXAJX2NY3QXXX35XXX' 不应包含在 ' 单引号中。
  • 感谢 @Michael-sqlbot 删除 ' 更改了错误消息。现在卡在无效的签名提供错误。我在stackoverflow.com/questions/2777078/… 中做了所有提到的选项有什么帮助吗?
  • 您的问题现在不再与您的问题文本匹配,但由于您还没有发布任何答案,您应该编辑问题以反映您现在遇到的实际问题,记住它似乎这很容易变成chameleon question,这并不好。 signature="$(echo -n "GET" | openssl ... 缺少很多 必要信息。 “GET”不是一个足够的“签名字符串”。参数参考文档,然后编辑或删除此问题。

标签: shell curl amazon-web-services amazon-s3


【解决方案1】:

以下是如何使用 s3 curl 脚本下载的示例,

#!/bin/sh 
file=path/to/file 
bucket=your-bucket 
resource="/${bucket}/${file}" 
contentType="application/x-compressed-tar" 
dateValue="`date +'%a, %d %b %Y %H:%M:%S %z'`" 
stringToSign="GET 
${contentType} 
${dateValue} 
${resource}" 
s3Key=xxxxxxxxxxxxxxxxxxxx 
s3Secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
signature=`/bin/echo -en "$stringToSign" | openssl sha1 -hmac ${s3Secret} -binary | base64`
curl -H "Host: ${bucket}.s3.amazonaws.com" \
-H "Date: ${dateValue}" \
-H "Content-Type: ${contentType}" \ 
-H "Authorization: AWS ${s3Key}:${signature}" \ 
https://${bucket}.s3.amazonaws.com/${file}

希望对你有帮助。

【讨论】:

  • curl:(6)无法解析主机:./curl-s3-with-keysAuth.sh:17:./curl-s3-with-keysAuth.sh:-H:找不到我不断收到此错误:虽然我验证了我的路径是正确的。
猜你喜欢
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
  • 2016-05-02
  • 2017-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多