🌮

AWSでIAM関連のCloudTrail証跡をSlackに通知する

2022/03/01に公開

やりたいこと

CloudTrailの証跡での中で、なんとなくヤバそうなIAM関連の操作履歴をSlackに通知したい

CloudTrailとは?

https://aws.amazon.com/jp/cloudtrail/

AWS CloudTrail は、AWS インフラストラクチャ全体のアカウントアクティビティをモニタリングして記録し、ストレージ、分析、および修復アクションをコントロールできます。

つまり、開発者や管理者を監視できるエンジニアからすると嬉しくないサービスですね。

構成

  • 後半の SNS → Chatbot → Slack は、(私の中では)よくやる構成なので本記事で詳細には触れません

構築方法

CloudTrailの証跡をS3残す設定をする

CloudTrailのイベント履歴は、特に設定しなくてもコンソール上で見ることができます。
しかし、証跡を作成してS3に保存するようにしておかないと、通知を送ることもできません。
CloudTrailのダッシュボードから証跡を作成しておきましょう。

ChatbotとSNSを設定する

  • 米国東部 (バージニア北部) リージョンで、SNSトピックを作成してください。
  • Chatbotを設定して、SNSとSlackのチャンネルを連携させておいてください。

EventBridgeを設定する

参考

https://aws.amazon.com/jp/premiumsupport/knowledge-center/iam-eventbridge-sns-rule/?nc1=h_ls

設定

上記のリンク先に書いてある通りに進めればOKです。
なので、改めて書き直すことはせずにそのまま引用して貼り付けておきます。

  1. 米国東部 (バージニア北部) リージョンで EventBridge コンソールを開きます。
  2. ナビゲーションペインで [Rules] を選択し、続いて [Create rule] を選択します。
  3. [Define pattern] (パターンの定義) で [Event pattern] (イベントパターン) を選択します。
  4. [Event pattern matching] (イベントパターン一致) で、[Pre-defined pattern by service] (サービスごとの事前定義パターン) を選択します。
  5. [Service Name] (サービス名) ドロップダウンリストで、[IAM] を選択します。
  6. [Event Type] (イベントタイプ) ドロップダウンメニューで [AWS API Call via CloudTrail] (CloudTrail 経由での AWS API コール) を選択します。
  7. 特定の API コールのルールをスタートするには、[Specific operation(s)] (特定のオペレーション) をクリックします。
  8. テキストボックスに、IAM オペレーションの名前を入力します。例えば、CreateUser です。
  9. オペレーションを追加するには、+ のアイコンを選択します。
  10. [Event Pattern] (イベントパターン) で、[Edit] (編集) を選択します。
  11. 次のサンプルテンプレートをコピーして、イベントパターンのプレビューペインに貼り付け、[Save] (保存) を選択します。
{
    "source": [
        "aws.iam"
    ],
    "detail-type": [
        "AWS API Call via CloudTrail"
    ],
    "detail": {
        "eventSource": [
            "iam.amazonaws.com"
        ],
        "eventName": [
            "CreateUser",
            "DeleteUser"
        ]
    }
}
  1. [Targets] (ターゲット) で、[Add target] (ターゲットの追加) を選択します。
  2. [Select Target] (ターゲットを選択) で、[SNS topic] (SNS トピック) を選択します。
  3. [Topic] (トピック) ドロップダウンリストで、SNS トピックを選択します。
  4. [Configure details] (詳細の設定) を選択します。
  5. [Configure rule details] (ルール詳細の設定) でルールの名前と説明を入力し、[Create rule] ( ルールの作成) を選択します。

通知する項目を変更する

前項ではリンク先に従って、ユーザーの作成と削除の証跡を通知するように設定しました。
しかしユーザーを作っても権限がなければ何もできないですし、逆に既存ユーザーでも、強い権限をつければ多くのことができてしまいます。
ですので、ユーザーの作成ではなく権限付与に関するイベントを通知するように変更しました。
(何のイベントを通知するかは、ユースケースに合わせて判断してください。)

{
  "source": ["aws.iam"],
  "detail-type": ["AWS API Call via CloudTrail"],
  "detail": {
    "eventSource": ["iam.amazonaws.com"],
    "eventName": ["AttachUserPolicy", "AttachGroupPolicy", "AttachRolePolicy", "DetachUserPolicy", "DetachGroupPolicy", "DetachRolePolicy", "CreatePolicyVersion"]
  }
}

2023/02/08追記

通知イベントにCreatePolicyVersionを追加しました。

結果

試しに自分の権限を増やしたら、slackに通知が飛びました。
(内容にアカウント情報が含まれるのでモザイクをかけています)

NCDCエンジニアブログ

Discussion