Terraform-provider-aws: Ошибка протокола / порта AWS Security Group Rule.

Созданный на 10 июл. 2017  ·  3Комментарии  ·  Источник: hashicorp/terraform-provider-aws

Здравствуй,

Версия Terraform

Terraform v0.9.11

Затронутые ресурсы

  • aws_security_group_rule

Файлы конфигурации Terraform

variable "ports_logstash" {
  description = "Ports used by logstash and graphite"
  default     = ["40000", "40001", "40002", "40003", "40004", "40005", "40006", "40007", "40008", "40009", "40010", "2003", "2005", "8125", "80", "443"]
}

resource "aws_security_group_rule" "Logstash" {
  count       = "${length(var.ports_logstash)}"
  depends_on  = ["aws_security_group.SG-Logstash"]
  type        = "ingress"
  from_port   = "${var.ports_logstash[count.index]}"
  to_port     = "${var.ports_logstash[count.index]}"
  protocol    = -1
  cidr_blocks = ["10.0.1.0/8"]

  security_group_id = "${aws_security_group.SG-Logstash.id}"
}

resource "aws_security_group" "SG-Logstash" {
  name        = "SG-Logstash"
  description = "Access to all ports required for Logstash communication"
  vpc_id      = "${aws_vpc.default.id}"

  tags {
    Name = "SG-Logstash"
  }
}

Ожидаемое поведение

Terraform должен выдать ошибку, что определение протокола как -1 и установка from_port и to_port не поддерживаются ИЛИ создать правило для tcp и udp.

Фактическое поведение

Выдает ошибку о том, что запрошенное правило уже добавлено, поскольку оно добавляет правило разрешить все для указанного CIDR.

Действия по воспроизведению

  1. Определите новый ресурс правила SG для определенных портов с тем же CIDR и разными портами.
  2. Запустите terraform apply.
  3. Получите следующую ошибку:
    `` `* aws_security_group_rule.Logstash [3]: произошла 1 ошибка (и):
  • aws_security_group_rule.Logstash.3: [ПРЕДУПРЕЖДЕНИЕ] На (sg-xxxxxxxx) обнаружено повторяющееся правило группы безопасности. Это может быть
    побочный эффект теперь исправленной проблемы Terraform, вызывающей две группы безопасности с
    идентичные атрибуты, но разные source_security_group_ids для перезаписи каждого
    прочее в гос. См. Https://github.com/hashicorp/terraform/pull/2376 для получения дополнительной информации.
    информация и инструкция по восстановлению. Сообщение об ошибке: указанное правило «peer: 10.0.1.0/8, ALL, ALLOW» уже существует ».
bug servicec2 stale

Самый полезный комментарий

Оказывается, это поведение AWS API по умолчанию, если вы укажете протокол = -1 для aws_security_group_rule, вы получите правило ALL ALLOW. Об этом следует упомянуть в документации по терраформу.

правильный способ сделать это - создать два aws_security_group_rule для tcp и udp fe

resource "aws_security_group_rule" "tcpLogstash" {
  count       = "${length(var.ports_logstash)}"
  depends_on  = ["aws_security_group.SG-Logstash"]
  type        = "ingress"
  from_port   = "${var.ports_logstash[count.index]}"
  to_port     = "${var.ports_logstash[count.index]}"
  protocol    = "tcp"
  cidr_blocks = ["10.0.1.0/8"]

  security_group_id = "${aws_security_group.SG-Logstash.id}"
}

resource "aws_security_group_rule" "udpLogstash" {
  count       = "${length(var.ports_logstash)}"
  depends_on  = ["aws_security_group.SG-Logstash"]
  type        = "ingress"
  from_port   = "${var.ports_logstash[count.index]}"
  to_port     = "${var.ports_logstash[count.index]}"
  protocol    = "udp"
  cidr_blocks = ["10.0.1.0/8"]

  security_group_id = "${aws_security_group.SG-Logstash.id}"
}

Все 3 Комментарий

Оказывается, это поведение AWS API по умолчанию, если вы укажете протокол = -1 для aws_security_group_rule, вы получите правило ALL ALLOW. Об этом следует упомянуть в документации по терраформу.

правильный способ сделать это - создать два aws_security_group_rule для tcp и udp fe

resource "aws_security_group_rule" "tcpLogstash" {
  count       = "${length(var.ports_logstash)}"
  depends_on  = ["aws_security_group.SG-Logstash"]
  type        = "ingress"
  from_port   = "${var.ports_logstash[count.index]}"
  to_port     = "${var.ports_logstash[count.index]}"
  protocol    = "tcp"
  cidr_blocks = ["10.0.1.0/8"]

  security_group_id = "${aws_security_group.SG-Logstash.id}"
}

resource "aws_security_group_rule" "udpLogstash" {
  count       = "${length(var.ports_logstash)}"
  depends_on  = ["aws_security_group.SG-Logstash"]
  type        = "ingress"
  from_port   = "${var.ports_logstash[count.index]}"
  to_port     = "${var.ports_logstash[count.index]}"
  protocol    = "udp"
  cidr_blocks = ["10.0.1.0/8"]

  security_group_id = "${aws_security_group.SG-Logstash.id}"
}

Пометка проблемы как устаревшей из-за бездействия. Это помогает нашим специалистам по сопровождению находить активные проблемы и сосредоточиться на них. Если в течение следующих 30 дней этот вопрос не получит комментариев, он будет автоматически закрыт. Сопровождающие также могут удалить устаревшую этикетку.

Если эта проблема была автоматически закрыта, и вы считаете, что эту проблему следует открыть повторно, мы рекомендуем создать новую проблему, связав ее с этой проблемой для добавления контекста. Спасибо!

Я собираюсь заблокировать этот выпуск, потому что он был закрыт _30 дней_ ⏳. Это помогает нашим специалистам по сопровождению находить активные проблемы и сосредоточиться на них.

Если вы считаете, что эту проблему следует открыть повторно, мы рекомендуем создать новую проблему, связав ее с этой проблемой для добавления контекста. Спасибо!

Была ли эта страница полезной?
0 / 5 - 0 рейтинги