

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

# 在 Amazon ECS 中使用 Secrets Manager 秘密指定敏感資料
<a name="specifying-sensitive-data-tutorial"></a>

Amazon ECS 可讓您將敏感資料存放在 AWS Secrets Manager 秘密中，然後在容器定義中參考，藉此將敏感資料注入容器。如需詳細資訊，請參閱[將敏感資料傳遞至 Amazon ECS 容器](specifying-sensitive-data.md)。

了解如何建立 Secrets Manager 秘密、引用 Amazon ECS 任務定義中的秘密，然後查詢容器內顯示秘密內容的環境變數，驗證其是否能運作。

## 先決條件
<a name="specifying-sensitive-data-tutorial-prereqs"></a>

本教學課程假設已完成下列先決條件：
+ 已完成「[設定以使用 Amazon ECS。](get-set-up-for-amazon-ecs.md)」中的步驟。
+ 您的使用者具有必要的 IAM 許可，可建立 Secrets Manager 與 Amazon ECS 資源。

## 步驟 1：建立 Secrets Manager 機密
<a name="specifying-sensitive-data-tutorial-create-secret"></a>

您可以使用 Secrets Manager 主控台為您的敏感資料建立秘密。在本教學課程中，我們將建立基本秘密，以供存放容器中稍後參考的使用者名稱和密碼。如需詳細資訊，請參閱*AWS Secrets Manager 《 使用者指南*》中的[建立 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)。

**要儲存在此秘密中的鍵/值對**是教學課程結尾處容器中的環境變量值。

儲存**秘密 ARN**，以在後續步驟的任務執行 IAM 政策和任務定義中參考。

## 步驟 2：將秘密許可新增至任務執行角色
<a name="specifying-sensitive-data-tutorial-update-iam"></a>

若要讓 Amazon ECS 從 Secrets Manager 秘密擷取敏感資料，您必須擁有任務執行角色的秘密許可。如需詳細資訊，請參閱[Secrets Manager 或 Systems Manager 許可](task_execution_IAM_role.md#task-execution-secrets)。

## 步驟 3：建立任務定義
<a name="specifying-sensitive-data-tutorial-create-taskdef"></a>

您可以使用 Amazon ECS 主控台來建立一個參考 Secrets Manager 秘密的任務定義。

**建立一個指定秘密的任務定義**

使用 IAM 主控台，以所需的許可更新您的任務執行角色。

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇 **Task Definitions** (任務定義)。

1. 選擇 **Create new task definitio** (建立新任務定義)、**Create new task definition with JSON** (使用 JSON 建立新的任務定義)。

1. 在 JSON 編輯器方塊中輸入以下任務定義 JSON 文字，確保為在步驟 1 建立的 Secrets Manager 秘密以及在步驟 2 中更新的任務執行角色，指定完整的 ARN。選擇**儲存**。

1. 

   ```
   {
       "executionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole",
       "containerDefinitions": [
           {
               "entryPoint": [
                   "sh",
                   "-c"
               ],
               "portMappings": [
                   {
                       "hostPort": 80,
                       "protocol": "tcp",
                       "containerPort": 80
                   }
               ],
               "command": [
                   "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' >  /usr/local/apache2/htdocs/index.html && httpd-foreground\""
               ],
               "cpu": 10,
               "secrets": [
                   {
                       "valueFrom": "arn:aws:secretsmanager:region:aws_account_id:secret:username_value",
                       "name": "username_value"
                   }
               ],
               "memory": 300,
               "image": "public.ecr.aws/docker/library/httpd:2.4",
               "essential": true,
               "name": "ecs-secrets-container"
           }
       ],
       "family": "ecs-secrets-tutorial"
   }
   ```

1. 選擇**建立**。

## 步驟 4：建立叢集
<a name="specifying-sensitive-data-tutorial-create-cluster"></a>

您可以使用 Amazon ECS 主控台建立一個叢集，其中包含要執行任務的容器執行個體。如果您的現有叢集有至少一個向其註冊的容器執行個體，並有可用資源可執行為此教學課程建立的一個任務定義執行個體，您可以跳到下一個步驟。

在本教學課程中，我們將使用 Amazon ECS 最佳化 Amazon Linux 2 AMI 建立具有一個 `t2.micro` 容器執行個體的叢集。

如需有關如何建立 EC2 叢集的資訊，請參閱[為 Amazon EC2 工作負載建立 Amazon ECS 叢集](create-ec2-cluster-console-v2.md)。

## 步驟 5：執行任務
<a name="specifying-sensitive-data-tutorial-run-task"></a>

您可以透過 Amazon ECS 主控台，使用您建立的任務定義來執行任務。在本教學課程中，我們將會執行使用 EC2 的任務，並使用我們在前一個步驟中建立的叢集。

如需有關如何執行任務的資訊，請參閱 [將應用程式作為 Amazon ECS 任務執行](standalone-task-create.md)。

## 步驟 6：驗證
<a name="specifying-sensitive-data-tutorial-verify"></a>

您可以使用下列步驟，驗證是否已成功完成所有步驟，以及是否已在您的容器中正確建立環境變數。

**驗證是否已建立環境變數**

1. 尋找您容器執行個體的公有 IP 或 DNS 地址。

   1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

   1. 在導覽窗格中，選擇**叢集**，然後選擇建立的叢集。

   1. 選擇**基礎設施**，然後選擇容器執行個體。

   1. 記錄您執行個體的**公有 IP** 或**公有 DNS**。

1. 如果您使用的是 macOS 或 Linux 電腦，請使用下列命令連線到您的執行個體，並替換為您私有金鑰的路徑及執行個體的公有地址：

   ```
   $ ssh -i /path/to/my-key-pair.pem ec2-user@ec2-198-51-100-1.compute-1.amazonaws.com
   ```

   如需有關使用 Windows 電腦的詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Connect to your Linux instance using PuTTY](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connect-linux-inst-from-windows.html)。
