如何排查与 Amazon ECS 中的 AWS Secrets Manager 密钥相关的问题?

上次更新日期:2022 年 3 月 30 日

当我尝试在 Amazon Elastic Container Service (Amazon ECS) 中放置使用 AWS Secrets Manager 密钥的任务时,出现以下一种错误:

  • AWS Fargate 上出现 ResourceInitializationError 错误
  • Amazon Elastic Compute Cloud (Amazon EC2) 上的 AccessDenied 错误

该任务无法从 Secrets Manager 中检索密钥并失败。

简短描述

您会收到这些错误消息是因为以下原因之一:

  • Amazon ECS 任务执行角色没有访问 Secrets Manager 密钥所需的权限。
  • Secrets Manager 找不到指定的密钥。
  • 密钥的名称以连字符加六个字符结尾。当您使用部分 ARN 搜索密钥时,将返回意外结果。
  • 您的 Amazon Virtual Private Cloud (Amazon VPC) 联网配置存在问题。

解决方法

检查 ECS 任务执行角色是否具有所需的权限

  1. 打开 IAM 控制台
  2. 在导航窗格中,选择 Roles(角色)。
  3. 在角色列表中搜索您的 ECS 任务正在使用的任务执行角色。
  4. 确认任务执行角色具有访问必要的 Secrets Manager 资源所需的权限。

检查 Secrets Manager 密钥是否存在

  1. 打开 Secrets Manager 控制台
  2. Secrets list(密钥列表)页面,选择您的 ECS 任务正在使用的密钥。
  3. 确认您的 ECS 任务定义中包含这些特定的密钥名称。如果您在密钥中指定了其他参数,请确认您的任务定义包括密钥中指定的 json-key/version-stage/version-id

检查 Secrets Manager 密钥的名称和 ARN

检查您的密钥名称是否以连字符加六个字符结尾(例如:myappsecret-xxxxxx)。Secrets Manager 会自动在 ARN 末尾的密钥名称后添加一个连字符和六个随机字符。因此,密钥名称最好不要用连字符加六个字符结尾。当您使用部分 ARN 搜索密钥时,这样做可能会返回意外结果。要解决此问题,请确保使用来自 Secrets Manager 的密钥的完整 ARN,包括附加的连字符和六个字符。

验证您的 VPC 联网配置允许 Amazon ECS 基础设施访问 Secrets Manager

在满足以下条件时,为 Secrets Manager 创建接口 VPC 终端节点

  • 您正在使用引用 Secrets Manager 密钥的任务定义来检索容器中的敏感数据。
  • 您正在使用接口 VPC 终端节点。

另外,请确保您的 VPC 终端节点的安全组允许 ECS 基础设施使用这些端点。

要检查 Secrets Manager 的 VPC 终端节点是否存在,请执行以下操作:

  1. 打开 Amazon VPC 控制台
  2. 在导航窗格中,选择 Endpoints(端点)。
  3. 确保 Secrets Manager 的 VPC 终端节点 com.amazonaws.example-region.secretsmanager 在端点列表中。
  4. 从端点列表中选择端点,然后选择 Subnets(子网)选项卡。确保此端点的子网包含您的 ECS 任务使用的子网。
    注意:如果未列出子网,请选择 Manage Subnets(管理子网)。根据子网的 Availability Zone(可用区)选择子网,然后再选择 Modify Subnets(修改子网)。

要确认附加到端点 com.amazonaws.example-region.secretsmanager 的安全组是否允许 Amazon ECS 任务在端口 443 上的传入连接,请执行以下操作:

  1. 从端点列表中选择端点。
  2. 选择 Security Groups(安全组)选项卡。
  3. 选择要检查的安全组的 Group ID(组 ID)。
  4. 选择 Inbound rules(入站规则)选项卡。
  5. 验证入站规则列表中是否包含允许来自 ECS 任务的 443 连接的规则。