7

s3cmdepel-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'

キーが正しいと確信しています。

これについて何か考えはありますか?


UPDATE 金 3 月 21 日 22:44:42 ICT 2014

デバッグモードで実行中にいくつかの手がかりが見つかりました。

稼働中のシステムで、同じ資格情報を使用して、次のようにします。

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 を使用すると、エラーが再び発生しました。

@mdomsch は github.com スレッドから、IAM ロールが埋め込まれた EC2 を使用する場合に考えられる問題について言及しました。

というわけで、次は走ってみました。

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

S3ポリシーでIAMキーを使用すると機能しました。

そのため、s3cmd は、EC2 に埋め込まれたロールの認証情報をデフォルトとして使用します。S3 にアクセスできるロールで別の EC2 をスピンアップすると、この「提供されたトークンは形式が正しくないか、無効です」というエラーは発生しないと確信しています。

ただし-access_key=xxxx --secret_key=xxxxxxxxxxxxx、s3cmd を使用してスクリプトにパラメータを追加しないでください。可能な限り - 起動時にロールを EC2 に埋め込むようにしてください (優れたセキュリティ プラクティス)。

とにかく-テストするために-埋め込まれたIAMロールを使用せずに別のEC2を起動し、s3cmdをインストールして構成しました-S3ポリシーを持つIAMユーザーを使用して、すべてが期待どおりに機能しました。

于 2015-01-21T20:52:20.573 に答える
9

これにも1、2時間かかりました。EC2 インスタンスでこれを修正する方法は、s3cmd を構成する前に、環境でセキュリティ資格情報をセットアップすることです。

最も簡単な方法は、AWS キーとシークレットを環境変数として追加することでした。

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 に答える