我已经使用AWS控制台创建了一个WAF ACL。现在我需要使用Terraform创建WAF规则,所以我实现了以下规则。
resource "aws_wafregional_byte_match_set" "blocked_path_match_set" {
name = format("%s-%s-blocked-path", local.name, var.module)
dynamic "byte_match_tuples" {
for_each = length(var.blocked_path_prefixes) > 0 ? var.blocked_path_prefixes : []
content {
field_to_match {
type = lookup(byte_match_tuples.value, "type", null)
}
target_string = lookup(byte_match_tuples.value, "target_string", null)
positional_constraint = lookup(byte_match_tuples.value, "positional_constraint", null)
text_transformation = lookup(byte_match_tuples.value, "text_transformation", null)
}
}
}
resource "aws_wafregional_rule" "blocked_path_allowed_ipaccess" {
metric_name = format("%s%s%sBlockedPathIpaccess", var.application, var.environment, var.module)
name = format("%s%s%sBlockedPathIpaccessRule", var.application, var.environment, var.module)
predicate {
type = "ByteMatch"
data_id = aws_wafregional_byte_match_set.blocked_path_match_set.id
negated = false
}
}
但是我如何将这个新规则映射到现有的";web_acl"它是通过AWS控制台创建的。根据文献,我可以使用";aws_wafgregional_web_acl";创建新的webacl,但是有没有一种方法可以将通过terraform创建的规则与现有的wafcl关联起来?我有一个gitlab管道,它将地形代码部署到aws,所以最终我将传递现有web_acl的id/arn,并通过管道添加/更新新规则,而不会影响通过控制台创建的现有规则。
请分享您的宝贵反馈。
谢谢。
根据WAF文档,您通过AWS WAF资源关联规则,请参阅下面的代码片段示例。
resource "aws_wafregional_web_acl" "foo" {
name = "foo"
metric_name = "foo"
default_action {
type = "ALLOW"
}
rule {
action {
type = "BLOCK"
}
priority = 1
rule_id = aws_wafregional_rule.blocked_path_allowed_ipaccess.id
}
}
但是,正如您所说,您已经在AWS控制台中创建了资源。Terraform确实支持导入AWS资源,所以如果你想通过Terraform管理它,你需要使用这种方法。