错误:测试失败:400(InvalidToken):提供的令牌格式错误或无效。

7

s3cmd是通过运行以下命令从epel-testing软件库中安装的:

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"
}

因此,我的问题应该改为:为什么有时在运行--configures3cmd会向标头添加x-amz-security-token(我没有使用--add-header)?请注意,保留了HTML标签。
4个回答

11
安装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,则不会出现“提供的令牌格式错误或无效”的错误。

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

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


9

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

最简单的方法是将AWS密钥和密钥作为环境变量添加:

export AWS_ACCESS_KEY_ID=EXAMPLE_KEY
export AWS_SECRET_ACCESS_KEY=EXAMPLE_SECRET

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

环境配置完成后,运行 s3cmd --configure 命令,即可开始使用。


请点击此处了解更多信息:http://www.dowdandassociates.com/blog/content/howto-install-aws-cli-security-credentials/。 - Tobin Schwaiger-Hastanan

3

对于遇到同样问题的人,这是我的解决方案:

创建/编辑文件 /home/vagrant/.s3cfg 并在引号之间添加你的密钥和秘钥,例如:

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


这个可以运行!我觉得s3cmd --configure 中有一个bug,如果secret_key中含有+或-,就会抛出这个错误。如上所述的解释是有效的。 - Anand Kumar

2
请注意,这个问题也会在使用Windows 10时出现:
aws s3 ls s3://mybucketname/

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

最初的回答:

删除 .aws/config 和 .aws/credentials 文件,然后重新输入即可。
aws configure

经典的删除和替换方法给我带来了帮助。


对于其他人来说,如果要添加到VocoJax中... 您可以在“C:\ Users \ your name here \ .aws”中找到有问题的文件,然后删除所有文件(* adfs_cookies-如果您正在使用adfs * config *凭据)。 然后再次运行aws configure,完成。 - Russell Keane

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接