在 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 中的步骤已完成。

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

步骤 1:创建 Secrets Manager 密钥

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

key/value pairs to be stored in this secret(要存储在此密钥中的键/值对)是教程末尾处容器中的环境变量值。

保存密钥 ARN 以便在后续步骤中在任务执行 IAM policy 和任务定义中引用。

步骤 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 definition(创建新的任务定义)、Create new task definition with JSON(使用 JSON 创建新的任务定义)。

  4. 在 JSON 编辑器框中,输入以下任务定义 JSON 文本,确保已指定在步骤 1 中创建的 Secrets Manager 密钥的完整 ARN,以及在步骤 2 中更新的任务执行角色。选择保存

  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": "httpd:2.4", "essential": true, "name": "ecs-secrets-container" } ], "family": "ecs-secrets-tutorial" }
  6. 选择创建

步骤 4:创建集群

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

在本教程中,我们将创建一个 t2.micro 容器实例,使用经 Amazon ECS 优化的 Amazon Linux 2 AMI。

有关如何为 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 用户指南》中的使用 PuTTY 连接到 Linux 实例

    重要

    要详细了解您在连接到实例时遇到的任何问题,请参阅《Amazon EC2 用户指南》中的排查实例的连接问题

  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. Clusters(集群)页面上,选择集群。

  4. 选择 Delete Cluster (删除集群)

  5. 在确认框中,输入 delete cluster name,然后选择删除

  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 密钥,然后选择操作删除密钥