我想解决我在 Amazon Cognito 中配置自定义域名时收到的错误。
简短描述
当您在 Amazon Cognito 中配置自定义域名时,可能会收到以下错误消息之一:
- “自定义域不是有效的子域名: 无法解析根域,请确保根域存在 A 记录。”
- “域已与另一个用户池相关联。”
- “您提供的一个或多个 CNAME 已经与其他资源关联。”
- “指定的 SSL 证书不存在、不在 us-east-1 区域、无效或不包含有效的证书链。”
- “域名包含无效字符。域名只能包含小写字母、数字和连字符。请按照以下格式输入不同的名称:^a-z0-9?$”
解决方法
自定义域不是有效的子域
为了防止基础设施意外更改,Amazon Cognito 不支持自定义域的顶级域。要创建 Amazon Cognito 自定义域,父域必须具有 DNS A 记录。
父域可以是域的根域,也可以是域层次结构中上一级的子域。例如,如果您的自定义域为 auth.xyz.yourdomain.com,则 Amazon Cognito 必须将 xyz.yourdomain.com 解析为 IP 地址。此外,要将 xyz.yourdomain.com 配置为自定义域,请为 yourdomain.com 配置 A 记录。
您必须在 DNS 配置中为父域创建 A 记录。当父域解析为有效的 A 记录时,Amazon Cognito 不会进行额外的验证。如果父域未指向真实的 IP 地址,请在 DNS 配置中输入虚拟 IP 地址,例如 “8.8.8.8”。
要确保您的 DNS 提供商传播您对 DNS 配置所作的更改,请运行以下命令之一。
**注意:**示例命令适用于 Linux 环境。
要使用 auth.xyz.yourdomain.com 作为自定义域,请运行以下命令:
dig A xyz.yourdomain.com +short
要使用 xyz.yourdomain.com 作为自定义域,请运行以下命令:
dig A yourdomain.com +short
如果 DNS 配置更改传播,则前面的命令将返回您配置的 IP 地址。如果 DNS 查询未返回配置的 IP 地址,请等待更改传播。
在 Amazon Cognito 中创建自定义域后,移除父域 A 记录映射。
该域已与另一个用户池相关联
在所有 AWS 账户和所有 AWS 区域中,自定义域名必须是唯一的。如果您为用户池使用自定义域名,则不能对任何其他用户池使用相同的域名。要将域名用于另一个用户池,请删除与第一个用户池关联的自定义域。
删除自定义域后,需要一段时间才能将自定义域与用户池完全解除关联。如果您在删除后立即使用另一个用户池配置域名,则可能会收到域关联错误消息。
您提供的其中一个 CNAME 已与其他资源相关联
Amazon Cognito 创建自定义域后,Amazon Cognito 使用相同的自定义域名创建 AWS 托管的 Amazon CloudFront 分配。您只能将域名用于一个 CloudFront 分配。如果您在 CloudFront 中使用域名作为备用域,则无法使用现有域名创建自定义域。如果您尝试创建已与 CloudFront 分配关联的自定义域,则会显示 CNAME 关联错误消息。
要解决此问题,请为 Amazon Cognito 自定义域使用不同的域名。或者,当您将域用作 Amazon Cognito 自定义域时,不要将域名用于另一个 CloudFront 分配。
指定的 SSL 证书不存在
当您创建自定义域时,Amazon Cognito 会在内部创建 CloudFront 分配。CloudFront 仅在 us-east-1 区域支持 ACM 证书。要创建 Amazon Cognito 自定义域,您必须在 us-east-1 AWS 区域拥有 AWS Certificate Manager (ACM) 证书。
配置自定义域时,请确保您选择的证书未过期。
如果您将证书导入 ACM,请确保由公共证书颁发机构颁发证书。证书还必须具有正确的证书链。有关详细信息,请参阅将证书导入到 AWS Certificate Manager 中和在 CloudFront 中使用 SSL/TLS 证书的要求。
如果 AWS Key Management Service (AWS KMS) 策略评估产生显式拒绝语句,则您可能会收到 SSL 证书错误消息。当创建 Amazon Cognito 自定义域的 IAM 用户或角色的某些 AWS KMS 操作被显式拒绝时,您会收到 SSL 证书错误消息。该问题最常见于 kms:DescribeKey、kms:CreateGrant 或 kms:* AWS KMS 操作。
域名包含无效字符
除了小写字母、数字和连字符外,域名不能包含任何其他内容。第一个或最后一个字符不能使用连字符。整个域名的最大长度为 63 个字符。
相关信息
将您自己的域用于托管登录