在 Amazon ECS 中使用 Secrets Manager 秘密指定敏感資料 - Amazon Elastic Container Service

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

在 Amazon ECS 中使用 Secrets Manager 秘密指定敏感資料

Amazon ECS 可讓您將敏感資料儲存在 AWS Secrets Manager 秘密中,然後在容器定義中參考,藉此將敏感資料注入容器。如需詳細資訊,請參閱將敏感資料傳遞至 Amazon ECS 容器

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

先決條件

本教學課程假設已完成下列先決條件:

  • 已完成「設定以使用 Amazon ECS。」中的步驟。

  • 您的使用者具有必要的 IAM 許可,可建立 Secrets Manager 與 Amazon ECS 資源。

步驟 1:建立 Secrets Manager 機密

您可以使用 Secrets Manager 主控台為您的敏感資料建立秘密。在本教學課程中,我們將建立基本秘密,以供存放容器中稍後參考的使用者名稱和密碼。如需詳細資訊,請參閱AWS Secrets Manager 《 使用者指南》中的建立 AWS Secrets Manager 秘密

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

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

步驟 2:將秘密許可新增至任務執行角色

若要讓 Amazon ECS 從 Secrets Manager 秘密擷取敏感資料,您必須擁有任務執行角色的秘密許可。如需詳細資訊,請參閱Secrets Manager 或 Systems Manager 許可

步驟 3:建立任務定義

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

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

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

  1. 開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2

  2. 在導覽窗格中,選擇 Task Definitions (任務定義)。

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

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

  5. { "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" }
  6. 選擇建立

步驟 4:建立叢集

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

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

如需有關如何建立 EC2 叢集的資訊,請參閱為 Amazon EC2 工作負載建立 Amazon ECS 叢集

步驟 5:執行任務

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

如需有關如何執行任務的資訊,請參閱 將應用程式作為 Amazon ECS 任務執行

步驟 6:驗證

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

驗證是否已建立環境變數
  1. 尋找您容器執行個體的公有 IP 或 DNS 地址。

    1. 開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2

    2. 在導覽窗格中,選擇叢集,然後選擇建立的叢集。

    3. 選擇基礎設施,然後選擇容器執行個體。

    4. 記錄您執行個體的公有 IP公有 DNS

  2. 如果您使用的是 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

    重要

    如需有關執行個體連線問題的詳細資訊,請參閱 Amazon EC2 User Guide 中的 Troubleshooting Connecting to Your Instance

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

    docker ps
  4. 使用上一個步驟輸出中的容器 ID,連接到 ecs-secrets-tutorial 容器。

    docker exec -it container_ID /bin/bash
  5. 使用 echo 命令來列印環境變數的值。

    echo $username_value

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

    password_value
    注意

    或者,您可以使用 env (或 printenv) 命令列出您容器中的所有環境變數。

步驟 7:清除

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

清除資源
  1. 開啟主控台,網址為 https://console.aws.amazon.com/ecs/v2

  2. 在導覽窗格中,選擇叢集

  3. 叢集頁面上,選擇叢集。

  4. 選擇 Delete Cluster (刪除叢集)

  5. 在確認方塊中,輸入 delete 叢集名稱,然後選擇刪除

  6. 在以下網址開啟 IAM 主控台:https://console.aws.amazon.com/iam/

  7. 在導覽窗格中,選擇角色

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

  9. 選擇許可,然後選擇 ECSSecretsTutorial 旁邊的 X。選擇移除

  10. 開啟位於的 Secrets Manager 主控台https://console.aws.amazon.com/secretsmanager/

  11. 選取您所建立的 username_value 秘密,然後選擇 Actions (動作)Delete secret (刪除秘密)