Amazon ECS
AWS Fargate 用户指南 (API 版本 2014-11-13)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:使用 Secrets Manager 密钥指定敏感数据

Amazon ECS 使您能够向容器中注入敏感数据,方法是将您的敏感数据存储在 AWS Secrets Manager 密钥中,然后在容器定义中引用它们。有关更多信息,请参阅指定敏感数据

以下教程说明如何创建 Secrets Manager 密钥,在 Amazon ECS 任务定义中引用该密钥,然后通过查询显示密钥内容的容器内的环境变量来验证它是否有效。

先决条件

本教程假设以下先决条件已完成:

  • Amazon ECS 的设置 中的步骤已完成。

  • 您的 AWS 用户具有创建所述的 Secrets Manager 和 Amazon ECS 资源所需的 IAM 权限。

步骤 1:创建 Secrets Manager 密钥

您可以使用 Secrets Manager 控制台为您的敏感数据创建密钥。在本教程中,我们将创建一个基本密钥来存储用户名和密码以便稍后在容器中引用。有关更多信息,请参阅 AWS Secrets Manager 用户指南中的创建基本密钥

创建基本密钥

使用 Secrets Manager 为您的敏感数据创建密钥。

  1. 通过 https://console.amazonaws.cn/secretsmanager/ 打开 Secrets Manager 控制台。

  2. 选择存储新密钥

  3. 对于选择密钥类型,选择其他密钥类型

  4. 对于 Specify the key/value pairs to be stored in this secret (指定要存储在此密钥中的密钥/值对),选择 Plaintext (纯文本) 选项卡,并将现有文本替换为以下文本。您在此处指定的文本值将是教程结尾处容器中的环境变量值。

    password_value
  5. 选择 Next

  6. 对于 Secret name (密钥名称),键入 username_value,然后选择 Next (下一步)。您在此处指定的密钥名称值将是教程结尾处容器中的环境变量名称。

  7. 对于 Configure automatic rotation (配置自动轮换),将 Disable automatic rotation (禁用自动轮换) 保持选中状态并选择 Next (下一步)

  8. 检查这些设置,然后选择 Store (存储) 以将输入的所有内容作为新密钥保存在 Secrets Manager 中。

  9. 选择您刚刚创建的密钥,保存 Secret ARN (密钥 ARN) 以便在后续步骤中在任务执行 IAM 策略和任务定义中引用。

步骤 2:更新任务执行 IAM 角色

为了让 Amazon ECS 检索 Secrets Manager 密钥中的敏感数据,您必须具有 Amazon ECS 任务执行角色并在任务定义中引用它。这允许容器代理提取必要的 Secrets Manager 资源。如果您尚未创建任务执行 IAM 角色,请参阅 Amazon ECS 任务执行 IAM 角色

以下步骤假设您已创建并适当配置任务执行 IAM 角色。

更新任务执行 IAM 角色

使用 IAM 控制台更新具有所需权限的任务执行角色。

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在导航窗格中,选择 Roles

  3. 在角色列表中搜索 ecsTaskExecutionRole 并将其选定。

  4. 选择 Permissions (权限)Add inline policy (添加内联策略)

  5. 选择 JSON 选项卡并指定以下 JSON 文本,并确保指定您在步骤 1 中创建的 Secrets Manager 密钥的完整 ARN。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:region:aws_account_id:secret:username_value-u9bH6K" ] } ] }
  6. 选择查看策略。对于 Name (名称),指定 ECSSecretsTutorial,然后选择 Create policy (创建策略)

步骤 3:创建 Amazon ECS 任务定义

您可以使用 Amazon ECS 控制台创建引用 Secrets Manager 密钥的任务定义。

创建指定密钥的任务定义

使用 IAM 控制台更新具有所需权限的任务执行角色。

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航窗格中,依次选择 Task Definitions (任务定义)Create new Task Definition (创建新任务定义)

  3. Select launch type compatibility (选择启动类型兼容性) 页面上,选择 EC2,然后选择 Next step (下一步)

  4. 选择 Configure via JSON (通过 JSON 配置) 并输入以下任务定义 JSON 文本,确保指定您在步骤 1 中创建的 Secrets Manager 密钥的完整 ARN 以及您在步骤 2 中更新的任务执行 IAM 角色。选择 Save (保存)

    重要

    任务定义中的密钥名称的值必须与您在创建密钥时为密钥名称指定的名称匹配。

    { "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-u9bH6K", "name": "username_value" } ], "memory": 300, "image": "httpd:2.4", "essential": true, "name": "ecs-secrets-container" } ], "family": "ecs-secrets-tutorial" }
  5. 检查设置,然后选择 Create (创建)

步骤 4:创建 Amazon ECS 集群

