[CloudFormation] WAFv2(SCOPE: CLOUDFRONT)をIaC化する際に発生するリージョン問題について

AWSでCloudFront Distributionに関連付けるWAFv2リソースをCFnテンプレート化する際の注意点についてのメモ

発生する事象

  • CFnテンプレートの書式が正しくても、CFnを実行するリージョンによって以下のエラーが発生する
    1
    2
    3
    Error reason: The scope is not valid., 
    field: SCOPE_VALUE, parameter:
    CLOUDFRONT (Service: Wafv2, Status Code: 400, Request ID: ...

原因: WAFv2のSCOPE: CLOUDFLONT

  • WAFv2はSCOPEによって、us-east-1にしか生成できないことがある

    • CloudFormation Distributionに関連づけるWAFはコンソールであれば、Globalとするが、実体はus-east-1に生成される
    • CFnでは”SCOPE”というプロパティで、WAFv2がCloudFront向けか、各リージョンに生成するか定義する
      • 以下のように定義した場合、cloudFront Distributionにアタッチ可能なWAFv2リソースとなるが、
        1
        Scope: "CLOUDFRONT"
  • SCOPEについてのルールは公式ドキュメントに以下のように書かれていた

    1
    CLOUDFRONT の場合、米国東部 (バージニア北部) リージョン (us-east-1) で WAFv2 リソースを作成する必要があります。
  • CloudFormtationは選択中のリージョンで実行される

    • SCOPE: CLOUDFRONTのWAFv2リソースがあれば、us-east-1で実行する必要がある
    • 同じテンプレートで定義した他のリソース群も、us-east-1に生成されてしまう
      • 払い出せるリージョンが実質ロックされるので、汎用性が欠けたテンプレートになってしまう…

回避策

以下が考えられる

  • テンプレートの分割
    • WAFv2リソースのみ別にする
      • CloudFront Distributionとの関連付けが面倒ではある
  • us-east-1専用テンプレートとしてルール付けする

同様の問題を経験した人も多いはずなので、そのうちAWS側で解消されるかもしれない

参考

関連記事

@EventEmitter @Input @Output @ViewChild ACM AMP API Gateway AR AR.js AR.js Studio AWS AWS Amplify AWS Budgets AWS Cost Explorer AWS SDK for JavaScript AddThis Adobe XD Alexa Amazon CloudWatch Amazon Honycode Amazon SNS Android Angular Angular Material AngularFire AppSync Augury C CDN CI/CD Cloud Craft Cloud9 CloudFormation CloudFront CloudTrail Cognito Cost Anomaly Detection Cubase ai Cubasis LE DTM Disqus DynamoDB Elgato HD 60S Firebase Firebase Hosting Former2 Github Github Actions Github.com GithubEnterprise GithubPages Google Chrome Google Cloud Shell GraphQL Hexo Hosting IAM Ionic JSON JavaScript LadioCast Logging LowCode MFA MS Authentication MacBook Pro 16 Mind Node NETDUETTO Netflix Party Netlify Network NoCode Observable PO PdM Promise RPA ReactiveForm Recognition Route53 S3 SAM(Serverless Application Model) SAR SSL SYNCROOM Schematics ScrumInc Serverless Service Siri Sitemap Spark AR Steinberg UR44C Teams Touch Cast Studio Treetable TypeScript UI UI Bakery WAF WAFv2 WEB Page Dev WEB会議 WebAR WebSocketAPI Webhook Windows Power Automate Wireshark aot async/await aws config cloud9 display.land draw.io e2e test filter() forkJoin() google search console hexo-generator-amp iOS iPad Pro iPhone icarus map() mat input mat tree mat-checkbox mat-input mat-selection-list mmhmm ngFor plantUML popIn Aladdin2 then() vscode ”global is not defined” らくがきAR アジャイル アジャイル開発 クロスプラットフォーム ショートカット スクラム スクラム開発 テレワーク ファイル操作 ブラウザ型IDE プロダクトオーナー プロダクトマネージャー プロトタイピング リモートセッション 共同開発 双方向データバインディング 待ち合わせ処理 認定スクラムマスター 静的WEB Hosting 静的WEBサイトHosting
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×