当我尝试在 Amazon Elastic Container Service (Amazon ECS) 中放置一个使用 Amazon Secrets Manager 密钥的任务时出现错误。
简短描述
在未能在 Amazon ECS 中放置使用 Secrets Manager 密钥的任务时,您可能会收到以下错误之一:
“Amazon Fargate 上的 ResourceInitializationError 错误 Amazon Elastic Compute Cloud (Amazon EC2) 上的 AccessDenied 错误”
“该任务无法从 Secrets Manager 检索密钥并失败。”
您收到这些错误消息是由于以下原因之一:
- Amazon ECS 任务执行角色没有访问 Secrets Manager 密钥所需的权限。
- Secrets Manager 找不到指定的密钥。
- 密钥的名称以连字符后跟六个字符结尾。当您使用部分 ARN 搜索密钥时,这样会返回意外结果。
- 您的 Amazon Virtual Private Cloud (Amazon VPC) 网络配置存在问题。
要对导致 Amazon ECS 任务无法启动的错误进行故障排除,请使用 AWSSupport-TroubleshootECSTaskFailedToStart 运行手册。然后参考问题的相关故障排除步骤。
解决方法
重要事项:
- 在与您的 ECS 集群资源所在的同一亚马逊云科技区域使用 AWSSupport-TroubleshootECSTaskFailedToStart 运行手册。
- 使用运行手册时,您必须使用最近失败的任务 ID。如果失败的任务是 Amazon ECS 服务的一部分,则使用服务中最近一次失败的任务。在自动化执行期间,失败任务必须在 ECS:DescribeTasks 中可见。默认情况下,已停止的 ECS 任务将在进入已停止状态后的 1 小时内保持可见。使用最近失败的任务 ID 可防止任务状态清理功能在自动化过程中导致分析中断。
有关如何启动运行手册的说明,请参阅 AWSSupport-TroubleshootECSTaskFailedToStart。根据自动化的输出,使用以下手动故障排除步骤之一。
检查 ECS 任务执行角色是否具有所需的权限
- 打开 IAM 控制台。
- 在导航窗格中,选择角色。
- 在角色列表中搜索您的 ECS 任务使用的任务执行角色。
- 确认任务执行角色具有所需的权限,可以访问必要的 Secrets Manager 资源。
检查 Secrets Manager 密钥是否存在
- 打开 Secrets Manager 控制台。
- 在密钥列表页面上,选择您的 ECS 任务正在使用的密钥。
- 确认您的 ECS 任务定义包含这些特定的密钥名称。如果您在密钥中指定了其他参数,请确认您的任务定义包含密钥中指定的 json-key/version-stage/version-id。
检查 Secrets Manager 密钥的名称和 ARN
检查您的密钥名称是否以连字符后跟六个字符结尾(例如:myappsecret-xxxxx)。Secrets Manager 会自动在 ARN 末尾的密钥名称后面添加一个连字符和六个随机字符。因此,最佳实践是不要以连字符加上六个字符作为您的密钥的结尾。否则,当您使用部分 ARN 搜索密钥时,可能就会返回意外结果。要解决此问题,请务必使用 Secrets Manager 密钥的完整 ARN,其中包括额外的连字符和六个字符。
验证 VPC 网络配置是否允许您的 Amazon ECS 基础设施访问 Secrets Manager
满足以下条件时,为 Secrets Manager 创建接口 VPC 端点:
- 您正在使用引用 Secrets Manager 密钥的任务定义来检索容器的敏感数据。
- 您正在使用接口 VPC 端点。
此外,请确保您的 VPC 端点的安全组允许 ECS 基础设施使用这些端点。
要检查 Secrets Manager 的 VPC 端点是否存在,请执行以下操作:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择端点。
- 确保 Secrets Manager 的 VPC 端点 com.amazonaws.example-region.secretsmanager 在端点列表中。
- 从端点列表中选择端点,然后选择子网选项卡。确保此端点的子网包含您的 ECS 任务使用的子网。
注意:如果未列出任何子网,则选择管理子网。根据子网的可用区选择子网,然后选择修改子网。
要确认连接到端点 com.amazonaws.example-region.secretsmanager 的安全组允许来自 Amazon ECS 任务的端口 443 上的入站连接,请执行以下操作:
- 从端点列表中选择端点。
- 选择安全组选项卡。
- 为要检查的安全组选择组 ID。
- 选择入站规则选项卡。
- 验证入站规则列表中是否包含允许来自 ECS 任务的 443 连接的规则。
相关信息
如何在 Amazon ECS 任务中将密钥或敏感信息安全地传递给容器?
Amazon Secrets Manager 故障排除