AWS
IAM

[AWS] マネジメントコンソールへのIAMユーザーログイン時に発生するイベント

発端

CloudWatch Events を使って、AWSマネジメントコンソールへのIAMユーザーのログイン失敗を検知していました。
ですが、どうやら「非存在ユーザー」のログイン失敗を検知できなくなっているようです。ここ1〜2ヶ月の間に。
というわけで、目的↓

目的

IAMユーザーのマネジメントコンソールログイン時、成功/失敗でそれぞれどのようなイベントが発生するかを確認する。

調査方法

CloudWatch Events で SignIn のイベントを検知し、Lambdaに流してログ出力します。
※以前のイベントパターンとの比較もできればよかったのですが、わかりやすくログを残してない&遡って調べる気力は無いので、やりません。

AWS-Login-Event_Architecture.png

CloudWatch Event Rule のイベントパターン

{
  "detail-type": [
    "AWS Console Sign In via CloudTrail"
  ]
}

調査パターン&結果

この表で伝わるでしょうか・・・。2行目までヘッダです。

IAMユーザー 認証 結果(発生イベントから抜粋)
ユーザー有無 MFA設定 パスワード MFA 結果 eventName responseElements
非存在 - - - ×NG CheckMfa {CheckMfa:Failure}
存在 なし ◯正 - ◯OK ConsoleLogin {ConsoleLogin:Success}
×誤 - ×NG ConsoleLogin {ConsoleLogin:Failure}
あり ◯正 ◯正 ◯OK CheckMfa {CheckMfa:Success}
ConsoleLogin {ConsoleLogin:Success}
×誤 ×NG CheckMfa {CheckMfa:Success}
ConsoleLogin {ConsoleLogin:Failure}
×誤 ◯正 ×NG CheckMfa {CheckMfa:Success}
ConsoleLogin {ConsoleLogin:Failure}
×誤 ×NG CheckMfa {CheckMfa:Success}
ConsoleLogin {ConsoleLogin:Failure}

まとめ

  • MFA設定があるIAMユーザーのみ、イベントが2つ発生する。
  • eventName : CheckMfa イベントは
    • MFAが設定されていれば、入力したワンタイムパスワードが正しくても誤っていても responseElements : {CheckMfa:Success} となる。
    • IAMユーザーが存在しない場合のみresponseElements : {CheckMfa:Failure} となる。
  • eventName : ConsoleLogin
    • IAMユーザーが存在しない場合は発生しない。(以前は発生していたはず!)
    • パスワード認証とMFA認証のどちらが誤であっても結果は responseElements : {ConsoleLogin:Failure}
    • それ以外(必要な認証方法すべてが正)の場合に responseElements : {ConsoleLogin:Success}

フローチャートも作ってみようと思いましたが、ちょっと面倒だったのでやめました。
IAMユーザーあり&MFA設定なしの場合に何故 Success でイベントが発生しないのかがイマイチ釈然としない。

ログイン失敗を検知したかったら

下記の判定を行えばよさそうです。

responseElements.CheckMfa = Failure
  or
responseElements.ConsoleLogin = Failure