

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

# Amazon S3 儲存貯體
<a name="S3-buckets"></a>

Research and Engineering Studio (RES) 支援將 [Amazon S3 儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)掛載到 Linux Virtual Desktop Infrastructure (VDI) 執行個體。RES 管理員可以將 S3 儲存貯體加入 RES、將其連接至專案、編輯其組態，以及移除**環境管理**下 S3 儲存貯體索引標籤中的儲存貯體。

S3 儲存貯體儀表板提供您可使用的已加入 S3 儲存貯體清單。從 S3 儲存貯體儀表板，您可以：

1. 使用**新增儲存貯**體將 S3 儲存貯體加入 RES。

1. 選取 S3 儲存貯體並使用**動作**功能表來：
   + 編輯儲存貯體
   + 移除儲存貯體

1. 使用搜尋欄位依儲存貯體名稱搜尋，並尋找已加入的 S3 儲存貯體。  
![\[S3 儲存貯體清單可讓您依儲存貯體名稱搜尋並尋找加入的儲存貯體\]](http://docs.aws.amazon.com/zh_tw/res/latest/ug/images/docs-list-bucket.png)

下列各節說明如何在 RES 專案中管理 Amazon S3 儲存貯體。

**Topics**
+ [隔離 VPC 部署的 Amazon S3 儲存貯體先決條件](S3-buckets-prereqs.md)
+ [新增 Amazon S3 儲存貯體](S3-buckets-add.md)
+ [編輯 Amazon S3 儲存貯體](S3-buckets-edit.md)
+ [移除 Amazon S3 儲存貯體](S3-buckets-remove.md)
+ [資料隔離](S3-buckets-data-isolation.md)
+ [跨帳戶儲存貯體存取](S3-buckets-cross-account-access.md)
+ [防止私有 VPC 中的資料洩漏](S3-buckets-preventing-exfiltration.md)
+ [疑難排解](S3-buckets-troubleshooting.md)
+ [啟用 CloudTrail](S3-buckets-enabling-cloudtrail.md)

# 隔離 VPC 部署的 Amazon S3 儲存貯體先決條件
<a name="S3-buckets-prereqs"></a>

如果您要在隔離的 VPC 中部署 Research and Engineering Studio，請在 AWS 帳戶中部署 RES 之後，依照下列步驟更新 lambda 組態參數。

1. 登入部署 Research and Engineering Studio 之 AWS 帳戶的 Lambda 主控台。

1. 尋找並導覽至名為 的 Lambda 函數`<RES-EnvironmentName>-vdc-custom-credential-broker-lambda`。

1. 選取 函數的**組態**索引標籤。  
![\[隔離 VPC 環境變數\]](http://docs.aws.amazon.com/zh_tw/res/latest/ug/images/Isolated-VPC-Env-Variable.png)

1. 在導覽窗格中，選擇**環境變數**以檢視該區段。

1. 選擇**編輯**，並將下列新環境變數新增至函數：
   + 索引鍵：`AWS_STS_REGIONAL_ENDPOINTS`
   + 值：`regional`

1. 選擇**儲存**。

# 新增 Amazon S3 儲存貯體
<a name="S3-buckets-add"></a>

**若要將 S3 儲存貯體新增至您的 RES 環境：**

1. 選擇**新增儲存貯體**。

1. 輸入儲存貯體詳細資訊，例如儲存貯體名稱、ARN 和掛載點。
**重要**  
提供的儲存貯體 ARN、掛載點和模式無法在建立後變更。
儲存貯體 ARN 可以包含字首，將加入的 S3 儲存貯體與該字首隔離。

1. 選取要加入儲存貯體的模式。
**重要**  
[資料隔離](S3-buckets-data-isolation.md) 如需使用特定模式隔離資料的詳細資訊，請參閱 。

1. 在**進階選項**下，您可以提供 IAM 角色 ARN 來掛載儲存貯體以進行跨帳戶存取。請依照 中的步驟[跨帳戶儲存貯體存取](S3-buckets-cross-account-access.md)建立跨帳戶存取所需的 IAM 角色。

1. （選用） 將儲存貯體與專案建立關聯，稍後可以變更。不過，S3 儲存貯體無法掛載到專案的現有 VDI 工作階段。只有專案與儲存貯體建立關聯之後啟動的工作階段，才會掛載儲存貯體。

1. 選擇**提交**。  
![\[新增儲存貯體頁面，顯示可用的儲存貯體設定欄位並提交按鈕\]](http://docs.aws.amazon.com/zh_tw/res/latest/ug/images/docs-add-bucket.png)

# 編輯 Amazon S3 儲存貯體
<a name="S3-buckets-edit"></a>

1. 在 S3 儲存貯體清單中選取 S3 儲存貯體。

1. 從**動作**功能表中，選取**編輯**。

1. 輸入您的更新。
**重要**  
將專案與 S3 儲存貯體建立關聯**不會**將儲存貯體掛載到該專案的現有虛擬桌面基礎設施 (VDI) 執行個體。只有在儲存貯體與該專案相關聯之後，儲存貯體才會掛載到專案中啟動的 VDI 工作階段。
取消專案與 S3 儲存貯體的關聯不會影響 S3 儲存貯體中的資料，但會導致桌面使用者無法存取該資料。

1. 選擇**儲存儲存貯體設定**。  
![\[編輯 S3 儲存貯體頁面，其中已輸入顯示名稱和專案關聯欄位，並反白顯示儲存貯體設定按鈕\]](http://docs.aws.amazon.com/zh_tw/res/latest/ug/images/docs-edit-bucket.png)

# 移除 Amazon S3 儲存貯體
<a name="S3-buckets-remove"></a>

1. 在 S3 儲存貯體清單中選取 S3 儲存貯體。

1. 從**動作**功能表中，選取**移除**。
**重要**  
您必須先從儲存貯體中移除所有專案關聯。
移除操作不會影響 S3 儲存貯體中的資料。它只會移除 S3 儲存貯體與 RES 的關聯。
移除儲存貯體會導致現有的 VDI 工作階段在該工作階段的登入資料過期時 (\$11 小時） 無法存取該儲存貯體的內容。

# 資料隔離
<a name="S3-buckets-data-isolation"></a>

當您將 S3 儲存貯體新增至 RES 時，您可以選擇將儲存貯體中的資料隔離給特定專案和使用者。在**新增儲存貯**體頁面上，您可以選擇唯讀 (R) 或讀寫 (R/W) 模式。

**唯讀**

`Read Only (R)` 如果選取 ，則會根據儲存貯體 ARN (Amazon Resource Name) 的字首強制執行資料隔離。例如，如果管理員使用 ARN 將儲存貯體新增至 RES，`arn:aws:s3:::bucket-name/example-data/`並將此儲存貯體與專案 A 和專案 B 建立關聯，則從專案 A 和專案 B 內啟動 VDIs 的使用者只能讀取路徑 `bucket-name`下位於 中的資料`/example-data`。他們將無法存取該路徑以外的資料。如果沒有字首附加到儲存貯體 ARN，則整個儲存貯體將提供給與其相關聯的任何專案。

**讀取和寫入**

如果選取 `Read and Write (R/W)` ，仍會根據儲存貯體 ARN 的字首強制執行資料隔離，如上所述。此模式有其他選項，可讓管理員為 S3 儲存貯體提供以變數為基礎的字首。`Read and Write (R/W)` 選取 時，自訂字首區段會變成可用，提供具有下列選項的下拉式功能表：
+ 沒有自訂字首
+ /%p
+ /%p/%u

![\[新增儲存貯體頁面，顯示自訂字首下拉式清單\]](http://docs.aws.amazon.com/zh_tw/res/latest/ug/images/add-bucket-custom-prefix.png)


**無自訂資料隔離 **  
為**自訂字首**選取 `No custom prefix` 時，會新增儲存貯體，而沒有任何自訂資料隔離。這可讓與儲存貯體相關聯的任何專案具有讀取和寫入存取權。例如，如果管理員使用`arn:aws:s3:::bucket-name``No custom prefix`選取的 ARN 將儲存貯體新增至 RES，並將此儲存貯體與專案 A 和專案 B 建立關聯，則從專案 A 和專案 B 內啟動 VDIs 的使用者將擁有儲存貯體不受限制的讀取和寫入存取權。

**每個專案層級的資料隔離 **  
為**自訂字首**選取 `/%p` 時，儲存貯體中的資料會隔離至與其相關聯的每個特定專案。`%p` 變數代表專案程式碼。例如，如果管理員使用`arn:aws:s3:::bucket-name`具有`/%p`所選 和 */ 儲存貯體***掛載點**的 ARN 將儲存貯體新增至 RES，並將此儲存貯體與專案 A 和專案 B 建立關聯，則專案 A 中的使用者 A 可以將檔案寫入 */ 儲存貯體*。專案 A 中的使用者 B 也可以查看使用者 A 在 */ 儲存貯*體中撰寫的檔案。不過，如果使用者 B 在專案 B 中啟動 VDI 並在 */ 儲存貯*體中尋找，他們將不會看到使用者 A 所撰寫的檔案，因為資料是由專案隔離。檔案 使用者 A 寫入在 S3 儲存貯體的字首下找到，`/ProjectA`而使用者 B 只能在從專案 B 使用其 VDIs`/ProjectB`時存取 。

**每個專案、每個使用者層級的資料隔離 **  
選取**自訂字首**`/%p/%u`時，儲存貯體中的資料會與該專案相關聯的每個特定專案和使用者隔離。`%p` 變數代表專案程式碼，而 `%u`代表使用者名稱。例如，管理員使用 `arn:aws:s3:::bucket-name` ARN 搭配`/%p/%u`選取的 和掛載點 */ 儲存貯體*，將儲存貯體新增至 RES。此儲存貯體與專案 A 和專案 B 相關聯。專案 A 中的使用者 A 可以將檔案寫入 */ 儲存貯體*。與先前僅隔離的情況不同`%p`，在此情況下，使用者 B 不會看到使用者 A 在 */ 儲存貯*體的專案 A 中寫入的檔案，因為資料是由專案和使用者所隔離。檔案 使用者 A 寫入位於 S3 儲存貯體的字首下，`/ProjectA/UserA`而使用者 B 只能在專案 A 中使用其 VDIs`/ProjectA/UserB`時存取。

# 跨帳戶儲存貯體存取
<a name="S3-buckets-cross-account-access"></a>

RES 能夠從其他 AWS 帳戶掛載儲存貯體，前提是這些儲存貯體具有適當的許可。在下列案例中，帳戶 A 中的 RES 環境想要在帳戶 B 中掛載 S3 儲存貯體。

**步驟 1：在 RES 部署所在的帳戶中建立 IAM 角色 *（這將稱為帳戶 A)*：**

1. 登入需要存取 S3 儲存貯體 （帳戶 A) 之 RES 帳戶的 AWS 管理主控台。

1. 開啟 IAM 主控台：

   1. 導覽至 IAM 儀表板。

   1. 在導覽窗格中，選擇**政策**。

1. 建立政策：

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

   1. 選取 **JSON** 標籤。

   1. 貼上下列 JSON 政策 (`amzn-s3-demo-bucket`以位於帳戶 B 的 S3 儲存貯體名稱取代）：

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:ListBucket",
                      "s3:DeleteObject",
                      "s3:AbortMultipartUpload"
                  ],
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-bucket",
                      "arn:aws:s3:::amzn-s3-demo-bucket/*"
                  ]
              }
          ]
      }
      ```

------

   1. 選擇**下一步**。

1. 檢閱並建立政策：

   1. 提供政策的名稱 （例如，「S3AccessPolicy」)。

   1. 新增選用的描述來解釋政策的目的。

   1. 檢閱政策，然後選擇**建立政策**。

1. 開啟 IAM 主控台：

   1. 導覽至 IAM 儀表板。

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

1. 建立角色：

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

   1. 選擇**自訂信任政策**作為信任實體的類型。

   1. 貼上下列 JSON 政策 (`111122223333`以帳戶 A 的實際帳戶 ID 取代，`{RES_ENVIRONMENT_NAME}`並以 RES 部署的環境名稱取代：

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/<ENVIRONMENT_NAME>-vdc-custom-credential-broker-lambda-role"
                  },
                  "Action": "sts:AssumeRole"
              }
          ]
      }
      ```

