

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

# 設定 IAM 許可權限以進行 RDS for Oracle 與 Amazon S3 的整合
<a name="oracle-s3-integration.preparing"></a>

若要讓 RDS for Oracle 與 Amazon S3 整合，則您的資料庫執行個體必須具有 Amazon S3 儲存貯體的存取權。您的資料庫執行個體使用的 Amazon VPC 不需要提供存取給 Amazon S3 端點。

RDS for Oracle 支援在一個帳戶中的資料庫執行個體與另一個帳戶中的 Amazon S3 儲存貯體之間傳輸檔案。如需採取額外步驟，下列各節中會說明這些步驟。

**Topics**
+ [步驟 1：建立 Amazon RDS 角色的 IAM 政策](#oracle-s3-integration.preparing.policy)
+ [步驟 2：(選用) 建立 Amazon S3 儲存貯體的 IAM 政策](#oracle-s3-integration.preparing.policy-bucket)
+ [步驟 3：建立您的資料庫執行個體的 IAM 角色並附加政策](#oracle-s3-integration.preparing.role)
+ [步驟 4：建立 IAM 角色與 RDS for Oracle 資料庫執行個體的關聯](#oracle-s3-integration.preparing.instance)

## 步驟 1：建立 Amazon RDS 角色的 IAM 政策
<a name="oracle-s3-integration.preparing.policy"></a>

在此步驟中，您會建立具有在 Amazon S3 儲存貯體和 RDS 資料庫執行個體之間傳輸檔案所需許可的 AWS Identity and Access Management (IAM) 政策。此步驟假設您已建立 S3 儲存貯體。

在您建立政策之前，請記住下列資訊：
+ 儲存貯體的 Amazon Resource Name (ARN)
+ 如果您的儲存貯體使用 SSE-KMS 或 SSE-S3 加密，則為 AWS KMS 金鑰的 ARN
**注意**  
RDS for Oracle 資料庫執行個體無法存取使用 SSE-C 加密的 Amazon S3 儲存貯體。

如需詳細資訊，請參閱《Amazon Simple Storage Service 使用者指南》**中的[使用伺服器端加密保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)。

### 主控台
<a name="oracle-s3-integration.preparing.policy.console"></a>

**建立 IAM 政策以允許 Amazon RDS 存取您的 Amazon S3 儲存貯體**

1. 開啟 [IAM 管理主控台](https://console.aws.amazon.com/iam/home?#home)。

1. 在 **Access management** (存取管理) 下，請選擇 **Policies** (政策)。

1. 選擇**建立政策**。

1. 在 **Visual editor (視覺化編輯器)** 標籤中，選擇 **Choose a service (選擇服務)**，然後選擇 **S3**。

1. 在 **Actions** (動作) 中，選擇 **Expand all** (全部展開)，然後選擇從 Amazon S3 儲存貯體傳輸檔案至 Amazon RDS 所需的儲存貯體許可和物件許可。例如，請執行以下操作：
   + 展開 **List** (清單)，然後選取 **ListBucket**。
   + 展開 **Read** (讀取)，然後選取 **GetObject**。
   + 展開**寫入**，然後選取 **PutObject**、**DeleteObject**、**AbortMultipartUpload** 和 **ListMultipartUploadParts**。將大型檔案 (100 MB 或更大) 上傳至 Amazon S3 時，需要分段上傳許可。
   + 展開 **Permissions management (許可權限管理)**，然後選取 **PutObjectAcl**。若您計劃將檔案上傳至另一個帳戶所擁有的儲存貯體，而此帳戶需要儲存貯體內容的完全控制，則需要此許可權限。

   *物件許可權限*是 Amazon S3 中物件作業的許可權限。您必須授予其儲存貯體中的物件，而非儲存貯體本身。如需詳細資訊，請參閱[物件作業的許可權限](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-with-s3-actions.html#using-with-s3-actions-related-to-objects)。

1. 選擇**資源**，然後執行下列動作：

   1. 選擇**特定**。

   1. 針對**儲存貯體**，請選擇**新增 ARN**。輸入您的儲存貯體 ARN。儲存貯體名稱會自動填入。接著選擇 **Add (新增)**。

   1. 如果顯示**物件**資源，請選擇**新增 ARN** 以手動新增資源，或選擇**任何**。
**注意**  
您可以將 **Amazon Resource Name (ARN)** 設為更具體的 ARN 值，以允許 Amazon RDS 只能存取 Amazon S3 儲存貯體中的特定檔案或資料夾。如需如何為 Amazon S3 定義存取原則的詳細資訊，請參閱[管理 Amazon S3 資源的存取許可](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)。

1. (選用) 選擇 **Add additional permissions** (新增其他許可)，將資源新增至政策。例如，請執行以下操作：

   1. 如果您的儲存貯體使用自訂 KMS 金鑰加密，請為服務選取 **KMS**。

   1. 針對**手動動作**，請選取下列項目：
      + **加密**
      + **ReEncrypt from** 和 **ReEncrypt to**
      + **解密**
      + **DescribeKey**
      + **GenerateDataKey**

   1. 針對**資源**，請選擇**特定**。

   1. 針對**金鑰**，請選擇**新增 ARN**。輸入自訂金鑰的 ARN 作為資源，然後選擇**新增**。

      如需詳細資訊，請參閱《*Amazon Simple Storage Service 使用者指南*》中的[使用伺服器端加密搭配存放在 AWS Key Management Service (SSE-KMS) 中的 KMS 金鑰來保護資料](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingKMSEncryption.html)。

   1. 如果您想要 Amazon RDS 存取其他儲存貯體，請新增這些儲存貯體的 ARN。(選擇性) 您也可以授權存取 Amazon S3 中的所有儲存貯體和物件。

1. 選擇 **Next: Tags (下一步：標籤)**，然後選擇 **Next: Review (下一步：檢閱)**。

1. 在 **Name (名稱)** 輸入您的 IAM 政策名稱，例如 `rds-s3-integration-policy`。您可使用此項名稱，建立與資料庫叢集相關的 IAM 角色。您也可以新增選用的 **Description (描述) **值。

1. 選擇 **Create policy** (建立政策)。

### AWS CLI
<a name="oracle-s3-integration.preparing.policy.CLI"></a>

建立 AWS Identity and Access Management (IAM) 政策，授予 Amazon RDS 對 Amazon S3 儲存貯體的存取權。在您建立政策後，請記下政策的 ARN。您需要 ARN 才能進行後續步驟。

依據所需的存取類型，在政策中納入適當動作：
+ `GetObject` – 必須從 Amazon S3 儲存貯體傳輸檔案至 Amazon RDS。
+ `ListBucket` – 必須從 Amazon S3 儲存貯體傳輸檔案至 Amazon RDS。
+ `PutObject` – 必須由 Amazon RDS 傳輸檔案至 Amazon S3 儲存貯體。
+ `AbortMultipartUpload` – 從 Amazon RDS 將大型檔案 (100 MB 或更大) 傳輸至 Amazon S3 儲存貯體時，必須用於分段上傳。
+ `ListMultipartUploadParts` – 從 Amazon RDS 將大型檔案 (100 MB 或更大) 傳輸至 Amazon S3 儲存貯體時，必須用於分段上傳。

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

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws iam create-policy \
   --policy-name rds-s3-integration-policy \
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "s3:AbortMultipartUpload",
           "s3:ListMultipartUploadParts"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       }
     ]
   }'
```
下列範例包含自訂 KMS 金鑰的許可。  

```
aws iam create-policy \
   --policy-name rds-s3-integration-policy \
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "kms:Decrypt",
           "kms:Encrypt",
           "kms:ReEncrypt*",
           "kms:GenerateDataKey",
           "kms:DescribeKey",
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:kms:::your-kms-arn"
         ]
       }
     ]
   }'
