51

$AWS_ACCESS_KEY_ID と $AWS_SECRET_ACCESS_KEY 環境変数を適切に設定して、次のコードを実行します。

import boto
conn = boto.connect_s3()

次のエラーが表示されます。

boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']

何が起こっていますか?どこからデバッグを開始すればよいかわかりません。


boto が環境変数から値を取得していないようです。キー ID と秘密鍵を引数として接続コンストラクターに渡すと、これは正常に機能します。

4

12 に答える 12

40

Boto、環境変数から資格情報を取得します。これを V2.0b3 でテストしたところ、問題なく動作しました。コンストラクターで明示的に指定された資格情報が優先されますが、環境変数からも資格情報が取得されます。

これを行う最も簡単な方法は、資格情報をテキスト ファイルに入れ、環境内のそのファイルの場所を指定することです。

たとえば(Windowsの場合:Linuxでも同じように機能すると思いますが、個人的には試していません)

「mycred.txt」というファイルを作成し、C:\temp に配置します。このファイルには次の 2 行が含まれます。

AWSAccessKeyId=<your access id>
AWSSecretKey=<your secret key>

C:\temp\mycred.txt を指すように環境変数AWS_CREDENTIAL_FILEを定義します。

C:\>SET AWS_CREDENTIAL_FILE=C:\temp\mycred.txt

上記のコードフラグメント:

import boto
conn = boto.connect_s3()

うまくいきます。

于 2011-04-29T11:05:51.563 に答える
15

私はpythonとbotoの両方の初心者ですが、エラー(または少なくともエラーの最後の行)を再現することができました。

変数をbashにエクスポートできない可能性があります。次に定義するだけの場合、それらは現在のシェルでのみ有効であり、それらをエクスポートすると、pythonが値を継承します。したがって:

$ AWS_ACCESS_KEY_ID="SDFGRVWGFVVDWSFGWERGBSDER"

次のものも追加しない限り、機能しません。

$ export AWS_ACCESS_KEY_ID

または、すべて同じ行で実行できます。

$ export AWS_ACCESS_KEY_ID="SDFGRVWGFVVDWSFGWERGBSDER"

他の値についても同様です。これを.bashrcに入れることもできます(bashがシェルであり、エクスポートすることを忘れないことを前提としています)

于 2011-11-11T12:18:11.900 に答える
10

Linux と SES を使用しているときにこの問題に遭遇しました。同様の問題を抱えている他の人に役立つことを願っています。awscli をインストールし、キーを次のように構成しました。

sudo apt-get install awscli
aws configure

これは、@huythang が言ったように、~/.aws/config で資格情報をセットアップするために使用されます。 しかし、boto は ~/.aws/credentials で認証情報を探すので、それらをコピーします

cp ~/.aws/config ~/.aws/credentials

これらの資格情報を使用してユーザーに適切なポリシーが設定されていると仮定すると、環境変数を設定する必要はありません。

于 2016-05-14T12:10:50.557 に答える
10

IAM ロールに関する nealmcb の回答をフォローアップします。IAM ロールを使用して EMR クラスターをデプロイしているときに、boto を s3 に接続しているときに (毎回ではありませんが) 時々このエラーが発生するという同様の問題がありました。

boto.exception.NoAuthHandlerFound: No handler was ready to authenticate. 1 handlers were checked. ['HmacAuthV1Handler']

資格情報の取得中にメタデータ サービスがタイムアウトになる場合があります。したがって、ドキュメントが示唆するように、構成に Boto セクションを追加し、資格情報を取得するための再試行回数を増やしました。デフォルトは 1 回です。

import boto, ConfigParser
try:
    boto.config.add_section("Boto")
except ConfigParser.DuplicateSectionError:
    pass
boto.config.set("Boto", "metadata_service_num_attempts", "20")

http://boto.readthedocs.org/en/latest/boto_config_tut.html?highlight=retries#boto

下にスクロールして:You can control the timeouts and number of retries used when retrieving information from the Metadata Service (this is used for retrieving credentials for IAM roles on EC2 instances)

于 2015-05-20T10:58:02.390 に答える
4

ここで答えを見つけました。

Unix の場合: 最初に aws config をセットアップします。

#vim ~/.aws/config
[default]
region = Tokyo
aws_access_key_id = xxxxxxxxxxxxxxxx
aws_secret_access_key = xxxxxxxxxxxxxxxxx

そして、環境変数を設定します

export AWS_ACCESS_KEY_ID="aws_access_key_id"
export AWS_SECRET_ACCESS_KEY="aws_secret_access_key"
于 2014-09-01T10:34:41.660 に答える
3

最新のboto s3 の紹介を参照してください。

from boto.s3.connection import S3Connection
conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
于 2013-11-26T13:32:05.737 に答える
2

私の場合、問題は IAM で「デフォルトではユーザーに権限がない」ことでした。私は元の AWS 認証モデル (pre-iam) に慣れていたため、現在「ルート」認証情報と呼ばれるものが唯一の方法であったため、それを突き止めるのに 1 日かかりました。

ユーザーの作成に関する AWS ドキュメントは多数ありますが、ユーザーが何かを行うにはアクセス許可を付与する必要があると記載されている箇所はわずかです。1 つはWorking with Amazon S3 Buckets - Amazon Simple Storage Serviceですが、実際には [ポリシー] タブに移動し、適切な開始ポリシーを提案し、それを適用する方法を説明するように指示するだけではありません。

並べ替えのウィザードは単に「IAM ユーザーの使用を開始する」ことを推奨するだけで、他にやるべきことがたくさんあることを明確にしていません。少し調べてみても、たとえば「管理ポリシー このユーザーには管理ポリシーが添付されていません」と表示されるだけです。 これは、何かを行うためにポリシーが必要であることを示唆しているわけではありません。

root のようなユーザーを確立するには、以下を参照してください: コンソールを使用した管理者グループの作成 - AWS Identity and Access Management

すべての S3 (自分のバケットと他のユーザーが所有するパブリック バケット) への読み取り専用アクセスを単純に許可する特定のポリシーは見当たりません。

于 2015-05-01T04:09:14.327 に答える
1

これらを connect 関数呼び出しで引数として設定できるようになりました。

s3 = boto.connect_s3(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)

他の誰かが私のように検索した場合に備えて、それを追加すると思いました。

于 2013-10-22T11:33:03.530 に答える
1

以前はs3-parallel-put正常に使用していましたが、不可解に動作を停止し、上記のエラーが発生しました。これは、AWS_ACCESS_KEY_ID と AWS_SECRET_ACCESS_KEY をエクスポートしたにもかかわらずです。

解決策は、boto 構成ファイルで資格情報を指定することでした。

$ nano ~/.boto

次のように資格情報を入力します。

[Credentials]
aws_access_key_id = KEY_ID
aws_secret_access_key = SECRET_ACCESS_KEY
于 2018-07-08T12:00:59.560 に答える
-4

AWS_ACCESS_KEY_ID私はあなたがそれらを&と呼んでいるように見えますAWS_SECRET_ACCESS_KEY

AWSAccessKeyId&として設定する必要があるように思われる場合AWSSecretKey

于 2011-07-28T18:06:51.950 に答える