Terraform-provider-aws: AWSセキュリティグループルールのプロトコル/ポートエラー。

作成日 2017年07月10日  ·  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. 同じCIDRと異なるポートを持つ特定のポートに対して、新しいSGルールリソースを定義します。
  2. テラフォーム適用を実行します。
  3. 以下のエラーが発生します。
    `` `* aws_security_group_rule.Logstash [3]:1つのエラーが発生しました:
  • aws_security_group_rule.Logstash.3:[警告]重複するセキュリティグループルールが(sg-xxxxxxxx)で見つかりました。 これは
    現在修正されているTerraformの問題の副作用により、2つのセキュリティグループが発生します。
    属性は同じですが、それぞれを上書きするためのsource_security_group_idsが異なります
    状態の他。 詳細については、 https://github.com/hashicorp/terraform/pull/2376を参照して
    回復のための情報と指示。 エラーメッセージ:指定されたルール「peer:10.0.1.0/8、ALL、ALLOW」はすでに存在します `` `
bug servicec2 stale

最も参考になるコメント

これがAWSAPIのデフォルトの動作であることが判明しました。aws_security_group_ruleにprotocol = -1を指定すると、ALLALLOWルールが取得されます。 これは、terraformドキュメントで言及する必要があります。

それを実行する適切な方法は、tcpとudpfeの両方に対して2つのaws_security_group_ruleを作成することです。

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件

これがAWSAPIのデフォルトの動作であることが判明しました。aws_security_group_ruleにprotocol = -1を指定すると、ALLALLOWルールが取得されます。 これは、terraformドキュメントで言及する必要があります。

それを実行する適切な方法は、tcpとudpfeの両方に対して2つのaws_security_group_ruleを作成することです。

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 評価