7

s3cmd通过运行从epel-testingrepo 安装:

yum --enablerepo epel-testing install s3cmd

然后我调用了配置工具,s3cmd --configure但我得到了这个错误:

Test access with supplied credentials? [Y/n] 
Please wait, attempting to list all buckets...
ERROR: Test failed: 400 (InvalidToken): The provided token is malformed or otherwise invalid.

Invoked as: /usr/bin/s3cmd --configureProblem: AttributeError: 'S3Error' object has no attribute 'find'
S3cmd:   1.5.0-beta1
python:   2.6.8 (unknown, Mar 14 2013, 09:31:22) 
[GCC 4.6.2 20111027 (Red Hat 4.6.2-2)]

Traceback (most recent call last):
  File "/usr/bin/s3cmd", line 2323, in <module>
    main()
  File "/usr/bin/s3cmd", line 2221, in main
    run_configure(options.config, args)
  File "/usr/bin/s3cmd", line 1704, in run_configure
    if e.find('403') != -1:
AttributeError: 'S3Error' object has no attribute 'find'

我确定密钥是正确的。

你对此有什么想法吗?


更新 2014 年 3 月 21 日星期五 22:44:42 ICT

在调试模式下运行时发现了一些线索。

使用相同的凭据,在工作系统上:

DEBUG: SignHeaders: 'GET\n\n\n\nx-amz-date:Fri, 21 Mar 2014 07:07:18 +0000\n/'

在失败的系统上:

DEBUG: SignHeaders: 'GET\n\n\n\nx-amz-date:Fri, 21 Mar 2014 07:40:56 +0000\nx-amz-security-token:AQoDYXdzENb...\n/'

此安全令牌取自元数据:

# wget -O - -q 'http://169.254.169.254/latest/meta-data/iam/security-credentials/myrole'
{
  "Code" : "Success",
  "LastUpdated" : "2014-03-21T12:45:27Z",
  "Type" : "AWS-HMAC",
  "AccessKeyId" : "foo",
  "SecretAccessKey" : "bar",
  "Token" : "AQoDYXdzENb....",
  "Expiration" : "2014-03-21T19:18:02Z"
}

所以我的问题应该改为:为什么有时会在运行时s3cmd添加x-amz-security-token到标题中--configure(我没有使用--add-header)?

4

4 回答 4

10

安装 s3cmd、设置 IAM 并附加“Amazon S3 完全访问”角色后 - 我也遇到了“提供的令牌格式错误或无效”错误。所以接下来,我创建了一个 IAM 并附加了一个带有管理员凭证(一切)的策略。

使用这个新的 IAM 再次出现错误。

从 github.com 线程中,@mdomsch 提到了使用带有嵌入式 IAM 角色的 EC2 时可能出现的一些问题——这就是我使用 s3cmd 的 EC2 所遇到的问题。

所以接下来,我试着跑步。

s3cmd --access_key=xxxx --secret_key=xxxxxxxxxxxxx ls

将 IAM 密钥与 S3 策略一起使用,它可以工作。

因此 s3cmd 将 EC2 中嵌入角色的凭据作为默认值。我敢肯定,如果您使用有权访问 S3 的角色启动另一个 EC2 - 您将不会收到此“提供的令牌格式错误或无效”错误。

但是 - 请不要-access_key=xxxx --secret_key=xxxxxxxxxxxxx使用 s3cmd 将参数粘贴到任何脚本中。尽可能 - 在启动时尝试将角色嵌入到 EC2 中(良好的安全实践)

无论如何 - 为了测试 - 我启动了另一个没有任何嵌入式 IAM 角色的 EC2,安装了 s3cmd,进行了配置 - 并且使用我的具有 S3 策略的 IAM 用户,一切都按预期工作。

于 2015-01-21T20:52:20.573 回答
9

这也让我坚持了一两个小时。我在 EC2 实例上解决此问题的方法是在配置 s3cmd 之前在环境中设置我的安全凭证。

最简单的方法是将 AWS Key 和 Secret 添加为环境变量:

export AWS_ACCESS_KEY_ID=EXAMPLE_KEY
export AWS_SECRET_ACCESS_KEY=EXAMPLE_SECRET

您还可以在 ~/.aws 中设置 aws_config_file。

设置好环境后,运行 s3cmd --configure 即可开始使用。

于 2014-10-28T04:15:55.357 回答
3

对于那些有同样问题的人,这是我的解决方案:创建/编辑文件 /home/vagrant/ .s3cfg并在引号之间添加您的秘密和密钥,例如:

access_key="BLAHBBLAHBBLAHBBLAHB" secret_key="2T0wyvmhfGw42T0wyvmhfGw4+-"

于 2015-05-21T12:21:22.160 回答
2

请注意,此问题也出现在 Windows 10 上,使用:

aws s3 ls s3://mybucketname/

我也有一个 EC2 实例分配了一个具有完全管理员访问权限的 IAM 角色。在创建具有完全管理员权限的用户后,我所做的只是 rm .aws/config 和 .aws/credentials 文件,然后再次输入:

aws configure

好旧的移除和更换让我回来了。

于 2019-03-20T16:49:41.497 回答