AccountJoinedOrganization 等を Input transformer で整形し slack へと通知する設定

記事タイトルとURLをコピーする

セキュリティサービス部 佐竹です。
AWS アカウントが AWS Organizations(組織)に参加 or 離脱する時の CloudTrail イベントを監視し通知したいという運用で、Slack に可読性の高い通知を行う方法について記載します。

はじめに

2026年6月12日に投稿した以下のブログでは、組織への参加と離脱に関する新しいイベントを深堀して解説しました。

blog.serverworks.co.jp

本ブログは上記ブログ(AWS アカウントの新規作成や組織間の移動、解約等を EventBridge と SNS で Slack へ通知する)の続きになります。

先のブログの簡単な振り返り

一旦の結論としては以下の通りまとめました。

AWS Organizations におけるアカウント増減の監視は、新イベントの特性に合わせた設計が必要なことが判明しています。

まずアカウント増加の際は、新規作成(CREATED)か他組織からの移管(INVITED)かを問わず、リアルタイムに一元検知できる AccountJoinedOrganization のみを採用したシンプルな監視設計で十分に対応可能となっています。

一方アカウント減少の際は、組織からの離脱(LEFT/REMOVED)を即時検知できる反面、アカウント閉鎖(CloseAccount)に対しては90日間の猶予期間を経て完全削除(CLEANED)されるまで発報されないという仕様上のタイムラグがあります。

そのため、運用の現場で即時性を担保したい場合には、新イベント単体に依存せず従来通りの CloseAccountResult も併用する設計が求められ、ユースケースに応じた柔軟な使い分けがベストプラクティスとなりそうです。

監視の目的 監視すべきCloudTrailイベント
組織へのアカウント追加(作成&参加) AccountJoinedOrganization
組織からのアカウント削除(離脱&閉鎖) AccountDepartedOrganization
CloseAccountResult

Slack 通知では Input transformer で整形が必要な理由

さて、Amazon Q Developer in chat applications (AWS Chatbot) からの Slack への通知は、その可読性の高さからも運用としておすすめの通知方法です。

blog.serverworks.co.jp

上記の通り、以前「CreateAccountResult」の検出を正しく行えるように Input transformer の使い方をご紹介しました。

なぜ整形が必要なのか?

Slack への通知はフォーマットが決まっており、そのフォーマットに即していない通知は Slack へと正しく連携されないという制限があります。

基本的に AWS CloudTrail の出力する API Call は全て Slack へと正しく連携されます。

ですが、「CreateAccountResult」や「CloseAccountResult」、また今回追加されたイベントである「AccountJoinedOrganization」と「AccountDepartedOrganization」は、API Call の結果を返す「後続イベント」 として CloudTrail に返されます。

つまり"detail-type": ["AWS API Call via CloudTrail"] のものは何もしなくても Slack に連携が正しく行えるのですが、"detail-type": ["AWS Service Event via CloudTrail"] については、整形が必須となります。

実際 AccountJoinedOrganization をそのまま通知してみると、この通りになり、何も出力されていません。

よって、「Input transformer」の出番となります。

Input transformer を実際に設定してみる

設定方法の詳細は、先のブログ「CreateAccountResult を Input transformer で整形し正しく Slack へ連携されるようにする」に譲りまして、今回は実際の設定パラメータ(JSON)と、その設定でどのような通知が来るのかの画面キャプチャーを掲載していきます。

悪しからずご了承ください。

なお Amazon EventBridge のルールを設定するリージョンは仕様として「バージニアリージョン US East (N. Virginia) 」となります。

Configure input transformer

また今回、設定に重要となります「Event pattern」と、「Configure input transformer」における「Input path」と「Template」を掲載しています。

Notice-AccountJoinedOrganization

Event pattern

{
  "source": ["aws.organizations"],
  "detail-type": ["AWS Service Event via CloudTrail"],
  "detail": {
    "eventSource": ["organizations.amazonaws.com"],
    "eventName": ["AccountJoinedOrganization"]
  }
}

Input path

{
  "account": "$.account",
  "eventID": "$.detail.eventID",
  "eventName": "$.detail.eventName",
  "invokedBy": "$.detail.userIdentity.invokedBy",
  "joinedAccountId": "$.detail.serviceEventDetails.accountId",
  "joinedMethod": "$.detail.serviceEventDetails.joinedMethod",
  "region": "$.region",
  "source": "$.source",
  "time": "$.time"
}

Template

{
  "version": "1.0",
  "source": "custom",
  "content": {
    "textType": "client-markdown",
    "title": "<eventName>",
    "description": "Member Account: *<joinedAccountId>*\nManagement Account: *<account>*\nRegion: *<region>*\nTime: *<time>*\nEvent ID: *<eventID>*\nInvoked By: *<invokedBy>*\nSource: *<source>*\nMethod: *<joinedMethod>*"
  }
}

