ECS 任务无法提取机密或注册表身份验证

e-e*_*e-e 1 amazon-web-services amazon-ecs amazon-vpc aws-cdk

我有一个 CDK 项目,它创建一个在 ECS 上部署应用程序的 CodePipeline。我之前一切都正常,但 VPC 使用 NAT 网关,这最终导致成本太高。所以现在我尝试在不需要 NAT 网关的情况下重新创建该项目。我快要完成了,但现在当 ECS 服务尝试启动任务时遇到了问题。所有任务都无法启动,并出现以下错误:

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret
Run Code Online (Sandbox Code Playgroud)

此时,我已经忘记了我尝试过的不同事情,但我将在这里发布相关内容以及我的一些尝试。

ResourceInitializationError: unable to pull secrets or registry auth: execution resource retrieval failed: unable to retrieve secret from asm: service call has been retried 5 time(s): failed to fetch secret
Run Code Online (Sandbox Code Playgroud)

我在某处读到,它可能与 Fargate 版本 1.4.0 与 1.3.0 有关,但我不确定需要更改什么才能允许任务访问它们需要运行的内容。

gsh*_*hka 5

您需要为 Secrets Manager、ECR(两种类型的端点)、CloudWatch 创建接口端点以及 S3 的网关端点。

请参阅有关该主题的文档

这是 Python 中的一个示例,它在 TS 中的工作方式相同:

vpc.add_interface_endpoint(
    "secretsmanager_endpoint",
    service=ec2.InterfaceVpcEndpointAwsService.SECRETS_MANAGER,
)
vpc.add_interface_endpoint(
    "ecr_docker_endpoint",
    service=ec2.InterfaceVpcEndpointAwsService.ECR_DOCKER,
)
vpc.add_interface_endpoint(
    "ecr_endpoint",
    service=ec2.InterfaceVpcEndpointAwsService.ECR,
)
vpc.add_interface_endpoint(
    "cloudwatch_logs_endpoint",
    service=ec2.InterfaceVpcEndpointAwsService.CLOUDWATCH_LOGS,
)
vpc.add_gateway_endpoint(
    "s3_endpoint",
    service=ec2.GatewayVpcEndpointAwsService.S3
)
Run Code Online (Sandbox Code Playgroud)

请记住,接口端点也需要花钱,并且可能不会比 NAT 便宜。