我正在尝试为Cognito的用户池分配一个自己的域名,并且面临一个似乎需要A记录的问题。
就我而言,我已经在我的互联网域上注册了通配符,并试图按照https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html
中所述的步骤进行操作现在我可以创建一个A记录,但是不知道该A记录应指向何处。欢迎任何提示或技巧:)如果可以在不使用CloudFront的情况下完成此操作,那就太好了。
我尝试了CNAME等,但如上所述,要求提供A记录。
答案 0 :(得分:5)
您拥有的网络域。它的根必须在DNS中具有有效的A记录。
简而言之,如果您的域是example.com
,那么在继续之前,实际上需要为网站配置根(example.com
)。 A记录的具体值与Cognito无关,因为这取决于您选择设置网站的方式...但是Cognito要求它存在。
答案 1 :(得分:2)
与域 root 无关。该子域位于您输入的域名之下的级别。
auth.example.com
,则需要A记录
example.com
auth.qa.example.com
,则需要A记录
为qa.example.com
foo.bar.qa.example.com
,则需要
bar.qa.example.com
的A记录答案 2 :(得分:1)
为了处理子域,我创建了一个IP为127.0.0.1
的A记录,并且该记录正在运行。
我想将auth.dev.${domain_name}.com
添加为cognito的自定义域,但是我没有指向dev.${domain_name}.com
的任何网站,因此为dev。$ {domain_name} .com创建了一条记录,并指向127.0.0.1
IP地址。
答案 3 :(得分:0)
似乎尝试使用点太多的子域会导致此错误。
这有效:
auth.example.com
这不是:
dev.auth.example.com
此外,如果您删除并重新添加相同的域名,这似乎会导致错误。更改为其他域即可。
我在#awswishlist https://awswishlist.com/
中添加了一个修复请求答案 4 :(得分:0)
答案 5 :(得分:0)
最后, CNAME 记录解决了我的问题。
尝试为Amazon Cognito托管UI配置自定义子域auth.staging.mycompany.com
时遇到错误。
我有mycompany.com
的 A 记录,指向正确的IP地址。我刚刚为staging.mycompany.com
添加了 CNAME 记录以指向mycompany.com
,Amazon Cognito设法通过这个新别名发现了 A 记录。>
答案 6 :(得分:0)
受欢迎的答案正确回答了问题。但是从更高的层次来看,还有更多。配置依赖项中有一个循环:
Cognito需要
auth.example.com
A记录,而它需要example.com
A记录。example.com
记录需要一个网站指向,该网站需要Cognito。
要打破此循环,
auth.example.com
,供Cognito独立于网站的example.com
区域使用。这打破了依赖性循环。auth.example.com
记录,该记录指向一个占位符IP地址,例如127.0.0.1
。这将永远不会被实际使用。dev.auth.example.com
,stage.auth.example.com
或prod.auth.example.com
之类的A记录。以下Terraform示例将所有内容组合在一起,创建了一个Cognito自定义
域prod.auth.example.com
:
# Pre-existing hosted zone created by Route53 Registrar
data "aws_route53_zone" "main" {
name = "example.com"
}
# Create a new Route 53 zone auth.example.com
#
# Actually, Route 53 zone creation belongs in a separate Terraform
# module where it can be shared by multiple environments.
resource "aws_route53_zone" "auth" {
name = "auth.example.com"
}
resource "aws_route53_record" "auth-ns" {
zone_id = data.aws_route53_zone.main.zone_id
name = "auth.example.com"
type = "NS"
ttl = "30"
records = aws_route53_zone.auth.name_servers
} As it is now,
# `terraform destroy` will destroy zone auth.example.com, leaving the other environments in the lurch.
resource "aws_route53_record" "auth-a" {
zone_id = aws_route53_zone.auth.zone_id
name = "auth.example.com"
type = "A"
ttl = 300
records = ["127.0.0.1"] # Placeholder that is never used
}
# Route 53 zone auth.example.com setup done
module "acm" {
source = "terraform-aws-modules/acm/aws"
domain_name = "prod.auth.example.com"
zone_id = aws_route53_zone.auth.zone_id
subject_alternative_names = []
wait_for_validation = true
}
resource "aws_cognito_user_pool" "this" {
name = "prod-cognito"
}
resource "aws_cognito_user_pool_domain" "this" {
depends_on = [aws_route53_record.auth-a]
domain = "prod.auth.example.com"
certificate_arn = module.acm.this_acm_certificate_arn
user_pool_id = aws_cognito_user_pool.this.id
}
resource "aws_route53_record" "subdomain-a" {
zone_id = aws_route53_zone.auth.zone_id
name = "prod.auth.example.com"
type = "A"
alias {
evaluate_target_health = false
name = aws_cognito_user_pool_domain.this.cloudfront_distribution_arn
# Every CloudFront distribution's zone ID is Z2FDTNDATAQYW2
zone_id = "Z2FDTNDATAQYW2"
}
}
还有一些工作要做:您还需要使用aws_cognito_user_pool_client
创建应用程序客户端。我之所以忽略了这一点,是因为应用客户端与自定义域无关。
答案 7 :(得分:0)
我了解您正在使用 Cognito 托管 UI 进行身份验证,并且您需要一个自定义域。
当您为 cognito 创建自定义域时,它会返回一个别名目标(指向 Cloudfront 分布)。
然后根据您使用的是 Route53 还是 DNS 配置执行以下步骤:
DNS 配置
Route53
登录到 Route 53 控制台。系统可能会提示您输入 AWS 凭证。
如果您在 Route 53 中没有托管区域,请设置一个。否则,跳过此步骤。
在托管区域页面上,选择您的托管区域的名称。
选择创建记录集。
为别名选项选择是。
将您在上一步中记下的别名目标名称输入到别名目标中。
选择创建。
使用别名目标在 Route 53 中添加子域。
参考:https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html