```
在 Windows 中：  

```
aws iam create-policy ^
   --policy-name rds-s3-integration-policy ^
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "s3:AbortMultipartUpload",
           "s3:ListMultipartUploadParts"
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*"
         ]
       }
     ]
   }'
```
下列範例包含自訂 KMS 金鑰的許可。  

```
aws iam create-policy ^
   --policy-name rds-s3-integration-policy ^
   --policy-document '{
     "Version": "2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "s3integration",
         "Action": [
           "s3:GetObject",
           "s3:ListBucket",
           "s3:PutObject",
           "kms:Decrypt",
           "kms:Encrypt",
           "kms:ReEncrypt",
           "kms:GenerateDataKey",
           "kms:DescribeKey",
         ],
         "Effect": "Allow",
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-bucket", 
           "arn:aws:s3:::amzn-s3-demo-bucket/*",
           "arn:aws:kms:::your-kms-arn"
         ]
       }
     ]
   }'
```

## 步驟 2：(選用) 建立 Amazon S3 儲存貯體的 IAM 政策
<a name="oracle-s3-integration.preparing.policy-bucket"></a>

只有在下列情況中才需要此步驟：
+ 您計劃從一個帳戶 (帳戶 A) 將檔案上傳至 Amazon S3 儲存貯體，然後從另一個帳戶 (帳戶 B) 進行存取。
+ 帳戶 B 擁有儲存貯體。
+ 帳戶 B 需要載入儲存貯體中物件的完整控制。

若上述條件不適用於您，請跳到 [步驟 3：建立您的資料庫執行個體的 IAM 角色並附加政策](#oracle-s3-integration.preparing.role)。

如要建立儲存貯體政策，請確定您具有下列項目：
+ 帳戶 A 的帳戶 ID
+ 帳户 A 的使用者名稱
+ 帳戶 B 中 Amazon S3 儲存貯體的 ARN 值

### 主控台
<a name="oracle-s3-integration.preparing.policy-bucket.console"></a>

**建立或編輯儲存貯體政策**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 在 **Buckets (儲存貯體)** 清單中，選擇要建立儲存貯體政策的儲存貯體名稱，或您想編輯之儲存貯體政策的儲存貯體名稱。

1. 選擇 **Permissions** (許可)。

1. 在 **Bucket policy (儲存貯體政策)** 下方，選擇 **Edit (編輯)**。這會開啟「編輯儲存貯體政策」頁面。

1. 在 **Edit bucket policy** (編輯儲存貯體政策) 頁面，瀏覽*《Amazon S3 使用者指南》*中的 **Policy examples** (政策範例)、選擇 **Policy generator** (政策產生器) 以自動產生政策，或在 **Policy** (政策) 區段編輯 JSON。

   如果您選擇**政策產生器**， AWS 政策產生器會在新視窗中開啟：

   1. 在 **AWS Policy Generator** ( 政策產生器) 頁面上，在 **Select Type of Policy** (選取政策類型) 中選擇 **S3 Bucket Policy** (S3 儲存貯體政策)。

   1. 在提供的欄位中輸入資訊，以新增陳述式，然後選擇 **Add Statement** (新增陳述式)。針對您想要新增的任意數量陳述式重複此動作。如需這些欄位的詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM JSON 政策元素參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)。
**注意**  
為方便起見，**Edit bucket policy** (編輯儲存貯體政策) 頁面會在 **Policy** (政策) 文字欄位上方顯示目前儲存貯體的 **Bucket ARN **(Amazon Resource Name) (儲存貯體 ARN (Amazon 資源名稱))。您可以複製此 ARN，以在 **AWS Policy Generator** ( 政策產生器) 頁面上的陳述式中使用。

   1. 完成新增陳述式後，選擇 **Generate Policy** (產生政策)。

   1. 複製產生的政策文字，選擇 **Close** (關閉)，然後退回 Amazon S3 主控台中的 **Edit bucket policy** (編輯儲存貯體政策) 頁面。

1. 在 **Policy** (政策) 方塊中，編輯現有政策，或從政策產生器貼上儲存貯體政策。請務必先處理安全性警告、錯誤、一般警告，以及建議，然後再儲存政策。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "ExamplePermissions",
         "Effect": "Allow",
         "Principal": {
           "AWS": "arn:aws:iam::123456789012:user/account-A-user"
         },
         "Action": [
           "s3:PutObject",
           "s3:PutObjectAcl"
         ],
         "Resource": [
           "arn:aws:s3:::amzn-s3-demo-destination-bucket",
           "arn:aws:s3:::amzn-s3-demo-destination-bucket/*"
         ]
       }
     ]
   }
   ```