------

   1. 選擇**下一步**。

1. 連接許可政策：

   1. 搜尋並選取您先前建立的政策。

   1. 選擇**下一步**。

1. 標記、檢閱和建立角色：

   1. 輸入角色名稱 （例如 "S3AccessRole")。

   1. 在步驟 3 下，選擇**新增標籤**，然後輸入下列索引鍵和值：
      + 索引鍵：`res:Resource`
      + 值：`s3-bucket-iam-role`

   1. 檢閱角色，然後選擇**建立角色**。

1. 在 RES 中使用 IAM 角色：

   1. 複製您建立的 IAM 角色 ARN。

   1. 登入 RES 主控台。

   1. 在左側導覽窗格中，選擇 **S3 儲存貯**體。

   1. 選擇**新增儲存貯**體，並使用跨帳戶 S3 儲存貯體 ARN 填寫表單。

   1. 選擇**進階設定 - 選用**下拉式清單。

   1. 在 IAM 角色 ARN 欄位中輸入角色 ARN。

   1. 選擇**新增儲存貯體**。

**步驟 2：修改帳戶 B 中的儲存貯體政策**

1. 登入帳戶 B 的 AWS 管理主控台。

1. 開啟 S3 主控台：

   1. 導覽至 S3 儀表板。

   1. 選取您要授予存取權的儲存貯體。

