View a markdown version of this page

整合 RDS for SQL Server 與 S3 的先決條件 - Amazon Relational Database Service

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

整合 RDS for SQL Server 與 S3 的先決條件

開始之前,請尋找或建立您要使用的 S3 儲存貯體。另外,新增許可,以允許 RDS DB 執行個體存取 S3 儲存貯體。若要設定此存取,請建立 IAM 政策和 IAM 角色。

建立 IAM 政策以存取 Amazon S3
  1. 在 IAM 管理主控台的導覽窗格中,選擇 Policies (政策)。

  2. 建立新政策,並使用 Visual editor (視覺化編輯器) 索引標籤執行下列步驟。

  3. 針對 Service (服務),輸入 S3,然後選擇 S3 服務。

  4. 針對 Actions (動作),選擇下列選項,以授予資料庫執行個體所需的存取:

    • ListAllMyBuckets – 必要

    • ListBucket – 必要

    • GetBucketAcl – 必要

    • GetBucketLocation – 必要

    • GetObject – 將 S3 中的檔案下載至 時需要D:\S3\

    • PutObject – 將 D:\S3\ 中的檔案上傳至 S3 時需要

    • ListMultipartUploadParts – 將 D:\S3\ 中的檔案上傳至 S3 時需要

    • AbortMultipartUpload – 將 D:\S3\ 中的檔案上傳至 S3 時需要

  5. 針對 Resources (資源),顯示的選項取決於您在上一步選擇的動作。您看到的選項可能是 bucket (儲存貯體)、object (物件) 或兩者都有。對於每一項,新增適當的 Amazon Resource Name (ARN)。

    針對 bucket (儲存貯體),新增您要使用的儲存貯體的 ARN。例如,如果儲存貯體名為 amzn-s3-demo-bucket,請將 ARN 設為 arn:aws:s3:::amzn-s3-demo-bucket。

    針對 object (物件),輸入儲存貯體的 ARN,然後選擇下列其中一個:

    • 若要允許存取指定儲存貯體中的所有檔案,對於 Bucket name (儲存貯體) 和 Object name (物件名稱),請都選擇 Any (任何)。

    • 若要允許存取儲存貯體中的特定檔案或資料夾,請提供您要讓 SQL Server 存取的特定儲存貯體和物件的 ARN。

  6. 遵循主控台的指示操作,直到完成建立政策。

    以上為設定政策的簡略指南。如需建立 IAM 政策的詳細指示,請參閱 IAM 使用者指南中的建立 IAM 政策。

建立 IAM 角色以使用前一個程序中的 IAM 政策
  1. 在 IAM 管理主控台的導覽窗格中,選擇 Roles (角色)。

  2. 建立新的 IAM 角色,並選擇以下出現在主控台的選項:

    • AWS 服務

    • RDS

    • RDS – Add Role to Database (RDS - 將角色新增至資料庫)

    然後選擇下一步:許可。

  3. 針對 Attach permissions policies (連接許可政策),輸入您先前建立的 IAM 政策的名稱。然後從清單中選擇該政策。

  4. 遵循主控台的指示操作,直到完成建立角色。

    以上為設定角色的簡略指南。如需有關建立角色的詳細指示,請參閱《IAM 使用者指南》中的 IAM 角色。

使用以下程序,為 Amazon RDS 授予 Amazon S3 儲存貯體的存取權:

  1. 建立 IAM 政策以允許 Amazon RDS 存取 S3 儲存貯體。

  2. 建立 IAM 角色,讓 Amazon RDS 可代表您存取 S3 儲存貯體。

    如需更多詳細資訊,請參閱《IAM 使用者指南》中的建立角色以將許可委派給 IAM 使用者。

  3. 將您建立的 IAM 政策附加至您建立的 IAM 角色。

若要建立 IAM 政策

