AWS и Terraform - правило выхода по умолчанию в группе безопасности - PullRequest
3 голосов
/ 06 марта 2019

Существует повторяемая конфигурация, которую я вижу во многих проектах Terraform, где провайдером является AWS: Конфигурация правила исходящего (выходного) для разрешения ВСЕГО исходящего трафика.

Насколько далекокак я понимаю, это поведение по умолчанию в 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"]
       }
}

Эта конфигурация выполняется для документации или имеет техническую причину?

1 Ответ

3 голосов
/ 06 марта 2019

В документации для ресурса aws_security_group специально указывается, что они по умолчанию намеренно удаляют выходное правило AWS по умолчанию и требуют, чтобы пользователи указали его для ограничения сюрпризов для пользователей:

ПРИМЕЧАНИЕ о выходных правилах. По умолчанию AWS создает выходное правило ALLOW ALL при создании новой группы безопасности внутри VPC.При создании новой группы безопасности внутри VPC Terraform удалит это правило по умолчанию и потребует, чтобы вы специально воссоздали его, если хотите этого правила.Мы считаем, что это приведет к меньшему количеству сюрпризов с точки зрения контроля ваших правил выхода.Если вы хотите, чтобы это правило имело место, вы можете использовать этот выходной блок:

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

Здесь также есть техническая / UX причина в том, что было бы сложно заставить Terraform понять, следует ли емуПри внесении изменений в группу безопасности сохраняйте правило разрешить все выходы.Должно ли оно всегда предусматривать правило разрешения всех выходов, если не указано другое правило выхода, а затем, если это так, удалить значение по умолчанию?Как бы это работало с комбинацией ресурса aws_security_group_rule ?

AWS приняла решение о том, что правило по умолчанию, разрешающее весь исходящий выход, является более приятным для пользователя, чем отсутствие его (и сбивает с толку людей относительно того, почему их экземпляр не может обмениваться исходящими сообщениями) без слишком значительного влияния на безопасность (по сравнению с эквивалентом для входящих).Даже если бы они сейчас передумали в пользу этой выгоды, они не смогли бы сделать это без массового нарушения множества настроек / рабочих процессов людей, что AWS очень неохотно делает.

Terraform, с другой стороныстороны, приняли решение другим путем, и это лучше подходит для инструмента, а также немного улучшило защитную позу инструмента за счет того, чтобы люди определяли повторяющийся выходной блок во многих местах.

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

...