本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定對 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
的角色,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 並在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/
。 -
選擇 PostgreSQL 資料庫叢集名稱以顯示其詳細資訊。
-
在連線與安全索引標籤的管理IAM角色區段中,選擇要在此叢集 新增角色 下新增IAM的角色。
-
請在 Feature (功能) 下,選擇 s3Import。
-
選擇 Add role (新增角色)。
若要使用 新增 PostgreSQL 資料庫叢集IAM的角色 CLI
-
使用下列命令,將角色新增至名為 的 PostgreSQL 資料庫叢集
my-db-cluster
。Replace (取代)
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 為 PostgreSQL 資料庫叢集新增IAM角色RDSAPI,請呼叫 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