Я хочу связать веб-ACL WAFv2 с этапом HTTP API GatewayV2.
Следуя терраформу docs, я попробовал следующее:
resource "aws_wafv2_web_acl_association" "this" {
resource_arn = aws_apigatewayv2_stage.this.arn
web_acl_arn = aws_wafv2_web_acl.this.arn
}
Однако это не было принято из-за ошибки:
Ошибка: WAFInvalidParameterException: Причина ошибки: недействительный ARN. Допустимый ARN начинается с arn: и включает другую информацию, разделенную двоеточиями или косыми чертами., Поле: RESOURCE_ARN, параметр: arn: aws: apigateway: eu-west-2 :: / apis / abcd1234 / stage / my-stage
Из документации AWS шаблон для ARN следующий:
arn:aws:apigateway:region::/restapis/api-id/stages/stage-name
Однако только ARN старого шлюза API использует restapis в своем ARN. Шлюзы v2 используют только apis.
- Поэтому ARN недействителен?
- Как связать этап HTTP AWS API GatewayV2 с веб-списком контроля доступа AWS WAFv2?
По запросу, вот код шлюза:
resource "aws_apigatewayv2_api" "this" {
name = "example-http-api"
protocol_type = "HTTP"
}
resource "aws_lambda_function" "this" {
filename = "example.zip"
function_name = "Example"
role = var.lambda_arn
handler = "index.handler"
runtime = "nodejs10.x"
}
resource "aws_apigatewayv2_integration" "get" {
api_id = aws_apigatewayv2_api.this.id
integration_type = "AWS_PROXY"
integration_method = "GET"
integration_uri = aws_lambda_function.this.invoke_arn
}
resource "aws_apigatewayv2_route" "get" {
api_id = aws_apigatewayv2_api.this.id
route_key = "$default"
target = "path/${aws_apigatewayv2_integration.get.id}"
}
resource "aws_apigatewayv2_stage" "this" {
api_id = aws_apigatewayv2_api.this.id
name = "example-stage"
}
И код для Web-ACL:
resource "aws_wafv2_web_acl" "this" {
scope = "REGIONAL"
default_action {
allow {}
}
rule {
name = "common-rule-set"
priority = 1
override_action {
none {}
}
statement {
managed_rule_group_statement {
name = "AWSManagedRulesCommonRuleSet"
vendor_name = "AWS"
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "common-rule-set"
sampled_requests_enabled = false
}
}
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "web-acl"
sampled_requests_enabled = false
}
}