Terraform-provider-aws: Erreur de protocole / port de règle de groupe de sécurité AWS.

Créé le 10 juil. 2017  ·  3Commentaires  ·  Source: hashicorp/terraform-provider-aws

Salut,

Version Terraform

Terraform v0.9.11

Ressource (s) affectée (s)

  • aws_security_group_rule

Fichiers de configuration 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"
  }
}

Comportement prévisible

Terraform doit renvoyer une erreur indiquant que la définition du protocole sur -1 et les paramètres from_port et to_port ne sont pas pris en charge OU créer la règle pour tcp et udp.

Comportement réel

Lance une erreur indiquant que la règle demandée est déjà ajoutée, car elle ajoute une règle autoriser tout pour le CIDR spécifié.

Étapes à suivre pour reproduire

  1. Définissez une nouvelle ressource de règle SG, pour des ports spécifiques avec le même CIDR et des ports différents.
  2. Exécutez terraform apply.
  3. Obtenez l'erreur ci-dessous:
    `` `` * aws_security_group_rule.Logstash [3]: 1 erreur (s) s'est produite:
  • aws_security_group_rule.Logstash.3: [WARN] Une règle de groupe de sécurité en double a été trouvée sur (sg-xxxxxxxx). Cela peut être
    un effet secondaire d'un problème Terraform maintenant résolu provoquant deux groupes de sécurité avec
    attributs identiques mais source_security_group_ids différents pour écraser chacun
    autre dans l'état. Voir https://github.com/hashicorp/terraform/pull/2376 pour en savoir plus
    informations et instructions de récupération. Message d'erreur: la règle spécifiée "pair: 10.0.1.0/8, ALL, ALLOW" existe déjà ''
bug servicec2 stale

Commentaire le plus utile

Il s'avère que c'est le comportement par défaut de l'API AWS, si vous fournissez protocol = -1 pour une aws_security_group_rule, vous obtiendrez une règle ALL ALLOW. Cela devrait être mentionné dans la documentation de terraform.

la bonne façon de procéder est de créer deux aws_security_group_rule à la fois pour tcp et 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}"
}

Tous les 3 commentaires

Il s'avère que c'est le comportement par défaut de l'API AWS, si vous fournissez protocol = -1 pour une aws_security_group_rule, vous obtiendrez une règle ALL ALLOW. Cela devrait être mentionné dans la documentation de terraform.

la bonne façon de procéder est de créer deux aws_security_group_rule à la fois pour tcp et 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}"
}

Marquer ce problème comme obsolète en raison de l'inactivité. Cela aide nos responsables à trouver et à se concentrer sur les problèmes actifs. Si ce problème ne reçoit aucun commentaire dans les 30 prochains jours, il sera automatiquement clos. Les responsables de la maintenance peuvent également retirer l'étiquette périmée.

Si ce problème a été automatiquement résolu et que vous pensez que ce problème devrait être rouvert, nous vous encourageons à créer un nouveau problème reliant celui-ci pour plus de contexte. Merci!

Je vais verrouiller ce problème car il est fermé depuis _30 jours_ ⏳. Cela aide nos responsables à trouver et à se concentrer sur les problèmes actifs.

Si vous pensez que ce numéro devrait être rouvert, nous vous encourageons à créer un nouveau numéro renvoyant à celui-ci pour plus de contexte. Merci!

Cette page vous a été utile?
0 / 5 - 0 notes