------

1. 選擇 **Save changes** (儲存變更)，此選項會跳至儲存貯體許可頁面。

## 步驟 3：建立您的資料庫執行個體的 IAM 角色並附加政策
<a name="oracle-s3-integration.preparing.role"></a>

此步驟會假設您已於 [步驟 1：建立 Amazon RDS 角色的 IAM 政策](#oracle-s3-integration.preparing.policy) 中建立了 IAM 政策。於此步驟中，您會建立 RDS for Oracle 資料庫執行個體的角色，然後將政策附加至角色。

### 主控台
<a name="oracle-s3-integration.preparing.role.console"></a>

**建立 IAM 角色以允許 Amazon RDS 存取 Amazon S3 儲存貯體**

1. 開啟 [IAM 管理主控台](https://console.aws.amazon.com/iam/home?#home)。

1. 在導覽窗格中，選擇 **Roles** (角色)。

1. 選擇 **Create Role** (建立角色)。

1. 選擇 **AWS 服務**。

1. 對於**其他服務的使用案例 AWS ：**，選擇 **RDS**，然後選擇 **RDS – 將角色新增至資料庫**。然後選擇**下一步**。

1. 請在**許可政策**之下的**搜尋**輸入您在 [步驟 1：建立 Amazon RDS 角色的 IAM 政策](#oracle-s3-integration.preparing.policy) 建立的 IAM 政策名稱，然後於政策出現在清單時加以選取。然後選擇**下一步**。

1. 在**角色名稱**中輸入 IAM 角色名稱，例如 `rds-s3-integration-role`。您也可以新增選用的 **Description (描述) **值。

1. 選擇建**立角色**。

### AWS CLI
<a name="integration.preparing.role.CLI"></a>

**如要建立角色並將政策附加至該角色**

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

   建議您在資源型信任關係中使用 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcearn) 和 [https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceaccount) 全域條件內容索引鍵，將服務的許可限定於特定資來源。這是防止[混淆代理人問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)最有效的方式。

   您可以同時使用全域條件內容索引鍵和包含帳號 ID 的 `aws:SourceArn` 值。在此情況下，當在相同陳述式中使用 `aws:SourceAccount` 值和 `aws:SourceArn` 裡的帳户時，兩者必須使用同樣的帳户 ID。
   + 如果您想要跨服務存取單一資源，請使用 `aws:SourceArn`。
   + 如果您想要允許該帳戶中的任何資源與跨服務使用相關聯，請使用 `aws:SourceAccount`。

   在信任關係中，請務必使用 `aws:SourceArn` 全域條件內容索引鍵，其中包含存取角色的資源之完整 Amazon 資源名稱 (ARN)。

   下列 AWS CLI 命令`rds-s3-integration-role`會為此目的建立名為 的角色。  
**Example**  

   針對 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:SourceAccount": "my_account_ID",
                    "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname"
                }
            }
          }
        ]
      }'
   ```

   在 Windows 中：

   ```
   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:SourceAccount": "my_account_ID",
                    "aws:SourceArn": "arn:aws:rds:Region:my_account_ID:db:dbname"
                }
            }
          }
        ]
      }'
   ```

   如需詳細資訊，請參閱《IAM 使用者指南》**中的[建立角色以將許可委派給 IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-user.html)。

1. 角色建立後，請記下角色的 ARN。您需要 ARN 才能進行後續步驟。

1. 請將您建立的政策連接到您建立的角色。

   下列 AWS CLI 命令會將政策連接至名為 的角色`rds-s3-integration-role`。  
**Example**  

   針對 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
   ```

   將 `your-policy-arn` 替換為您前個步驟記下的政策 ARN。

