
怦然心动的功能性更新:Amazon ECS 终于支持任务定义 (Task Definition) 删除
自 2015 年 Amazon ECS 正式发布,提供了支持在 AWS 上运行容器工作负载的成熟解决方案。然而,仅支持 DeregisterTaskDefinition API1 可以取消注册特定的任务定义 (Task Definition) 版本。
但是,在这样的设计下,不免会遇到需要删除过时或未使用的任务定义 (Task Definition) 的情况。即使过了多年,Amazon ECS 仍不支持删除任务定义 (Task Definition) 资源,这让许多 Amazon ECS 使用者想知道究竟什么时候 ECS 才会支持任务定义 (Task Definition) 的删除功能。2
千呼万盼,Amazon ECS 终于支持对任务定义 (Task Definition) 删除功能。
有哪些改变?
2023 年 2 月 27 日,Amazon ECS 正式宣布支持删除未使用 (INACTIVE
) 状态的任务定义版本 (Task Definition Revisions)。3
使用 ECS 并且当你创建一个任务定义 (Task Definition) 时,每次都会自动为其创建一个新版本 (例如:myTaskDefinition:1
, myTaskDefinition:2
… 等)。每个版本都是不可变更,这意味着,一旦该资源被创建,它就不能被删除或修改。即使你为任务定义 (Task Definition) 删除所有的版本 (Revision),也只是将版本的状态由 ACTIVE
更改为 INACTIVE
,该版本仍然存在,并且在 AWS 账号中仍然可以被查看。
在这个功能被支持之前,使用者只能将任务定义版本 (Task Definition Revision) 标记为 INACTIVE
,但无法删除。
现在这项功能改进可以让你通过 Amazon ECS 控制台或通过编写程序的方式删除未使用的任务定义版本 (Task Definition Revision)。可以永久删除不再需要或包含不需要的配置的任务定义版本 (Task Definition Revision),简化了资源管理并改善了安全问题。
为什么能删任务定义 (Task Definition) 这么重要?
一种常见的场景即为当容器程序于运行阶段存在需要访问特定信息、凭证或是密文信息时,常使用环境变量作为参数传递 (例如:连接到特定的数据库)。
通过环境变量将您的凭证传递给容器时,如果没有意识到任务定义 (Task Definition) 不会被删除,可能会使得你意外地将账号密码留在可读的资源中,暴露不必要的安全风险。例如:
{
"family": "",
"containerDefinitions": [
{
"name": "",
"image": "mysql",
...
"environment": [
{
"name": "MYSQL_ROOT_PASSWORD",
"value": "mySecretPassword"
}
],
...
}
],
...
}
在过去,任务定义 (Task Definition) 仅能设定为 INACTIVE
状态,并且无法删除。
如果账号中的任一 IAM User 或 IAM Role 具有描述任务定义 (Task Definition) 的权限,则他们就可以查看你可能不希望他们访问的凭证数据。
$ aws ecs describe-task-definition --task-definition myTaskDefinition:2
{
"taskDefinition": {
"containerDefinitions": [
{
"name": "web-service",
"environment": [
{
"name": "MYSQL_ROOT_PASSWORD",
"value": "mySecretPassword"
}
],
...
}
],
"family": "myTaskDefinition",
"revision": 2,
"status": "INACTIVE",
...
}
由于任务定义 (Task Definition) 可能会在 INACTIVE
状态下泄露敏感细节,因此,针对这项问题,通常建议使用 AWS Secrets Manager 或 AWS Systems Manager Parameter Store,这两个 AWS 服务都支持将敏感信息注入到容器环境变量中而不会直接地被看到相关的敏感信息。
但现在,无论你是否有使用 AWS Secrets Manager 或 AWS Systems Manager Parameter Store 存放这些敏感信息,你都可以在 AWS 控制台上永久删除任务定义 (Task Definition),或是使用 DeleteTaskDefinitions 4 API 以程序方法调用或是采用 AWS CLI 命令执行删除:
$ aws ecs delete-task-definitions --task-definitions <task name:revision>
总结
在 Amazon ECS 发布的 8 年后,ECS 终于支持任务定义 (Task Definition) 删除功能,不必再烦恼看到一堆 INACTIVE
状态的资源以及不小心暴露凭证信息的安全性风险。
多么让人怦然心动的功能性更新!
参考资源