Как найти AWS лямбда-серверов имен, используя Terraform? - PullRequest
1 голос
/ 08 февраля 2020

Я использую функцию Lambda для подключения к службе в моем VP C, и ей нужно разрешить внутренний адрес, поэтому мне нужно разрешить соединениям от Lambda попадать на мои внутренние серверы имен, но я не хочу разрешить UDP на 0.0.0.0/0 на порту 53.

Как я могу узнать IP-адреса серверов имен, которые Lambda будет использовать, чтобы я мог включить их в правила своих групп безопасности?

1 Ответ

1 голос
/ 08 февраля 2020

В вашем VP C DNS-сервер будет основой диапазона сети VP C плюс два. Например, если ваш блок VP C CIDR равен 10.0.0.0/24, то Amazon зарезервирует 10.0.0.2 для DNS-сервера. Это задокументировано здесь .

Вы также можете просто разрешить исходящие соединения с вашим блоком CIDR VP C вместо того, чтобы открывать 0.0.0.0/0. Хотя вы должны заметить, что лямбда-функция внутри VP C не имеет общедоступного c IP-адреса, поэтому она не может получить доступ к чему-либо вне VP C без прохождения через NAT-шлюз.


Чтобы рассчитать это в Terraform, давайте предположим, что у вас есть ссылка на VP C как-то так:

data "aws_vpc" "my_vpc" {
  id = "${var.vpc_id}"
}

Затем вы можете использовать функцию cidrhost() Terraform, чтобы найти IP-адрес, например:

locals {
  dns_server = cidrhost(data.aws_vpc.my_vpc.cidr_block, 2)
}

resource "aws_security_group_rule" "allow_dns" {
  type            = "outbound"
  from_port       = 53
  to_port         = 53
  protocol        = "udp"
  cidr_blocks     = "${local.dns_server}/32"

  security_group_id = "sg-123456"
}
...