7

プロバイダーが AWS である多くの Terraform プロジェクトで見られる繰り返し可能な構成があります 。すべてのアウトバウンド トラフィックを許可するアウトバウンド (エグレス) ルールの構成です。

私が理解している限り、AWS ユーザー ガイドに記載されているように、これは AWS のデフォルトの動作です。

デフォルトでは、セキュリティ グループには、すべてのアウトバウンド トラフィックを許可するアウトバウンド ルールが含まれています。ルールを削除して、特定のアウトバウンド トラフィックのみを許可するアウトバウンド ルールを追加できます。セキュリティ グループにアウトバウンド ルールがない場合、インスタンスからのアウトバウンド トラフィックは許可されません。

セキュリティ グループの一般的な Terraform セットアップの例 - 私の質問の焦点は、エグレス ブロックです。

 resource "aws_security_group" "my_sg" {
       name        = "my_sg"
       description = "Some description"
       vpc_id      = "${aws_vpc.my_vpc.id}"
       tags {
         Name = "my_sg_tag"
       }

       #Not redundant - Because a new security group has no inbound rules.
       ingress {
         from_port   = "80"
         to_port     = "80"
         protocol    = "TCP"
         cidr_blocks = ["0.0.0.0/0"]
       }

       #Isn't this redundant?    
       egress {
         from_port   = 0
         to_port     = 0
         protocol    = "-1"
         cidr_blocks = ["0.0.0.0/0"]
       }
}

この構成は文書化のために作成されたものですか、それとも技術的な理由がありますか?

4

1 に答える 1

12

リソースドキュメントには、aws_security_group AWS のデフォルトのエグレス ルールをデフォルトで意図的に削除し、ユーザーへの驚きを制限するためにそれを指定するようユーザーに要求することが具体的に記載されています。

エグレス ルールに関する注意: デフォルトでは、AWS は VPC 内に新しいセキュリティ グループを作成するときに、ALLOW ALL エグレス ルールを作成します。VPC 内に新しいセキュリティ グループを作成すると、Terraform はこのデフォルト ルールを削除します。そのルールが必要な場合は、明示的に再作成する必要があります。これにより、エグレス ルールを制御するという点で驚くことが少なくなると思います。このルールを適用する場合は、次の出口ブロックを使用できます。

egress {
  from_port   = 0
  to_port     = 0
  protocol    = "-1"
  cidr_blocks = ["0.0.0.0/0"]
}

ここには、セキュリティ グループに変更を加えるときに、すべての送信を許可するルールを維持する必要があるかどうかを Terraform に理解させるのが難しいという点で、技術的/UX 上の理由もあります。別の送信ルールが指定されていない限り、常にすべての送信ルールを許可し、そうであればデフォルトを削除する必要がありますか? aws_security_group_ruleリソースの組み合わせでどのように機能しますか?

AWS は、すべてのエグレス アウトバウンドを許可するデフォルト ルールは、それを持たないよりも優れたユーザー エクスペリエンスであると判断しました (また、インスタンスがアウトバウンドと通信できない理由について人々を混乱させます)。インバウンド向け)。AWS が非常に消極的である多くの人々のセットアップ/ワークフローを大幅に壊すことなく、これを実行することはできません。

一方、Terraform は別の方法で決定を下し、ツールにより適しているだけでなく、ツールのセキュリティ体制をわずかに改善しますが、多くの場所で繰り返し出力ブロックを定義する必要があります。

繰り返しが特に気になり、常にすべての送信トラフィックを許可したい場合は、自動的にすべての送信トラフィックを許可するモジュールを代わりに使用すると便利です。

于 2019-03-06T14:15:55.267 に答える