S3署名を使用したPythonファイルのアップロード?

Abhijit Srivastava

S3v4Signatureの使用に関するファイルをアップロードするユースケースがありますこれらのアップロードは、Python スクリプトを使用して実行する必要があります

S3 v4Signatureは、当社へのファイルの数nをアップロードするために私たちのクライアントに渡されるS3のバケット。ファイル名やカウントがわからないため、署名付きURLを生成できません。

これが生成されたV4署名であると考えてください。(簡単にするために、この署名をハードコピーとしてクライアントに渡したと考えてください。)

key = "client/user_1/exec_1/",

s = {
  "url": "https://s3.amazonaws.com/package-bucket",
  "fields": {
    "acl": "public-read",
    "bucket": "package-bucket",
    "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
    "X-Amz-Credential": "AKI****LV5P/20200115/us-east-1/s3/aws4_request",
    "X-Amz-Date": "20200115T183407Z",
    "Policy": "eyJleHBpcmF*******MTgzNDA3WiJ9XX0=",
    "X-Amz-Signature": "128c4************0c8d9",
  }
}

現在、この署名は、n個のファイルをclient / user_1 / exec_1 /にアップロードするためにPythonスクリプトで使用する必要があります私はリクエストを使用してこれを実装しようとしていますが、運がありません。

with open('index.js', 'rb') as data:
  r = requests.put(s.get('url'), data=data, headers=s.get('fields'))
  print(r)

このPythonスクリプトは、クライアントのサーバーで実行されます。s3バケットに認証情報を与えることはできません。

s3のフォルダは次のようになります

client/user_1/exec_1
client/user_1/exec_2
client/user_2/exec_1
client/user_2/exec_2
client/user_2/exec_3
client/user_2/exec_4

ファイルがアップロードされると、サーバーで処理されます。

注:フロントエンドはプロセス全体に関与しているわけではありません。

誰かがファイルをs3にアップロードする機能を提案できますか?


署名の生成に使用される関数。

function singleFilePublicUpload(key) {
  console.log("singleFilePublicUpload | Signature Request", key);
  const Bucket = 'package-bucket';
  const acl = "public-read";
  const params = { 
    Bucket, Fields: { acl }, Conditions: [['starts-with', '$key', key]]
  };
  const presignedPost = s3.createPresignedPost(params);
  presignedPost.fields.key = key;
  return presignedPost;
}

よくある質問

Q:Pythonスクリプトはどこで実行されていますか?

A: Pythonアップロードスクリプトはさまざまなクライアントサーバーで実行されます。

Q:それはあなたによって実行されていますか、それともあなたのユーザーまたは顧客によって実行されていますか?

A: Pythonアップロードスクリプトはクライアントによって実行されます。

Q:それとも、ユーザーがアクセスするのはWebサイトのバックエンドですか?

A:いいえ。ウェブサイトはこのプロセスに関与していません。

Q:S3へのアップロードが許可されていることを証明するために、どのように認証してもらいたいですか?

A:ワイルドカード署名を使用してS3フォルダーへのアクセスを許可したいと思います。

Q:AWSのアクセス許可が必要なため、botoを使用したくないとのことですが、S3へのアップロードをどのように承認するつもりですか?

A:クライアントが提供された署名を使用してPOSTリクエストをS3に直接送信することを望んでいます。V4署名は、S3への直接アップロードを承認する必要があります。

John Rotenstein

このため推奨アーキテクチャは次のとおりです。

  • ユーザーにIAM認証情報を使用ないでください。それらはあなた自身の内部使用のためだけです。
  • ユーザーにWebアプリケーションへの認証を依頼します。アプリケーションは、(Cognitoを使用して、または任意の方法で)IDを検証します。
  • 次に、アプリケーションは、事前に署名されたURLを使用してファイルをアップロードできるページを表示しますこれは時間制限のあるURLであり、指定された制約(たとえば、どこに保存するか、どの名前を使用するか)内でアップロードを許可します。

これは、認証されたユーザーのみにアップロードを許可する安全な手段です。

参照:事前署名されたURLを使用したオブジェクトのアップロード-Amazon Simple Storage Service

Pythonのバリエーション

特にPython経由でアップロードしたい場合は、次のことができます。

  • Pythonアプリ(クライアントサイトで実行)をアプリで認証する
  • その後、アプリはAWS Security Token Service(STS)を使用して、AmazonS3にアップロードする権限を持つ一時的な認証情報を作成できます。
  • 次に、Pythonアプリはboto3でそれらの資格情報を使用してファイルをアップロードします

この方法では、認証されたユーザーのみがバケットにアップロードできるようになります。

結論:アップロードするファイルによって署名が異なるため署名を提供することはできませんただし、アップロードを許可するために、一時的な資格情報または事前に署名されたURLを提供できます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

s3を使用した複数ファイルのアップロード

分類Dev

Ionic android-事前に署名されたURLを使用してファイルをS3にアップロードします(エラーコード:3)

分類Dev

角度またはJavaScriptで事前に署名されたURLを使用してS3バケットにファイルをアップロードする方法

分類Dev

S3の事前署名されたURLファイルのアップロード– nodeJS +クライアント

分類Dev

Cakephp 3 を使用した AWS S3 ファイルのアップロード

分類Dev

