内容提要
亚马逊最近宣布将Credentials Fetcher与Amazon Elastic Container Service (Amazon ECS)在Amazon Fargate上进行集成。这使得用户可以使用Amazon EC2或Amazon Fargate启动类型在Amazon ECS上运行Linux容器。之前,在Amazon ECS上运行依赖于组管理服务帐户 (gMSA) 的Linux容器仅限于在Amazon EC2实例上运行。通过Amazon Fargate支持,用户可以将其应用程序现代化,以Linux容器形式运行,并使用gMSA Windows身份验证,无需虚拟机。本文提供了gMSA在Amazon Fargate上的解决方案概述和先决条件。还讨论了在Amazon ECS中配置Credentials Fetcher和Active Directory以进行Windows身份验证的过程。文章最后提到了应用程序容器的部署和故障排除技巧。
延伸解读
从 EC2 到 Fargate:gMSA 支持的关键变化
此前,在 Amazon ECS 上运行依赖 gMSA 的 Linux 容器只能使用 EC2 启动类型,并且需要在每个实例中安装 Credentials Fetcher。现在,通过 Fargate 集成,Credentials Fetcher 作为 ECS 托管的进程守护程序开箱即用,无需预置、维护、修补和扩展虚拟机。这一变化让用户能够将应用程序现代化为 Linux 容器,同时继续使用 Windows 身份验证,并享受无服务器计算的优势。
部署前必须关注的先决条件
要成功部署示例解决方案,需要满足几个关键条件:生成 CredSpec 文件并上传到 Amazon S3;确保 Amazon VPC 附加了正确的 DHCP 选项集,以便 Fargate 上的 Credentials Fetcher 能与 AD 域通信;ECS 服务和任务必须在连接到 AD 域控制器的 VPC 子网中启动。此外,任务定义需设置 credentialSpecs 属性,并赋予任务执行角色读取 S3、Secrets Manager 和 ECR 的权限。
故障排查:常见错误与诊断方法
部署时可能遇到两类主要错误:一是连接 SQL Server 失败,可通过 ECS 控制台查看应用程序日志诊断;二是 ECS 任务无法启动,通常源于 Credentials Fetcher 无法从 gMSA 账户检索 Kerberos 票证。此时应检查 credentialSpecs 属性是否以“credentialspecdomainless:”为前缀并指向有效的 S3 ARN,以及 Secrets Manager 中的 AD 用户信息是否有效。若问题依旧,可将任务部署到 EC2 实例查看 Credentials
连接字符串中的域名细节
示例中的 ASP.NET Core 应用程序配置与本地环境相同,但有一个特殊要求:连接字符串中的 SQL Server 地址必须使用 AD 域名定义。如果使用 IP 地址或其他 DNS 名称,身份验证方法将默认为 Microsoft NTLM,从而导致连接失败。这一细节对于确保集成 Windows 身份验证正常工作至关重要,在迁移或调试时需要特别注意。
Q&A
什么是gMSA,它在Amazon ECS上的作用是什么?
gMSA是组管理服务账户,用于在Windows环境中进行身份验证。在Amazon ECS上,gMSA允许Linux容器使用Windows身份验证,简化了身份验证过程。
如何在Amazon Fargate上配置Credentials Fetcher?
在Amazon Fargate上,Credentials Fetcher是开箱即用的,用户只需在任务定义中设置credentialSpecs属性,并确保任务在连接到AD域控制器的VPC子网中启动。
使用gMSA进行Windows身份验证的好处是什么?
使用gMSA进行Windows身份验证可以简化身份验证流程,避免了虚拟机的维护和管理,同时支持在无服务器环境中运行Linux容器。
在Amazon ECS上部署应用程序时需要注意什么?
在部署应用程序时,确保ECS服务和任务在连接到AD域控制器的VPC子网中启动,以便Credentials Fetcher能够成功检索Kerberos票证。
如何生成CredSpec文件并上传到Amazon S3?
生成CredSpec文件需要在Windows计算机上以AD管理员身份运行特定脚本,然后将生成的文件上传到指定的Amazon S3存储桶。
在使用gMSA时可能遇到哪些故障,如何排除?
常见故障包括SQL Server连接错误和Credentials Fetcher无法检索Kerberos票证。可以通过检查任务定义的credentialSpecs属性和查看Credentials Fetcher日志来排除故障。