😄
TerraformでWAFのログの出力先をs3バケットに設定する際に`ARN isn't valid`とでた時の解消法のメモ
ARN isn't valid
とでた時の解消法のメモ
TerraformでWAFのログの出力先をs3バケットに設定する際にTerraformでWAFのログの出力先をs3バケットに設定する際にARN isn't valid
とでた。
ロググループのprefixも記述済みなのにも関わらずエラーが発生していた。
エラーコード
Resource handler returned message: "Error reason: The ARN isn't valid. A valid ARN begins with arn: and includes other information separated by colons or slashes., field: LOG_DESTINATION, parameter: arn:aws:logs:us-east-1:~:log-group:waf-logs-xxxxx
エラー発生時のTerraformのコード
provider "aws" {
alias = "us-east-1"
region = "us-east-1"
}
resource "aws_wafv2_web_acl" "cloudfront_image_waf" {
name = "CloudfrontImageWAF"
description = "WAF for Cloudfront"
scope = "CLOUDFRONT"
provider = aws.us-east-1
default_action {
allow {}
}
// その他設定
tags = var.cloudfront_tags
visibility_config {
cloudwatch_metrics_enabled = false
metric_name = "CloudfrontImageWAFMetric"
sampled_requests_enabled = false
}
}
resource "aws_s3_bucket" "cloudfront_log_bucket" {
bucket = "aws-waf-logs-${var.cloudfront_bucket_name}"
tags = var.tags
}
resource "aws_wafv2_web_acl_logging_configuration" "cloudfront_log_config" {
log_destination_configs = ["${aws_s3_bucket.cloudfront_log_bucket.arn}"]
resource_arn = aws_wafv2_web_acl.cloudfront_image_waf.arn
logging_filter {
default_behavior = "KEEP"
filter {
behavior = "DROP"
condition {
action_condition {
action = "BLOCK"
}
}
requirement = "MEETS_ANY"
}
}
}
解決法
aws_waf
とaws_wafv2_web_acl_logging_configuration
のproviderを同じ値に指定しておくと解決した。なぜ解決したか説明ができず、自分の実力不足を痛感した。
修正(12/13)
aws_waf
とaws_wafv2_web_acl_logging_configuration
は同一リージョンのリソースでなければならない。
rakiさんより教えていただきました。
resource "aws_wafv2_web_acl_logging_configuration" "cloudfront_log_config" {
log_destination_configs = ["${aws_s3_bucket.cloudfront_log_bucket.arn}"]
resource_arn = aws_wafv2_web_acl.cloudfront_image_waf.arn
+ provider = aws.us-east-1
logging_filter {
default_behavior = "KEEP"
filter {
behavior = "DROP"
condition {
action_condition {
action = "BLOCK"
}
}
requirement = "MEETS_ANY"
}
}
}
参考
最後に
間違っていることがあればコメントに書いていただけると幸いです。
よろしくお願いいたします。
Discussion
aws_wafv2_web_acl_logging_configuration.cloudfront_log_config に
resource_arn = aws_wafv2_web_acl.cloudfront_image_waf.arn って書いているので、
aws_wafv2_web_acl_logging_configuration リソースは aws_wafv2_web_acl と同じリージョンにないとダメだから provider = aws.us-east-1 をつけたことで解消した、ということでしょう。
エラーメッセージにも us-east-1 のやつじゃないと、って書かれていますし。
短く言うなら acl と acl log conf は同じリージョンのリソースじゃないとダメ、ということです。
返信が遅くなり申し訳ございません。解決後にエラーメッセージを翻訳したらrakiさんの言う通りのことが書いてありました。お恥ずかしい限りです。コメントしていただきありがとうございました。