1. 編輯儲存貯體政策：

   1. 選取**許可**索引標籤，然後選擇**儲存貯體政策**。

   1. 新增下列政策，以授予帳戶 A 對儲存貯體的 IAM 角色存取權 （將 *111122223333* 取代為帳戶 A 的實際帳戶 ID，並將 *amzn-s3-demo-bucket* 取代為 S3 儲存貯體的名稱）：

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "AWS": "arn:aws:iam::111122223333:role/S3AccessRole"
                  },
                  "Action": [
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:ListBucket",
                      "s3:DeleteObject",
                      "s3:AbortMultipartUpload"
                  ],
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-bucket",
                      "arn:aws:s3:::amzn-s3-demo-bucket/*"
                  ]
              }
          ]
      }
      ```

------

   1. 選擇**儲存**。

# 防止私有 VPC 中的資料洩漏
<a name="S3-buckets-preventing-exfiltration"></a>

若要防止使用者將資料從安全的 S3 儲存貯體滲透到其帳戶中自己的 S3 儲存貯體，您可以連接 VPC 端點來保護您的私有 VPC。下列步驟說明如何為 S3 服務建立 VPC 端點，以支援存取您帳戶中的 S3 儲存貯體，以及具有跨帳戶儲存貯體的任何其他帳戶。

1. 開啟 Amazon VPC 主控台：

   1. 登入 AWS 管理主控台。

   1. 開啟位於 https：//[https://console.aws.amazon.com/vpcconsole/ 的 Amazon VPC ](https://console.aws.amazon.com/vpcconsole)主控台。

1. 建立 S3 的 VPC 端點：

   1. 在左側導覽窗格中選擇 **Endpoints** (端點)。

   1. 選擇**建立端點**。

   1. 請確定在 **Service category** (服務類別) 欄位，您已選擇 **AWS services** (AWS 服務)。

   1. 在**服務名稱**欄位中，輸入 `com.amazonaws.<region>.s3`(`<region>`取代您的 AWS 區域） 或搜尋 "S3"。

   1. 從清單中選擇 S3 服務。

1. 設定端點設定：

   1. 針對 **VPC**，選取您要建立端點的 VPC。

   1. 針對**子網路**，選取部署期間用於 VDI 子網路的兩個私有子網路。

   1. 針對**啟用 DNS 名稱**，請確定已勾選 選項。這可讓私有 DNS 主機名稱解析為端點網路介面。

1. 設定政策以限制存取：

   1. 在**政策**下，選擇**自訂**。

   1. 在政策編輯器中，輸入限制存取您帳戶或特定帳戶內資源的政策。以下是範例政策 （將 *amzn-s3-demo-bucket* 取代為您的 S3 儲存貯體名稱，並將 *111122223333* 和 *444455556666* 取代為您想要存取的適當 AWS 帳戶 IDs)：
**注意**  
此範例政策使用 `s3:*` 且不限制 S3 控制平面操作，例如事件通知組態、複寫或庫存。這些操作可以允許將物件中繼資料 （例如儲存貯體名稱和物件金鑰） 傳送至跨帳戶目的地。如果這是問題，請在 VPC 端點政策中新增相關 S3 控制平面動作的明確拒絕陳述式。

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "s3:*",
                  "Resource": [
                      "arn:aws:s3:::amzn-s3-demo-bucket",
                      "arn:aws:s3:::amzn-s3-demo-bucket/*"
                  ],
                  "Condition": {
                      "StringEquals": {
                          "aws:PrincipalAccount": [
                              "111122223333",
                              "444455556666"
                          ]
                      }
                  }
              }
          ]
      }
      ```