**重要**  
如需有關執行個體連線問題的詳細資訊，請參閱 *Amazon EC2 User Guide* 中的 [Troubleshooting Connecting to Your Instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/TroubleshootingInstancesConnecting.html)。

1. 列出在執行個體上執行的容器。請記下 `ecs-secrets-tutorial` 容器的容器 ID。

   ```
   docker ps
   ```

1. 使用上一個步驟輸出中的容器 ID，連接到 `ecs-secrets-tutorial` 容器。

   ```
   docker exec -it container_ID /bin/bash
   ```

1. 使用 `echo` 命令來列印環境變數的值。

   ```
   echo $username_value
   ```

   如果教學課程成功，您應該會看到以下輸出：

   ```
   password_value
   ```
**注意**  
或者，您可以使用 `env` (或 `printenv`) 命令列出您容器中的所有環境變數。

## 步驟 7：清除
<a name="specifying-sensitive-data-tutorial-cleanup"></a>

完成此教學課程時，建議您清除相關聯的資源，以免未使用的資源產生費用。

**清除資源**

1. 開啟主控台，網址為 [https://console.aws.amazon.com/ecs/v2](https://console.aws.amazon.com/ecs/v2)。

1. 在導覽窗格中，選擇**叢集**。

1. 在**叢集**頁面上，選擇叢集。

1. 選擇 **Delete Cluster (刪除叢集)**。

1. 在確認方塊中，輸入 **delete *叢集名稱***，然後選擇**刪除**。

1. 在以下網址開啟 IAM 主控台：[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

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

1. 搜尋 `ecsTaskExecutionRole` 的角色清單並加以選取。

1. 選擇**許可**，然後選擇 **ECSSecretsTutorial** 旁邊的 **X**。選擇**移除**。

1. 開啟位於的 Secrets Manager 主控台[https://console.aws.amazon.com/secretsmanager/](https://console.aws.amazon.com/secretsmanager/)。

1. 選取您所建立的 **username\$1value** 秘密，然後選擇 **Actions (動作)**、**Delete secret (刪除秘密)**。