如何排查与 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 任务执行角色是否具有所需的权限
- 打开 IAM 控制台。
- 在导航窗格中,选择 Roles(角色)。
- 在角色列表中搜索您的 ECS 任务正在使用的任务执行角色。
- 确认任务执行角色具有访问必要的 Secrets Manager 资源所需的权限。
检查 Secrets Manager 密钥是否存在
- 打开 Secrets Manager 控制台。
- 在 Secrets list(密钥列表)页面,选择您的 ECS 任务正在使用的密钥。
- 确认您的 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 终端节点是否存在,请执行以下操作:
- 打开 Amazon VPC 控制台。
- 在导航窗格中,选择 Endpoints(端点)。
- 确保 Secrets Manager 的 VPC 终端节点 com.amazonaws.example-region.secretsmanager 在端点列表中。
- 从端点列表中选择端点,然后选择 Subnets(子网)选项卡。确保此端点的子网包含您的 ECS 任务使用的子网。
注意:如果未列出子网,请选择 Manage Subnets(管理子网)。根据子网的 Availability Zone(可用区)选择子网,然后再选择 Modify Subnets(修改子网)。
要确认附加到端点 com.amazonaws.example-region.secretsmanager 的安全组是否允许 Amazon ECS 任务在端口 443 上的传入连接,请执行以下操作:
- 从端点列表中选择端点。
- 选择 Security Groups(安全组)选项卡。
- 选择要检查的安全组的 Group ID(组 ID)。
- 选择 Inbound rules(入站规则)选项卡。
- 验证入站规则列表中是否包含允许来自 ECS 任务的 443 连接的规则。