您可以使用 Amazon ECS 控制台创建一个包含要运行任务的容器实例的集群。如果现有集群中至少注册了一个容器实例,并且具有可用资源来运行为本教程创建的任务定义的一个实例,则可跳到下一步。

在本教程中,我们将使用 Amazon ECS-optimized Amazon Linux 2 AMI 创建具有一个 t2.micro 容器实例的集群。

创建群集

使用 Amazon ECS 控制台创建一个集群并向该集群注册一个容器实例。

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 从导航栏中,选择同时包含 Secrets Manager 密钥和您创建的 Amazon ECS 任务定义的区域。

  3. 在导航窗格中,选择 Clusters

  4. Clusters 页面上,选择 Create Cluster

  5. 对于 Select cluster compatibility (选择集群兼容性),选择 EC2 Linux + Networking (EC2 Linux + 联网),然后选择 Next Step (下一步)

  6. Configure cluster (配置集群) 页面上,对于 Cluster name (集群名称),输入 ecs-secrets-tutorial

  7. 对于 EC2 实例类型,选择 t2.micro

  8. 对于密钥对,选择要添加到容器实例的密钥对。

    重要

    需要密钥对才能完成本教程,因此,如果您还没有创建密钥对,请转至指向 EC2 控制台的链接来创建密钥对。

  9. Networking (联网) 部分中,为您的集群配置 VPC。选择现有 VPC,也可以选择创建新的 VPC 以用于教程。

    1. (可选)如果您选择创建新 VPC,请为 CIDR Block (CIDR 块) 选择 VPC 的 CIDR 块。有关更多信息,请参阅 Amazon VPC 用户指南 中的您的 VPC 和子网

    2. 对于 Subnets (子网),选择要用于 VPC 的子网。您可以保留默认设置,也可以进行修改以满足您的需求。

  10. 对于 Container instance IAM role (容器实例 IAM 角色),选择现有容器实例 IAM 角色或选择创建新角色来为您创建一个角色。

  11. 将所有其他字段保留为默认值,然后选择创建

步骤 5:运行 Amazon ECS 任务

您可以使用 Amazon ECS 控制台通过创建的任务定义运行任务。在本教程中,我们将使用上一步中创建的集群来运行使用 EC2 启动类型的任务。

运行任务

  1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 在导航窗格中,选择 Task Definitions (任务定义),然后选择我们创建的 ecs-secrets-tutorial 任务定义。

  3. 选择最新修订版的任务定义,然后选择 Actions (操作)Run Task (运行任务)

  4. 对于启动类型,选择 EC2

  5. 对于 Cluster (集群),选择我们在上一步中创建的 ecs-secrets-tutorial 集群。

  6. 对于 Task tagging configuration (任务标记配置),取消选择 Enable ECS managed tags (启用 ECS 托管标签)。对于本教程而言,它们是不必要的。

  7. 查看您的任务信息并选择 Run Task

    注意

    如果您的任务从 PENDING 移至 STOPPED,或者它显示 PENDING 状态,然后从列出的任务中消失,则您的任务可能因出错而停止。有关更多信息,请参阅故障排除部分中的检查已停止的任务是否存在错误

步骤 6:验证

您可以使用以下步骤验证是否已成功完成所有步骤并在容器中正确创建了环境变量。

验证是否已创建环境变量

  1. 查找您的容器实例的公共 IP 或 DNS 地址。

    1. https://console.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

    2. 选择托管您的容器实例的 ecs-secrets-tutorial 集群。

    3. Cluster (集群) 页面上,选择 ECS Instances (ECS 实例)

    4. Container Instance 列上,选择要连接到的容器实例。

    5. Container Instance 页面上,记录您的实例的 Public IPPublic 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 用户指南(适用于 Linux 实例) 中的使用 PuTTY 从 Windows 连接到您的 Linux 实例

    重要

    有关在连接到实例时遇到的任何问题的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例) 中的排查实例的连接问题

  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.amazonaws.cn/ecs/ 上打开 Amazon ECS 控制台。

  2. 选择您创建的 ecs-secrets-tutorial cluster (ecs-secrets-tutorial 集群)

  3. Cluster (集群) 页面上,选择 Delete Cluster (删除集群)

  4. 输入删除集群确认短语,然后选择 Delete (删除)。这将需要几分钟的时间,但将清除所有 Amazon ECS 集群资源。

  5. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  6. 在导航窗格中,选择 Roles

  7. 在角色列表中搜索 ecsTaskExecutionRole 并将其选定。

  8. 选择权限,然后选择 ECSSecretsTutorial 旁边的 X。选择删除以确认删除内联策略。

  9. 通过 https://console.amazonaws.cn/secretsmanager/ 打开 Secrets Manager 控制台。

  10. 选择您之前创建的 username_value 密钥,然后选择操作删除密钥