Javaを使用したS3へのAWSファイルのアップロード

分類Dev

OS Openを使用したs3へのGolangファイルのアップロード

分類Dev

Django:botoを使用したs3へのファイルのアップロード

分類Dev

Node.jsとBusboyを使用したS3への複数ファイルのアップロード

分類Dev

S3の事前署名されたURLへのファイルのアップロード

分類Dev

S3署名付きURLを介してzipファイルをアップロードする方法

分類Dev

Pythonでのs3ファイルのアップロードでエラーが発生しました

分類Dev

jQueryファイルアップロードを使用したS3でのファイルコンテンツタイプの設定

分類Dev

AWS ApiGatewayを介したS3フォームファイルのアップロード

分類Dev

Kotlinコルーチンを介したS3ファイルの同時アップロード

分類Dev

GuzzlePHPを使用したマルチパート/フォームデータのアップロードにはs3ファイルを使用します

分類Dev

サーバー側アプリケーションから生成された署名付きURLを使用して、AndroidからS3サーバーにファイル(ビデオファイル)をアップロードする

分類Dev

ユーザーがアップロードしたファイルをrailsのs3に送信する

分類Dev

何をしても、事前に署名されたURLを使用してファイルをS3にアップロードできません。AWSコマンドラインは機能します。CURLおよびその他= 403

分類Dev

ファイルを生成し、zipしてs3にアップロードするためのterraform

分類Dev

AWS PHP SDK:事前署名されたURLでS3ファイルのアップロードサイズを制限する

分類Dev

Multer-s3を使用したAWS s3への大きなファイルのアップロード中の接続リセット

分類Dev

ファインアップローダーを使用して、LaravelのS3に複数のファイルを直接アップロードする

分類Dev

AWSSDKを使用して.NETCoreのS3にファイルをアップロードする

分類Dev

std :: fstreamでgz圧縮されたファイルの事前署名されたURLを使用して、AWS S3 HTTPアップロードのコンテンツの長さを設定するにはどうすればよいですか?

分類Dev

AWS Lambda(Python)のmultipart / form-dataからS3にファイルをアップロードします

分類Dev

Amazon s3 python、boto3をアップロードした後にファイルのURLを取得する

分類Dev

Python:大きなファイルをS3高速でアップロード

分類Dev

DjangoストアがアップロードしたファイルをS3で

Related 関連記事

  1. 1

    s3を使用した複数ファイルのアップロード

  2. 2

    Ionic android-事前に署名されたURLを使用してファイルをS3にアップロードします(エラーコード:3)

  3. 3

    角度またはJavaScriptで事前に署名されたURLを使用してS3バケットにファイルをアップロードする方法

  4. 4

    S3の事前署名されたURLファイルのアップロード– nodeJS +クライアント

  5. 5

    Cakephp 3 を使用した AWS S3 ファイルのアップロード

  6. 6

    Javaを使用したS3へのAWSファイルのアップロード

  7. 7

    OS Openを使用したs3へのGolangファイルのアップロード

  8. 8

    Django:botoを使用したs3へのファイルのアップロード

  9. 9

    Node.jsとBusboyを使用したS3への複数ファイルのアップロード

  10. 10

    S3の事前署名されたURLへのファイルのアップロード

  11. 11

    S3署名付きURLを介してzipファイルをアップロードする方法

  12. 12

    Pythonでのs3ファイルのアップロードでエラーが発生しました

  13. 13

    jQueryファイルアップロードを使用したS3でのファイルコンテンツタイプの設定

  14. 14

    AWS ApiGatewayを介したS3フォームファイルのアップロード

  15. 15

    Kotlinコルーチンを介したS3ファイルの同時アップロード

  16. 16

    GuzzlePHPを使用したマルチパート/フォームデータのアップロードにはs3ファイルを使用します

  17. 17

    サーバー側アプリケーションから生成された署名付きURLを使用して、AndroidからS3サーバーにファイル(ビデオファイル)をアップロードする

  18. 18

    ユーザーがアップロードしたファイルをrailsのs3に送信する

  19. 19

    何をしても、事前に署名されたURLを使用してファイルをS3にアップロードできません。AWSコマンドラインは機能します。CURLおよびその他= 403

  20. 20

    ファイルを生成し、zipしてs3にアップロードするためのterraform

  21. 21

    AWS PHP SDK:事前署名されたURLでS3ファイルのアップロードサイズを制限する

  22. 22

    Multer-s3を使用したAWS s3への大きなファイルのアップロード中の接続リセット

  23. 23

    ファインアップローダーを使用して、LaravelのS3に複数のファイルを直接アップロードする

  24. 24

    AWSSDKを使用して.NETCoreのS3にファイルをアップロードする

  25. 25

    std :: fstreamでgz圧縮されたファイルの事前署名されたURLを使用して、AWS S3 HTTPアップロードのコンテンツの長さを設定するにはどうすればよいですか?

  26. 26

    AWS Lambda(Python)のmultipart / form-dataからS3にファイルをアップロードします

  27. 27

    Amazon s3 python、boto3をアップロードした後にファイルのURLを取得する

  28. 28

    Python:大きなファイルをS3高速でアップロード

  29. 29

    DjangoストアがアップロードしたファイルをS3で

ホットタグ

アーカイブ