📚

Organizationsを利用したAWS Health通知の集約

2024/07/17に公開

概要

  • 背景
    • どのシステムでも障害情報の通知は要求される
    • AWSを利用していると往々に複数アカウントを活用する
    • 利用しているアカウントの障害情報を集約の上通知したいという願望があるが全アカウントに通知機構を作りこむのは効率的ではないし抜けもれリスクもある
  • 対応
    • Organizationsを利用している場合はアカウント委任を実施して障害情報集約が可能

構成

  • 今回通知までSNSによる通知を想定して実装してみる
  • アカウント間の集約→Organizations
  • リージョン間の通知の集約→EventBus

やってみる

1. 委任アカウントの設定

  • organizationsの管理アカウントへログイン
  • AWS Healthの組織ビューの有効化
  • (任意)委任先アカウントを指定
    • 必要に応じで集約先のアカウントを変更する
    • 以下コマンド発行

https://docs.aws.amazon.com/health/latest/ug/aggregate-events.html

aws organizations register-delegated-administrator --account-id ACCOUNT_ID --service-principal  health.amazonaws.com

  • この時点でOrg配下のアカウントの障害情報が一覧化できるようになります

2. EventBridgeのリソースを作成する

  • 前提

    • 集約リージョン以外の構築はStacksetsで効率化できると思います
    • ある程度汎用的なCfnのコードだけこちらでは紹介します
  • EventBridgeリソース @ 集約リージョン

AWSTemplateFormatVersion: "2010-09-09"
Description: "EventBridge bus"

Resources:
  # EventBridge Bus(Custom) @ 集約リージョン
  CustomEventBus:
    Type: "AWS::Events::EventBus"
    Properties:
      Name: evb-bus-custom 


# EventBridge Rule(default bus) @ 集約リージョン
  HealthEvent:
    Type: AWS::Events::Rule
    Properties: 
      Description: "health dashboard event logging"
      EventBusName: "default"
      EventPattern: 
        source:
          - "aws.health"  
      Targets: 
        - Arn: [SNS-Arn]
          Id: SNS
      Name: evb-rule-health

  # EventBridge Rule(Custome bus) @ 集約リージョン
  HealthScheduledChangeOtherRegion:
    Type: "AWS::Events::Rule"
    Properties:
      Description: "SNS topic rule from AWS Health events Information of Scheduled Change in Custom EventBus"
      EventBusName: !Ref CustomEventBus
      EventPattern:
        source:
          - "aws.health"
      Name: evb-rule-health-OtherRegion
      State: "ENABLED"
      Targets: 
        - Arn: [SNS-Arn]
          Id: SNS

  • EventBridgeリソース @ 集約リージョン以外
AWSTemplateFormatVersion: "2010-09-09"
Description: EventBridge Config

Resources:
  HealthEvent:
    Type: AWS::Events::Rule
    Properties: 
      Description: "health dashboard event logging"
      EventBusName: "default"
      EventPattern: 
        source:
          - "aws.health"  
      Targets: 
        - Arn:[EventBus(Custom)のArn]
          Id: CustomEventBus
          RoleArn: [EventBus(Custom)にアタッチするIAMロールArn]
      Name: evb-rule-health

3. 通知テスト

  • AWS Healthのテストイベントはサポート経由で作れるので試験が必要な際には活用できる

https://repost.aws/ja/knowledge-center/health-event-test

Discussion