------

1. 建立端點：

   1. 檢閱您的設定。

   1. 選擇**建立端點**。

1. 驗證端點：

   1. 建立端點後，導覽至 VPC 主控台中的**端點**區段。

   1. 選取新建立的端點。

   1. 驗證**狀態**是否**可用**。

透過遵循這些步驟，您可以建立 VPC 端點，允許 S3 存取僅限於您帳戶或指定帳戶 ID 內的資源。

# 疑難排解
<a name="S3-buckets-troubleshooting"></a>

**如何檢查儲存貯體是否無法在 VDI 上掛載** 

如果儲存貯體無法在 VDI 上掛載，您可以在幾個位置檢查錯誤。請依照下列步驟進行。

1. 檢查 VDI 日誌：

   1. 登入 AWS 管理主控台。

   1. 開啟 EC2 主控台並導覽至**執行個體**。

   1. 選取您啟動的 VDI 執行個體。

   1. 透過 Session Manager 連線至 VDI。

   1. 執行下列命令：

      ```
      sudo su
      cd ~/bootstrap/logs
      ```

      在這裡，您會找到引導日誌。任何失敗的詳細資訊都會位於 `configure.log.{time}` 檔案中。

      此外，請檢查`/etc/message`日誌以取得更多詳細資訊。

1. 檢查自訂登入資料中介裝置 Lambda CloudWatch Logs：

   1. 登入 AWS 管理主控台。

   1. 開啟 CloudWatch 主控台並導覽至**日誌群組**。

   1. 搜尋日誌群組 `/aws/lambda/<stack-name>-vdc-custom-credential-broker-lambda`。

   1. 檢查第一個可用的日誌群組，並在日誌中找到任何錯誤。這些日誌將包含有關提供臨時自訂登入資料以掛載 S3 儲存貯體的潛在問題的詳細資訊。