Notice-AccountDepartedOrganization

Event pattern

{
  "source": ["aws.organizations"],
  "detail-type": ["AWS Service Event via CloudTrail"],
  "detail": {
    "eventSource": ["organizations.amazonaws.com"],
    "eventName": ["AccountDepartedOrganization"]
  }
}

Input path

{
  "account": "$.account",
  "departedAccountId": "$.detail.serviceEventDetails.accountId",
  "departureMethod": "$.detail.serviceEventDetails.departureMethod",
  "eventID": "$.detail.eventID",
  "eventName": "$.detail.eventName",
  "invokedBy": "$.detail.userIdentity.invokedBy",
  "region": "$.region",
  "source": "$.source",
  "time": "$.time"
}

Template

{
  "version": "1.0",
  "source": "custom",
  "content": {
    "textType": "client-markdown",
    "title": "<eventName>",
    "description": "Member Account: *<departedAccountId>*\nManagement Account: *<account>*\nRegion: *<region>*\nTime: *<time>*\nEvent ID: *<eventID>*\nInvoked By: *<invokedBy>*\nSource: *<source>*\nMethod: *<departureMethod>*"
  }
}

Notice-CloseAccountResult

念のため、CloseAccountResult もこちらで取り扱います。

ただ CloseAccountResult については、過去記事でご紹介した EventBridge の標準構造に合わせた定義を踏襲しています。

Event pattern

{
  "source": ["aws.organizations"],
  "detail-type": ["AWS Service Event via CloudTrail"],
  "detail": {
    "eventSource": ["organizations.amazonaws.com"],
    "eventName": ["CloseAccountResult"]
  }
}

Input path

{
  "account": "$.account",
  "eventID": "$.detail.eventID",
  "eventName": "$.detail.eventName",
  "eventType": "$.detail.eventType",
  "id": "$.id",
  "region": "$.region",
  "source": "$.source",
  "state": "$.detail.serviceEventDetails.closeAccountStatus.state",
  "time": "$.time",
  "userAgent": "$.detail.userAgent"
}

Template

{
    "version": "0",
    "id": "<id>",
    "detail-type": "AWS API Call via CloudTrail",
    "source": "<source>",
    "account": "<account>",
    "time": "<time>",
    "region": "<region>",
    "resources": [],
    "detail": {
        "eventVersion": "1.08",
        "userIdentity": {
            "arn": "No ARN"
        },
        "userAgent": "<userAgent>",
        "eventTime": "<time>",
        "eventName": "<eventName>(<state>)",
        "awsRegion": "<region>",
        "eventID": "<eventID>",
        "eventType": "<eventType>"
    }
}

動作検証結果

実際に Slack に通知された場合に、上記の設定でどのような表示になるのかご紹介します。

本設定はあくまでサンプルでもありますため、必要な項目を追加・削除頂ければと存じます。

Notice-AccountJoinedOrganization

Notice-AccountJoinedOrganization

Notice-AccountDepartedOrganization

Notice-AccountDepartedOrganization

Notice-CloseAccountResult

Notice-CloseAccountResult

補足: CloudTrail に関する留意事項

以下のドキュメントにある通り、イベントを EventBridge 経由で発報し、通知するためには、CloudTrail の証跡が有効にされている必要があります。

CloudTrail の detail-type 値のいずれかを使用してイベントを記録するには、ログ記録を使用して CloudTrail の証跡を有効にする必要があります。

docs.aws.amazon.com

もし設定が正しくとも通知が行われないような場合には、CloudTrail の証跡が有効にされているのか念のため確認してください。

まとめ

今回は、AWS Organizations のアカウント増減にまつわる新イベント(および CloseAccountResult)を、Amazon Q Developer in chat applications (AWS Chatbot) を使って Slack へ綺麗に通知するための Input transformer の具体的な設定をご紹介しました。

今回ご紹介した Input transformer のテンプレートを活用し、運用担当者が一目で Slack から「どのアカウントが、どういう方法で参加/離脱したのか」を判別できる環境を整えておくことで、AWS Organizations のアカウント増減に関する監視運用がより楽に、漏れなくできるようになりました。

メンバーアカウントの増減はセキュリティやコストの観点でも非常に重要なイベントです。ぜひ本設定を仕込んで、通知と可読化の向上を目指してください。

この記事が皆さんの AWS Organizations 運用の参考になれば幸いです。

では、またお会いしましょう。

佐竹 陽一 (Yoichi Satake) エンジニアブログの記事一覧はコチラ

セキュリティサービス部所属。AWS資格全冠。2010年1月からAWSを業務利用してきています。主な表彰歴 2021-2022 AWS Ambassadors/2020-2025 Japan AWS Top Engineers/2020-2025 All Certifications Engineers。AWSのコスト削減やマルチアカウント管理と運用を得意としています。