包含適當動作,以授予資料庫執行個體所需的存取:

  • ListAllMyBuckets – 必要

  • ListBucket – 必要

  • GetBucketAcl – 必要

  • GetBucketLocation – 必要

  • GetObject – 將 S3 中的檔案下載至 時需要D:\S3\

  • PutObject – 將 D:\S3\ 中的檔案上傳至 S3 時需要

  • ListMultipartUploadParts – 將 D:\S3\ 中的檔案上傳至 S3 時需要

  • AbortMultipartUpload – 將 D:\S3\ 中的檔案上傳至 S3 時需要

  1. 下列 AWS CLI 命令會使用這些選項建立名為 rds-s3-integration-policy的 IAM 政策。其將存取權授予名為 amzn-s3-demo-bucket 的儲存貯體。

    範例

    對於 Linux、macOS 或 Unix:

    aws iam create-policy \ --policy-name rds-s3-integration-policy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketAcl", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*" } ] }'

    在 Windows 中:

    務必將行尾改成您的界面所支援的字元 (^ 而不是 \)。另外,在 Windows 中,您必須以 \ 逸出所有雙引號。為了避免需要在 JSON 中逸出雙引號,您可以將 JSON 儲存為檔案,然後當作參數傳遞。

    首先,建立包含下列許可政策的 policy.json 檔案:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketACL", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload" ], "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/key_prefix/*" } ] }

    然後,使用以下命令建立政策:

    aws iam create-policy ^ --policy-name rds-s3-integration-policy ^ --policy-document file://file_path/assume_role_policy.json
  2. 政策建立後,請記下政策的 Amazon Resource Name (ARN)。後續步驟需要此 ARN。

建立 IAM 角色
  • 下列 AWS CLI 命令會為此目的建立 rds-s3-integration-role IAM 角色。

    範例

    針對 Linux、macOS 或 Unix:

    aws iam create-role \ --role-name rds-s3-integration-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }'

    在 Windows 中:

    務必將行尾改成您的界面所支援的字元 (^ 而不是 \)。另外,在 Windows 中,您必須以 \ 逸出所有雙引號。為了避免需要在 JSON 中逸出雙引號,您可以將 JSON 儲存為檔案,然後當作參數傳遞。

    首先,建立包含下列政策的 assume_role_policy.json 檔案:

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

    使用以下命令建立 IAM 角色:

    aws iam create-role ^ --role-name rds-s3-integration-role ^ --assume-role-policy-document file://file_path/assume_role_policy.json
    範例使用全域條件內容索引鍵建立 IAM 角色

    建議您在資源型政策中使用 aws:SourceArn 和 aws:SourceAccount 全域條件內容索引鍵,將服務的許可限定於特定資源。這是防止混淆代理人問題最有效的方式。

    您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 aws:SourceArn 值。在此情況下,當在相同政策陳述式中使用 aws:SourceAccount 值和 aws:SourceArn 裡的帳户時,兩者必須使用同樣的帳户 ID。

    • 如果您想要跨服務存取單一資源,請使用 aws:SourceArn。

    • 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯,請使用 aws:SourceAccount。

    在政策中,請務必使用 aws:SourceArn 全域條件內容索引鍵,其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。為進行 S3 整合,請務必包含資料庫執行個體 ARN,如下列範例所示。

    對於 Linux、macOS 或 Unix:

    aws iam create-role \ --role-name rds-s3-integration-role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier" } } } ] }'

    在 Windows 中:

    將全域條件內容索引鍵新增至 assume_role_policy.json。

    JSON
    { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "rds.amazonaws.com" ] }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceArn":"arn:aws:rds:Region:my_account_ID:db:db_instance_identifier" } } } ] }
將 IAM 政策連接至 IAM 角色
  • 下列 AWS CLI 命令會將政策連接至名為 的角色rds-s3-integration-role。將 your-policy-arn 替換為您前個步驟記下的政策 ARN。

    範例

    對於 Linux、macOS 或 Unix:

    aws iam attach-role-policy \ --policy-arn your-policy-arn \ --role-name rds-s3-integration-role

    在 Windows 中:

    aws iam attach-role-policy ^ --policy-arn your-policy-arn ^ --role-name rds-s3-integration-role