如何將資料從 Amazon Redshift 複製或卸載到另一個帳戶中的 Amazon S3 儲存貯體?
3 分的閱讀內容
0
我想將資料從 Amazon Redshift 複製或卸載到另一個 AWS 帳戶中的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。但我無法擔任另一個帳戶中的 AWS Identity and Access Management (IAM) 角色。我需要設定跨帳戶存取權。
簡短說明
若要存取不同帳戶中的 Amazon S3 資源,請完成以下步驟:
- 在 Amazon S3 帳戶中建立一個 IAM 角色 (RoleA)。
- 在 Amazon Redshift 帳戶中建立一個 IAM 角色 (RoleB),並授予擔任 RoleA 的權限。
- 測試 RoleA 與 RoleB 之間的跨帳戶存取權。
**注意:**上述步驟適用於 Redshift Serverless 和 Redshift 已佈建資料倉儲,且適用於所有資料格式。不過,對於某些資料格式,您可能需要修改 COPY 和 UNLOAD 命令語法。例如,如果您使用 Parquet 資料格式,則必須使用以下語法:
COPY table_name FROM 's3://awsexamplebucket/crosscopy1.csv' IAM_ROLE 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA FORMAT AS PARQUET;
解決方法
**注意:**以下程序假設 Amazon Redshift 叢集和 S3 儲存貯體位於相同 AWS 區域。如果您的叢集和儲存貯體位於不同區域,則必須將 REGION 參數新增至 COPY 或 UNLOAD 命令。
在使用 Amazon S3 的帳戶中建立 IAM 角色 (RoleA)
請完成以下步驟:
- 開啟 IAM console (IAM 主控台)。
- 選擇 Policies (政策),然後選擇 Create policy (建立政策)。
- 選擇 JSON 索引標籤,然後輸入以下 IAM 政策:
**注意:**如果 S3 儲存貯體未使用 AWS Key Management Service (KMS) 金鑰加密,則請移除 AWS KMS 權限。
**注意:**將 awsexamplebucket 替換為 S3 儲存貯體的名稱。如果您使用 AWS KMS key 加密,請將 KMS_KEY_ARN_A_Used_for_S3_encryption 替換為 AWS KMS key 的 ARN。{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:GenerateDataKey" ], "Resource": [ "<KMS_KEY_ARN_A_Used_for_S3_encryption>" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:Get*", "s3:List*" ], "Resource": [ "arn:aws:s3:::awsexamplebucket", "arn:aws:s3:::awsexamplebucket/*" ] } ] } - 選擇 Review policy (檢閱政策)。
- 輸入政策的名稱,然後選擇 Create policy (建立政策)。
- 在導覽窗格中,選擇 Roles (角色)。
- 選擇 Create role (建立角色)。
- 選擇 Another AWS account (另一個 AWS 帳戶) 作為受信任實體角色。
- 輸入使用 Amazon Redshift 的帳戶 account ID (帳戶 ID)。
- 選擇 Next: Permissions (下一步:權限),然後選取政策。
- (選用) 選擇 Next: Tags (下一步:標籤),然後新增標籤。
- 選擇 Next: Review (下一步:檢閱)。
- 輸入角色名稱。
- 選擇 Create role (建立角色)。
在 Amazon Redshift 帳戶中建立 IAM 角色 (RoleB),並授予擔任 RoleA 的權限
請完成以下步驟:
- 開啟 IAM console (IAM 主控台)。
- 選擇 Policies (政策),然後選擇 Create policy (建立政策)。
- 選擇 JSON 索引標籤,然後輸入以下 IAM 政策:
**注意:**將 AmazonS3AccountRoleARN 替換為 RoleA (arn:aws:iam::Amazon_S3_Account_ID:role/RoleA) 的 ARN。{ "Version": "2012-10-17", "Statement": [ { "Sid": "CrossAccountPolicy", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "AmazonS3AccountRoleARN" } ] } - 選擇 Review policy (檢閱政策)。
- 輸入政策的名稱,然後選擇 Create policy (建立政策)。
- 在導覽窗格中,選擇 Roles (角色)。
- 選擇 Create role (建立角色)。
- 選擇 AWS service (AWS 服務) 作為您的受信任實體類型。
- 選擇 Redshift。
- 選擇 Redshift - Customizable (Redshift - 可自訂)。
- 選擇 Next: Permissions (下一步:權限),然後選取政策。
- (選用) 選擇 Next: Tags (下一步:標籤),然後新增標籤。
- 選擇 Next: Review (下一步:檢閱)。
- 輸入角色名稱。
- 選擇 Create role (建立角色)。
- 將 RoleB 連接至您的 Amazon Redshift 叢集:
對於已佈建 Redshift 叢集,請參閱將 IAM 角色與您的叢集建立關聯。
-或-
對於 Redshift Serverless,請參閱授予 Amazon Redshift Serverless 權限。
**注意:**當您在 Amazon Redshift 中鏈結 IAM 角色時,Amazon Redshift 叢集會擔任 RoleB,然後 RoleB 會擔任 RoleA。
測試您的 S3 儲存貯體與 Amazon Redshift 之間的跨帳戶存取權
請完成以下步驟:
-
執行 COPY 命令,將資料從您的 S3 儲存貯體匯入 Amazon Redshift:
COPY table_name FROM 's3://awsexamplebucket/crosscopy1.csv' IAM_ROLE 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA' DELIMITER ',' REMOVEQUOTES; -
若要確認已授予跨帳戶存取權,請執行 UNLOAD 命令,將資料從 Amazon Redshift 卸載至您的 S3 儲存貯體:
UNLOAD ('SELECT * FROM table_name') TO 's3://awsexamplebucket/folder/table_name_' IAM_ROLE 'arn:aws:iam::Amazon_Redshift_Account_ID:role/RoleB,arn:aws:iam::Amazon_S3_Account_ID:role/RoleA' KMS_KEY_ID 'ARN_KMS_KEY_ID' ENCRYPTED;
**注意:**在上述命令中,替換以下值:
- **table_name:**您要將 Amazon S3 資料複製到其中的 Amazon Redshift 資料表
- **s3://awsexamplebucket/crosscopy1.csv:**您要從中複製資料的 S3 檔案路徑
- Amazon_Redshift_Account_ID: Amazon Redshift 帳戶的帳戶 ID
- Amazon_S3_Account_ID: Amazon S3 帳戶的帳戶 ID
- (選用) **ARN_KMS_KEY_ID:**您用來加密 S3 儲存貯體的 KMS key ID 的 ARN
相關資訊
沒有評論
相關內容
- 已提問 2 年前

