この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
いわさです。
StackSetsで複数アカウントや複数のリージョンへCloudFormationスタックを作成することが可能です。
GuardDutyなどなど全リージョンを対象としたいリソースを一発で有効化したかったのですが、一部のリソースは対象リージョンを絞りたくなってきました。
CloudFormationのConditionsとAWSで事前定義されている疑似パラメータを使うことで実現できそうだなぁと思ったのですが、ドキュメントの条件関数のページには以下の記載があります。
これらの条件は、スタックを作成または更新するときに宣言する入力パラメーターに基づいて評価されます。
Parameters以外で評価出来ないのか?そうなのか?と思ったので、試してみました。
やりたいこと
GuardDuty, IAM AccessAnalyzer, Personal Health Dashboard, CloudTrail Insights の通知を受信するために それぞれのCloudWatchイベントルールを作成します。
メインのリソースは東京リージョンにのみしかありませんが、予防措置であることから以下を参考に必要に応じて対象リージョンを広くしたいと思います。
また、Personal Health Dashboard(PHD)についてはグローバルイベント受信のために東京リージョン+バージニア北部を対象としたいと思います。
一部の AWS Health Eventはリージョン固有ではなく、AWS Identity and Access Management (IAM) に送信されるイベントなど、グローバルです。グローバルイベントを受信するには、米国東部 (バージニア北部) リージョンのルールを作成する必要があります。
ということで、今回は以下のように設定してみようと思います。
サービス | リージョン |
---|---|
GuardDuty | 全リージョン |
IAM AccessAnalyzer | 全リージョン |
Personal Health Dashboard | 東京リージョン, バージニア北部 |
CloudTrail Insights | 東京リージョン |
テンプレート
StackSetsで全リージョンを選択すると想定して、基本的に全リージョンでGuardDutyとIAM AccessAnalyzerを適用し、PHD用のイベントは東京リージョンとバージニア北部へ、CloudTrailInsightsは東京リージョンのみ作成するように、Conditionsセクションでリージョンの判定を行いました。
なお、以下のテンプレートは事前に"iwasa-topic"というSNSトピックのエクスポート出力が存在する前提になっていますので適宜変更してください。
AWSTemplateFormatVersion: '2010-09-09'
Description: Event Rules
Conditions:
PhdTargetRegion:
!Or [!Equals [!Ref AWS::Region, ap-northeast-1], !Equals [!Ref AWS::Region, us-east-1]]
TrailInsightTargetRegion:
!Equals [!Ref AWS::Region, ap-northeast-1]
Resources:
GuardDutyRule:
Type: AWS::Events::Rule
Properties:
Name: iwasa-guardduty-rule
EventPattern:
source:
- "aws.guardduty"
detail-type:
- "GuardDuty Finding"
Targets:
- Arn:
Fn::ImportValue: iwasa-topic
Id: iwasa-guardduty-target
IamAccessAnalyzerRule:
Type: AWS::Events::Rule
Properties:
Name: iwasa-accessanalyzer-rule
EventPattern:
source:
- "aws.access-analyzer"
detail-type:
- "Access Analyzer Finding"
Targets:
- Arn:
Fn::ImportValue: iwasa-topic
Id: iwasa-accessanalyzer-target
PhdRule:
Type: AWS::Events::Rule
Condition: PhdTargetRegion
Properties:
Name: iwasa-phd-rule
EventPattern:
source:
- "aws.health"
detail-type:
- "AWS Health Event"
Targets:
- Arn:
Fn::ImportValue: iwasa-topic
Id: iwasa-phd-target
TrailInsightRule:
Type: AWS::Events::Rule
Condition: TrailInsightTargetRegion
Properties:
Name: iwasa-trailinsight-rule
EventPattern:
source:
- "aws.cloudtrail"
detail-type:
- "AWS Insight via CloudTrail"
Targets:
- Arn:
Fn::ImportValue: iwasa-topic
Id: iwasa-trailinsight-target
実行結果
アジアパシフィック(東京)
米国東部(バージニア北部)
米国東部(オハイオ)
まとめ
ConditionsセクションでAWS事前定義の疑似パラメータでも問題なく条件に利用することが出来ました。
ひとつのテンプレートで複数のリージョン条件を混在させる必要がある際には試してみてください。