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への直接アップロードを承認する必要があります。
このための推奨アーキテクチャは次のとおりです。
これは、認証されたユーザーのみにアップロードを許可する安全な手段です。
参照:事前署名されたURLを使用したオブジェクトのアップロード-Amazon Simple Storage Service
Pythonのバリエーション
特にPython経由でアップロードしたい場合は、次のことができます。
この方法では、認証されたユーザーのみがバケットにアップロードできるようになります。
結論:アップロードするファイルによって署名が異なるため、署名を提供することはできません。ただし、アップロードを許可するために、一時的な資格情報または事前に署名されたURLを提供できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加