署名付きAWS S3へのアップロードURLは「永久リダイレクト」を返します -- amazon-web-services フィールド と amazon-s3 フィールド と aws-lambda フィールド 関連 問題

Uploading to a Signed AWS S3 Put URL returns a “Permanent Redirect ”












2
vote

問題

日本語

私の目標は、(外部API経由で)許可検査(外部API経由)を実行するためのURLにサインするLamda関数を作成することです。

次のAWS Lambda関数を作成しました:

<事前> <コード> var AWS = require('aws-sdk'); var uuid = require('uuid'); exports.handler = function(event, context) { // Some Auth Code is here to make sure user has permission var s3 = new AWS.S3(); var url = s3.getSignedUrl('putObject', { Bucket: config.uploadBucket, Key: event.partnerName + '/images/' + uuid.v4() }); context.succeed(JSON.stringify({ url: url })); }

私はURLを取り戻す!

https://s3-us-west-2.amazonaws.com/path/images/3F7FF785-1868-4A54-9A2- E94228D4868D?AWSAccessKeyID = ....&amp; refisires = 1455124250&AMP;署名= ...&amp; x-amz-security-token =

その後、それをテストするためのJSBINを作成しました <事前> <コード> <form method="POST" action="THE_URL_I_GOT"> <input name="file" type="file"/> <input type="submit"/> </form>

しかし私がファイルをアップロードしようとしたとき

<事前> <コード> <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>PermanentRedirect</Code> <Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message> <Bucket>MYBUCKETNAMEHERE</Bucket> <Endpoint>s3.amazonaws.com</Endpoint> <RequestId>...</RequestId> <HostId>.....</HostId> </Error>

編集 また、ファイルをマルチパートフォームとしてアップロードできないことがわかりました。代わりに、XMLHTTPRequestを使用してファイルを署名付きURLにバイナリとして送信する必要があります( https://devcenter.heroku.com/articles/s3-propload-node#direct-uploading )

英語

My goal is to create a Lamda function that does some permission checking (via external API) then signs a URL to allow uploads to S3.

I created the following AWS lambda function:

var AWS = require('aws-sdk'); var uuid = require('uuid'); exports.handler = function(event, context) {     // Some Auth Code is here to make sure user has permission     var s3 = new AWS.S3();     var url = s3.getSignedUrl('putObject', {       Bucket: config.uploadBucket,       Key: event.partnerName + '/images/' + uuid.v4()     });     context.succeed(JSON.stringify({       url: url     })); } 

I get back a URL!

https://s3-us-west-2.amazonaws.com/PATH/images/3f7ff785-1868-4a54-9ae2-e94228d4868d?AWSAccessKeyId=....&Expires=1455124250&Signature=...&x-amz-security-token=...

Then I created a JSBin to test it

<form method="POST" action="THE_URL_I_GOT">   <input name="file" type="file"/>   <input type="submit"/>   </form> 

But when I tried to upload a file I got

<?xml version="1.0" encoding="UTF-8"?> <Error>     <Code>PermanentRedirect</Code>     <Message>The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint.</Message>     <Bucket>MYBUCKETNAMEHERE</Bucket>     <Endpoint>s3.amazonaws.com</Endpoint>     <RequestId>...</RequestId>     <HostId>.....</HostId> </Error> 

EDIT Also it turns out that I can't upload a file as a multipart form. Instead I have to use XMLHttpRequest to send the file as a Binary to the signed url (https://devcenter.heroku.com/articles/s3-upload-node#direct-uploading)

</div
        
 
 

回答リスト

2
 
vote
vote
ベストアンサー
 

あなたのバケツは米国標準地域にあります。

米国標準のエンドポイントを使用して事前署名されたアップロードURLを生成する必要があります。

 

Your bucket is in the US Standard region.

You need to generate a pre-signed upload URL using the US Standard endpoint.

</div
 
 
         
         

関連する質問

0  ラムダが失敗したときにプロセスを繰り返す方法は?  ( How to repeat the process when the lambda is failed ) 
私はAWS Lambdaを使ってキネシスからレコードを取得してからHTTPリクエストでWebサービスに送信しようとしています。 ネットワークの問題のため、HTTP要求が失敗した場合は、すべてのデータが必要です。だから私はラムダのプロセスを繰り返さなければなり...

0  Javaを使用して開発された複数のAWS Lambda関数のための単一のjar  ( Single jar for multiple aws lambda functions developed using java ) 
Lambda関数のために単一のjarファイルを作りたいです。さまざまなhandlequestメソッドがイベントとして使用される多くのブログや記事を見ました。 これがPAKAGE.CLASSNAME:HandLEREQ()はAWSコンソールで定義されています。...

2  DynamoDBとLambdaを接続できません  ( Cannot connect dynamodb with lambda ) 
これは私のコードです <事前> <コード> var dynamodb = new AWS.DynamoDB(); dynamodb.batchGetItem(params, function(err, data) { if (err) console....

0  PYSFTPパッケージがLambda関数の投げエラーで機能していません:「bcrypt」から「_bcrypt」をインポートできません(./lib/bcrypt/__init__.py)  ( Pysftp package is not working in lambda function throwing error cannot import ) 
PIP Install PySFTP)をダウンロードし、ZIPファイルを作成してLambda関数でアップロードします。 しかし、ラムダ機能では機能していません。誤りを投げる 応答: <事前> <コード> { "errorMessage": "Unable...

1  デコレータに機能を渡すときは、AWS Lambdaがタイムアウトするのですか?  ( Why does aws lambda time out when passing a function to a decorator ) 
Pydanticを利用して入力検証を実行するPython AWS Lambda関数に取り組んでいます。次のコードを実行する際のLambdaがタイムアウトしている(15秒のタイムアウトで)最近発見されました: <事前> <コード> def _stringify...

1  AWS Lambda - メモリにCSVを生成し、それを電子メールに添付ファイルとして送信します。  ( Aws lambda generate csv in memory and send it as an attachment to an email ) 
Python 2.7を使用してAWS Lambdaサービスを作成しようとしていて、メモリ内のCSVファイルを生成し、添付ファイルとして電子メールで送ってください。私が私が学んだことに基づいてこの脚本で近づくような気がしますが、私はそこにいません。 <事前> ...

2  PythonとAWS Lambdaを使ったスラックボットダイアログを使用する  ( Using slack bot dialogs with python and aws lambda ) 
Python 3、AWS APIゲートウェイ、およびAWS Lambdaを使用するスラックボットのダイアログを作成するための統合に取り組んできました。私は現在、私の関数の最後の目的と統合のためにスラック側に取り組んでいます。 ダイアログを削除し、チュートリ...

0  マップのリストDynamoDBクエリで未定義の返品  ( List of maps returns undefined in dynamodb query ) 
DynamoDBを照会しています。これは、次のような構造で「複数単位」という属性を持ちます。リスト[MAP {MAP {S}、S}、...] LAMBDAをローカルにテストする: <事前> <コード> module.exports.getByAddres...

3  Aws Lambdaにストリーミングすると、Amazon CloudWatchバッチがどのようにログに記録されますか?  ( How does amazon cloudwatch batch logs when streaming to aws lambda ) 
AWS Documentation は、複数のログイベントレコードを示しますCloudWatchからログをストリーミングするときは、Lambdaに提供されます。 logevents ログイベントの配列として表される実際のログデータ 記録。...

0  HTML形式でPython Boto3を使用してAWS SESを使用して動的フィールドを送信するのに役立つ  ( Need help in sending dynamic fields with aws ses using python boto3 in html form ) 
この質問は繰り返し鳴るかもしれませんが、私は動的な値を取り込むのに苦労しています。 私はEメール本文でHTML形式で動的フィールドを送信する必要があるAWS Python Lambda関数を作成しようとしていました。ただし、「名前」や「日」などのダイナミックフ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有