本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定對 Amazon S3 儲存貯體的存取權
若要從 Amazon S3 檔案匯入資料,請為 Aurora PostgreSQL 資料庫叢集提供許可,以便存取檔案所在的 Amazon S3 儲存貯體。您可以透過以下兩個方式中的一個提供存取給 Amazon S3 儲存貯體,如下列主題中所述。
使用 IAM 角色存取 Amazon S3 儲存貯體
在您由 Amazon S3 檔案載入資料之前,請為 Aurora PostgreSQL 資料庫叢集 提供許可,以便存取檔案所在的 Amazon S3 儲存貯體。這樣您就不必管理額外的登入資料資訊或在 aws_s3.table_import_from_s3 函數呼叫中提供它。
若要執行此動作,請建立可提供 Amazon S3 儲存貯體存取的 IAM 政策。建立 IAM 角色,並將政策連接到該角色。然後將 IAM 角色指派到您的資料庫叢集。
注意
您無法建立 IAM 角色與 Aurora Serverless v1 資料庫叢集的關聯,因此以下步驟不適用。
透過 IAM 角色將 Aurora PostgreSQL 資料庫叢集的存取權授予 Amazon S3
-
建立 IAM 政策。
此政策可提供儲存貯體及物件許可,讓 Aurora PostgreSQL 資料庫叢集 能夠存取 Amazon S3。
在政策中納入下列必要動作,以允許由 Amazon S3 儲存貯體傳輸檔案至 Aurora PostgreSQL:
-
s3:GetObject
-
s3:ListBucket
在政策中包含下列資源,以識別 Amazon S3 儲存貯體和儲存貯體中的物件。這會顯示用於存取 Amazon S3 的 Amazon Resource Name (ARN) 格式。
-
arn:aws:s3::
amzn-s3-demo-bucket
-
arn:aws:s3::
amzn-s3-demo-bucket
/*
如需建立 Aurora PostgreSQL IAM 政策的詳細資訊,請參閱 建立並使用 IAM 政策進行 IAM 資料庫存取。另請參閱《IAM 使用者指南》中的教學:建立和連接您的第一個客戶受管原則。
下列 AWS CLI 命令會使用這些選項建立名為
rds-s3-import-policy
的 IAM 政策。它將存取權授予名為amzn-s3-demo-bucket
的儲存貯體。注意
請記下此命令所傳回政策的 Amazon Resource Name (ARN)。在後續步驟中將政策連接至 IAM 角色時,您會需要此 ARN。
範例
對於 Linux、 macOS或 Unix:
aws iam create-policy \ --policy-name rds-s3-import-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] }'在 Windows 中:
aws iam create-policy ^ --policy-name rds-s3-import-policy ^ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "s3import", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::
amzn-s3-demo-bucket
", "arn:aws:s3:::amzn-s3-demo-bucket
/*" ] } ] }' -
-
建立 IAM 角色。
這麼做是為了讓 Aurora PostgreSQL 擔任此 IAM 角色,以存取您的 Amazon S3 儲存貯體。如需詳細資訊,請參閱《IAM 使用者指南》中的建立角色以將許可委派給 IAM 使用者。
建議您在資源型政策中使用
aws:SourceArn
和aws:SourceAccount
全域條件內容金鑰,將服務的許可限定於特定資源。這是防止混淆代理人問題最有效的方式。如果同時使用這兩個全域條件內容索引鍵,且
aws:SourceArn
值包含帳戶 ID,則在相同政策陳述式中使用aws:SourceAccount
值和aws:SourceArn
值中的帳戶時,必須使用相同的帳戶 ID。如果您想要跨服務存取單一資源,請使用
aws:SourceArn
。-
如果您想要允許該帳戶中的任何資源與跨服務使用相關聯,請使用
aws:SourceAccount
。
在政策中,請務必搭配資源的完整 ARN 來使用
aws:SourceArn
全域條件內容金鑰。下列範例示範如何使用 AWS CLI 命令來建立名為 的角色rds-s3-import-role
。範例
對於 Linux、 macOS或 Unix:
aws iam create-role \ --role-name rds-s3-import-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "
111122223333
", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:cluster:clustername
" } } } ] }'在 Windows 中:
aws iam create-role ^ --role-name rds-s3-import-role ^ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "
111122223333
", "aws:SourceArn": "arn:aws:rds:us-east-1:111122223333:cluster:clustername
" } } } ] }' -
將您建立的 IAM 政策附加至您建立的 IAM 角色。
下列 AWS CLI 命令會將上一個步驟中建立的政策連接至名為
rds-s3-import-role
Replace
with the policy ARN 的角色,該角色是您在先前步驟中記下的政策 ARN。your-policy-arn
範例
對於 Linux、 macOS或 Unix:
aws iam attach-role-policy \ --policy-arn
your-policy-arn
\ --role-name rds-s3-import-role在 Windows 中:
aws iam attach-role-policy ^ --policy-arn
your-policy-arn
^ --role-name rds-s3-import-role -
將 IAM 角色新增至資料庫叢集。
您可以使用 AWS Management Console 或 來執行此操作 AWS CLI,如下所述。
使用主控台為 PostgreSQL 資料庫叢集新增 IAM 角色
登入 AWS Management Console 並開啟位於 https://https://console.aws.amazon.com/rds/
的 Amazon RDS 主控台。 -
選擇 PostgreSQL 資料庫叢集名稱以顯示其詳細資訊。
-
在 Connectivity & security (連線能力與安全) 標籤上,在 Manage IAM roles (管理 IAM 角色) 區段中,在 Add IAM roles to this cluster (將 IAM 角色新增到此叢集執行個體) 下方,選擇要新增的角色。
-
請在 Feature (功能) 下,選擇 s3Import。
-
選擇 Add role (新增角色)。
使用 CLI 為 PostgreSQL 資料庫叢集新增 IAM 角色
-
使用下列命令將角色新增至名為
my-db-cluster
的 PostgreSQL 資料庫叢集。將
替換為您前個步驟記下的角色 ARN。使用your-role-arn
s3Import
作為--feature-name
選項的值。範例
對於 Linux、 macOS或 Unix:
aws rds add-role-to-db-cluster \ --db-cluster-identifier
my-db-cluster
\ --feature-name s3Import \ --role-arnyour-role-arn
\ --regionyour-region
在 Windows 中:
aws rds add-role-to-db-cluster ^ --db-cluster-identifier
my-db-cluster
^ --feature-name s3Import ^ --role-arnyour-role-arn
^ --regionyour-region
若要使用 Amazon RDS API 為 PostgreSQL 資料庫叢集新增 IAM 角色,請呼叫 AddRoleToDBCluster 操作。
使用安全登入資料存取 Amazon S3 儲存貯體
如果想要,可以使用安全登入資料來提供 Amazon S3 儲存貯體的存取,而非使用 IAM 角色提供存取。要執行此操作,您可以指定 aws_s3.table_import_from_s3 函數呼叫中的 credentials
參數。
credentials
參數是類型 的結構aws_commons._aws_credentials_1
,其中包含 AWS 登入資料。請使用 aws_commons.create_aws_credentials 函數在 aws_commons._aws_credentials_1
結構設定存取金鑰及秘密金鑰,如下所示。
postgres=>
SELECT aws_commons.create_aws_credentials( 'sample_access_key
', 'sample_secret_key
', '') AS creds \gset
建立 aws_commons._aws_credentials_1
結構之後,請使用 aws_s3.table_import_from_s3 函數搭配 credentials
參數來匯入資料,如下所示。
postgres=>
SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', :'creds' );
或是您可在 aws_commons.create_aws_credentials 函數呼叫之中內嵌 aws_s3.table_import_from_s3
函數呼叫。
postgres=>
SELECT aws_s3.table_import_from_s3( 't', '', '(format csv)', :'s3_uri', aws_commons.create_aws_credentials('sample_access_key
', 'sample_secret_key
', '') );
對 Amazon S3 的存取進行故障診斷
如果您在嘗試從 Amazon S3 匯入資料時遇到問題,請參閱下文以取得建議:
-
《Amazon Simple Storage Service 使用者指南》中的針對 Amazon S3 進行故障診斷。
-
《IAM 使用者指南》中的針對 Amazon S3 和 IAM 進行故障診斷