## 步驟 4：建立 IAM 角色與 RDS for Oracle 資料庫執行個體的關聯
<a name="oracle-s3-integration.preparing.instance"></a>

設定 Amazon S3 整合許可的最後一個步驟是將您的 IAM 角色與資料庫執行個體建立關聯。請注意以下要求：
+ 您必須能存取連接了必要 Amazon S3 許可政策的角色。
+ 您一次只能將一個 IAM 角色與 RDS for Oracle 資料庫執行個體建立關聯。
+ 您的資料庫執行個體必須處於**可用**狀態。

### 主控台
<a name="oracle-s3-integration.preparing.instance.console"></a>

**如要建立 IAM 角色與 RDS for Oracle 資料庫執行個體的關聯**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)：// 開啟 Amazon RDS 主控台。

1. 在導覽窗格中，選擇 **Databases** (資料庫)。

1. 選擇 RDS for Oracle 資料庫執行個體名稱以顯示其詳細資訊。

1. 在 **Connectivity & security (連線和安全)** 索引標籤上，向下捲動至頁面底部的 **Manage IAM roles (管理 IAM 角色)** 區段。

1. 對於**新增 IAM 角色到此執行個體**，請選擇您在 [步驟 3：建立您的資料庫執行個體的 IAM 角色並附加政策](#oracle-s3-integration.preparing.role) 中建立的角色。

1. 針對 **Feature** (功能) 選擇 **S3\$1INTEGRATION**。  
![\[新增 S3_INTEGRATION 角色\]](http://docs.aws.amazon.com/zh_tw/AmazonRDS/latest/UserGuide/images/ora-s3-integration-role.png)

1. 選擇 **Add role (新增角色)**。

### AWS CLI
<a name="oracle-s3-integration.preparing.instance.CLI"></a>

下列 AWS CLI 命令會將 角色新增至名為 的 Oracle 資料庫執行個體`mydbinstance`。

**Example**  
針對 Linux、macOS 或 Unix：  

```
aws rds add-role-to-db-instance \
   --db-instance-identifier mydbinstance \
   --feature-name S3_INTEGRATION \
   --role-arn your-role-arn
```
在 Windows 中：  

```
aws rds add-role-to-db-instance ^
   --db-instance-identifier mydbinstance ^
   --feature-name S3_INTEGRATION ^
   --role-arn your-role-arn
```

將 `your-role-arn` 替換為您前個步驟記下的角色 ARN。`S3_INTEGRATION` 必須在 `--feature-name` 選項中指定。