需要Cognito自己的域名A记录

时间:2018-07-09 15:55:11

标签: amazon-web-services amazon-cognito aws-cognito

我正在尝试为Cognito的用户池分配一个自己的域名,并且面临一个似乎需要A记录的问题。

就我而言,我已经在我的互联网域上注册了通配符,并试图按照https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html

中所述的步骤进行操作

现在我可以创建一个A记录,但是不知道该A记录应指向何处。欢迎任何提示或技巧:)如果可以在不使用CloudFront的情况下完成此操作,那就太好了。

我尝试了CNAME等,但如上所述,要求提供A记录。

8 个答案:

答案 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地址。

Reference

答案 3 :(得分:0)

似乎尝试使用点太多的子域会导致此错误。

这有效:

auth.example.com

这不是:

dev.auth.example.com

此外,如果您删除并重新添加相同的域名,这似乎会导致错误。更改为其他域即可。

我在#awswishlist https://awswishlist.com/

中添加了一个修复请求

答案 4 :(得分:0)

我正在使用

  

authdev.mycompany.com

并且必须在

的根域中创建A记录(使用弹性ip)。
  

mycompany.com。

enter image description here

答案 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。

要打破此循环,

  1. 创建一个新的Route 53区域auth.example.com,供Cognito独立于网站的example.com区域使用。这打破了依赖性循环。
  2. 创建一个auth.example.com记录,该记录指向一个占位符IP地址,例如127.0.0.1。这将永远不会被实际使用。
  3. 现在,您可以为每个环境的Cognito自定义域创建一个dev.auth.example.comstage.auth.example.comprod.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 配置

  1. 让您的 DNS 服务提供商将上一步中的别名目标添加为您的用户池自定义域的别名。
  2. 您的 DNS 提供商还需要为您的自定义域设置子域。

Route53

  1. 登录到 Route 53 控制台。系统可能会提示您输入 AWS 凭证。

  2. 如果您在 Route 53 中没有托管区域,请设置一个。否则,跳过此步骤。

    • a.选择创建托管区域。
    • b.从域名列表中选择您的自定义域。
    • c.对于评论,输入有关托管区域的可选评论。
    • d.选择“创建”。
  3. 在托管区域页面上,选择您的托管区域的名称。

  4. 选择创建记录集。

  5. 为别名选项选择是。

  6. 将您在上一步中记下的别名目标名称输入到别名目标中。

  7. 选择创建。

  8. 使用别名目标在 Route 53 中添加子域。

    • a.在托管区域页面上,选择您的托管区域的名称。
    • b.选择创建记录集并输入以下值:
      • 我。对于名称,键入您的首选子域名。例如,如果您尝试创建的子域是 auth.example.com,请输入 auth。
      • ii.对于类型,选择 A - IPv4 地址。
      • iii.为别名选项选择是。
      • 四。在别名目标中键入您在上一步中记下的别名目标名称。
    • c.选择“创建”。

参考:https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html