設定對 Amazon S3 儲存貯體的存取權 - Amazon Aurora

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定對 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 的存取權
  1. 建立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/*" ] } ] }'
  2. 建立 IAM 角色。

    您可以這麼做,以便 Aurora PostgreSQL 可以擔任此IAM角色來存取您的 Amazon S3 儲存貯體。如需詳細資訊,請參閱 IAM 使用者指南 中的建立角色以將許可委派給IAM使用者

    建議您在資源型政策中使用 aws:SourceArnaws: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" } } } ] }'
  3. 將您建立IAM的政策連接至您建立IAM的角色。

    下列 AWS CLI 命令會將上一個步驟中建立的政策連接至名為 rds-s3-import-role Replace your-policy-arn 的角色,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
  4. 將IAM角色新增至資料庫叢集

    您可以使用 AWS Management Console 或 來執行此操作 AWS CLI,如下所述。

使用主控台新增 PostgreSQL 資料庫叢集IAM的角色
  1. 登入 AWS Management Console 並在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/

  2. 選擇 PostgreSQL 資料庫叢集名稱以顯示其詳細資訊。

  3. 連線與安全索引標籤的管理IAM角色區段中,選擇要在此叢集 新增角色 下新增IAM的角色

  4. 請在 Feature (功能) 下,選擇 s3Import

  5. 選擇 Add role (新增角色)

若要使用 新增 PostgreSQL 資料庫叢集IAM的角色 CLI
  • 使用下列命令,將角色新增至名為 的 PostgreSQL 資料庫叢集my-db-cluster。Replace (取代) your-role-arn ARN 您在上一個步驟中記下的角色。使用 s3Import 作為 --feature-name 選項的值。

    範例

    用於 Linux, macOS、 或 Unix:

    aws rds add-role-to-db-cluster \ --db-cluster-identifier my-db-cluster \ --feature-name s3Import \ --role-arn your-role-arn \ --region your-region

    用於 Windows:

    aws rds add-role-to-db-cluster ^ --db-cluster-identifier my-db-cluster ^ --feature-name s3Import ^ --role-arn your-role-arn ^ --region your-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 匯入資料時遇到問題,請參閱下文以取得建議: