我正在嘗試將 csv 檔案從一個帳戶中的一個 s3 存盤桶加載到另一個帳戶。為了訪問 2 個帳戶,我撰寫了以下腳本
import boto3
source_session = boto3.Session(profile_name='account1')
source_s3 = source_session.client('s3')
destination_session = boto3.Session(profile_name='account2')
destination_s3 = destination_session.client('s3')
我看到對于upload_file() 方法,引數是檔案位置和des_bucket 名稱。我應該如何提及不同帳戶的檔案位置?
像這樣的東西:
destination_s3.upload_file(source_file_location, des_bucket_name);
uj5u.com熱心網友回復:
我認為您需要先從源存盤桶中下載檔案,因此您可以提供方法的磁盤檔案路徑destination_s3.upload_file。
uj5u.com熱心網友回復:
您可以使用 boto3copy_object()命令告訴 S3 在存盤桶之間復制物件。它將完全在 S3 內傳輸,無需下載/上傳。
但是,鑒于這兩個存盤桶屬于不同的帳戶,您將需要配置權限,以便您的程式使用一組既可以“讀取”源存盤桶又可以“寫入”到目標存盤桶的憑據(而不是使用兩組不同的憑據)。您可以通過兩種方式執行此操作:
拉動物件
您可以使用一組與目標存盤桶關聯的憑據“拉”一個物件:
- 使用來自目標賬戶 (
User B) 中的 IAM 用戶的憑證 - 在 IAM 中授予
User B從目標存盤桶讀取的權限 - 向源存盤桶添加一個存盤桶策略,允許
User B從存盤桶中讀取
推送物件
或者,您可以將物件從目標賬戶“推送”到目標存盤桶。您將使用一組與源帳戶關聯的憑據:
- 在源賬戶 (
User A) 中使用來自 IAM 用戶的憑證 - 在 IAM 中授予
User A從源存盤桶讀取的權限 - 將存盤桶策略添加到允許
User A寫入存盤桶的目標存盤桶 - 復制物件時,指定
ACL='bucket-owner-full-control',這會將物件的所有權授予目標帳戶。僅當使用不擁有存盤桶的賬戶的憑據創建物件時才需要這樣做。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/403105.html
標籤:
