WebACLAssociation를 사용하여 AWS WAF와 Amazon CloudFront 연동 시 발생하는 문제 해결

WebACLAssociation를 사용하여 AWS WAF와 Amazon CloudFront 연동 시 발생하는 문제를 해결하는 방법에 대해서 정리해 봤습니다.
2024.06.11

안녕하세요 클래스메소드 김재욱(Kim Jaewook) 입니다. 이번에는 WebACLAssociation를 사용하여 AWS WAF와 Amazon CloudFront 연동 시 발생하는 문제를 해결하는 방법에 대해서 정리해 봤습니다.

문제 발생

The ARN isn't valid. A valid ARN begins with arn: and includes other information separated by colons or slashes

AWS WAF와 Amazon CloudFront를 연동하기 위해 WebACLAssociation를 사용하여 AWS WAF 생성을 시도하면 유효하지 않는 ARN이라고 출력되며 스택 생성에 실패합니다.

  SampleWebACLAssociation:
    Type: 'AWS::WAFv2::WebACLAssociation'
    Properties:
      WebACLArn: ExampleARNForWebACL
      ResourceArn: ExampleARNForRegionalResource

샘플 예제를 보면 ResourceArn에 CloudFront의 ARN을 가져오면 해결될 것 같지만 정확하게 CloudFront의 ARN을 지정해도 유효하지 않는 ARN이라고 에러가 발생합니다.

문제 해결

For Amazon CloudFront, don't use this resource. Instead, use your CloudFront distribution configuration. To associate a web ACL with a distribution, provide the Amazon Resource Name (ARN) of the AWS::WAFv2::WebACL to your CloudFront distribution configuration

공식 문서를 조금 확인해 보면 WebACLAssociation은 CloudFront에 사용하지 말라는 문구를 확인할 수 있습니다.

AWS WAF와 Amazon CloudFront를 연동하기 위해서는 WAF에서 WebACLAssociation을 사용하는 것이 아니라 CloudFront에서 WebACLId를 사용할 필요가 있습니다.

  CloudFrontDistribution:
    Type: "AWS::CloudFront::Distribution"
    Properties:
      DistributionConfig:
        WebACLId: !ImportValue WebACLARN

WebACLId는 CloudFront::Distribution을 생성할 때 DistributionConfig 옵션 값으로 넣어줄 수 있습니다.

AWS WAF의 ARN을 지정하기만 하면 끝입니다.

WebACLId를 사용하여 Amazon CloudFront를 생성한 다음, AWS WAF를 확인해 보면 성공적으로 연동되었음을 확인할 수 있습니다.

본 블로그 게시글을 읽고 궁금한 사항이 있으신 분들은 kis2702@naver.com로 보내주시면 감사하겠습니다.