2017-12-12 19 views
0

私のコードは正常に文書を正しいバケットにアップロードしています。 AWS S3のバケットにログインしてドキュメントを見ることができます。 boto3でgenerate_signed_urlメソッドを使用して、ドキュメントにアクセスするためにユーザーに送信できるこれらのドキュメントのURLを取得しようとすると、「私たちが計算した要求シグネチャが署名と一致しません」というメッセージでSignatureDoesNotMatchを取得していますあなたの鍵と署名方法を確認してください。SignatureDoesNotMatchの結果となるboto3署名付きURL

私は私が使用(AWSにログインし、ファイルを手動でダウンロードして、それが正常に動作していることを確認)オブジェクト、保存:私はURLを取得しようとすると、私は、その後

s3 = boto3.client('s3', region_name='us-east-2', aws_access_key_id='XXXX', aws_secret_access_key='XXXX', config=Config(signature_version='s3v4')) 

    s3.put_object(Bucket=self.bucket_name,Key=path, Body=temp_file.getvalue(),ACL='public-read') 

s3 = boto3.client('s3', region_name='us-east-2', aws_access_key_id='XXXX', aws_secret_access_key='XXXX', config=Config(signature_version='s3v4')) 

    url = s3.generate_presigned_url(
     'put_object', Params={ 
     'Bucket':self.pdffile_storage_bucket_name, 
     'Key':self.pdffile_url 
     }, 
     ExpiresIn=604799, 
    ) 

AWSアクセスキーに特殊文字が含まれていないことを確認するために、かなり多くのユーザーがウェブ上で会話していました。私はこれをして、私はまだ同じ問題が発生します。

+0

事前署名されたURLを使用する場合は、リクエストヘッダーを見てください。私の場合、 'Content-Type'が送信されており、AWSがそれをチェックするので、URL生成にもそれを追加する必要がありました。 –

+0

@ThijsvanDienこれらのリクエストヘッダを調べる方法についてアドバイスできますか?私は前にそれをしていない。ここであなたの助けをありがとう。 – RailsTweeter

+0

リンクを作成して 'PUT'を実行します。つまり、ユーザーがバケット内の定義済みのキーに文書をアップロードできるようにします。最も簡単なことは、どこからやるのかによって異なります。実際には、それはあなたが欲しいものですか?あなたは、文書へのアクセスを提供したいと言いました。アップロード用のリンクを使ってダウンロード( 'GET')しようとしていますか?それは動作しません。その場合、 '' put_object''ではなく '' get_object''でリンクを作成してください。 '' Key ''はそれだけでなければならないことにも注意してください。アップロード時にあなたが渡したURL( 'path')はありません。 –

答えて

0

ダウンロード用ではなく、アップロード用に事前に署名されたURLを生成しています。 put_objectここには... get_objectです。

@ThssvanDienも指摘したように、アップロード時にACL='public-read'があなたの望むものと異なる場合があります。これにより、署名されていないURLを持つ誰でもオブジェクトにアクセスできるようになります。

+0

一般公開のアクセス権があれば、なぜ私のURLはアクセス拒否と表示されるのですか?私はハードのキーフォーマットで暗号化していますが、オブジェクトを置いたときに公開されたACLを読んでもアクセスが拒否されてしまいます。 – RailsTweeter

+0

説明なしで「アクセス拒否」エラーが発生しましたか?コンソールでオブジェクトを調べます。パスが期待通りのものであることを確認し、アクセス許可を確認してください。 –

関連する問題