1. 檢查自訂登入資料中介裝置 API Gateway CloudWatch Logs：

   1. 登入 AWS 管理主控台。

   1. 開啟 CloudWatch 主控台並導覽至**日誌群組**。

   1. 搜尋日誌群組 `<stack-name>-vdc-custom-credential-broker-lambdavdccustomcredentialbrokerapigatewayaccesslogs<nonce>`。

   1. 檢查第一個可用的日誌群組，並在日誌中找到任何錯誤。這些日誌將包含任何請求和 API Gateway 回應的詳細資訊，以取得掛載 S3 儲存貯體所需的自訂登入資料。

**如何在加入後編輯儲存貯體的 IAM 角色組態** 

1. 登入 [AWS DynamoDB 主控台](https://console.aws.amazon.com/dynamodbv2/home)。

1. 選取資料表：

   1. 在左側導覽窗格中，選擇 **Tables (資料表)**。

   1. 尋找並選取 `<stack-name>.cluster-settings`。

1. 掃描資料表：

   1. 選擇**探索資料表項目**。

   1. 確定已選取**掃描**。

1. 新增篩選條件：

   1. 選擇**篩選條件**以開啟篩選條件項目區段。

   1. 設定篩選條件以符合您的金鑰 -
      + **屬性**：輸入 金鑰。
      + **條件**：選取**開頭**。
      + **值**：輸入 將 *<filesystem\$1id>* `shared-storage.<filesystem_id>.s3_bucket.iam_role_arn`取代為需要修改的檔案系統值。

1. 執行掃描：

   選擇**執行**以使用篩選條件執行掃描。

1. 檢查 值：

   如果項目存在，請確保使用正確的 IAM 角色 ARN 正確設定值。

   如果項目不存在：

   1. 選擇 **Create item** (建立項目)。

   1. 輸入項目詳細資訊：
      + 針對金鑰屬性，輸入 `shared-storage.<filesystem_id>.s3_bucket.iam_role_arn`。
      + 新增正確的 IAM 角色 ARN。

   1. 選擇**儲存**以新增項目。

1. 重新啟動 VDI 執行個體：

   重新啟動執行個體，以確保再次掛載受不正確 IAM 角色 ARN 影響VDIs。

# 啟用 CloudTrail
<a name="S3-buckets-enabling-cloudtrail"></a>

若要使用 CloudTrail 主控台在您的帳戶中啟用 CloudTrail，請遵循 *AWS CloudTrail 使用者指南*中的[使用 CloudTrail 主控台建立追蹤](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-a-trail-using-the-console-first-time.html)中提供的指示。CloudTrail 將透過記錄存取 S3 儲存貯體的 IAM 角色來記錄對 S3 儲存貯體的存取。這可以連結回連結至專案或使用者的執行個體 ID。