発端
CloudWatch Events を使って、AWSマネジメントコンソールへのIAMユーザーのログイン失敗を検知していました。
ですが、どうやら「非存在ユーザー」のログイン失敗を検知できなくなっているようです。ここ1〜2ヶ月の間に。
というわけで、目的↓
目的
IAMユーザーのマネジメントコンソールログイン時、成功/失敗でそれぞれどのようなイベントが発生するかを確認する。
調査方法
CloudWatch Events で SignIn のイベントを検知し、Lambdaに流してログ出力します。
※以前のイベントパターンとの比較もできればよかったのですが、わかりやすくログを残してない&遡って調べる気力は無いので、やりません。
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}
となる。
- MFAが設定されていれば、入力したワンタイムパスワードが正しくても誤っていても
-
eventName : ConsoleLogin
は- IAMユーザーが存在しない場合は発生しない。(以前は発生していたはず!)
- パスワード認証とMFA認証のどちらが誤であっても結果は
responseElements : {ConsoleLogin:Failure}
- それ以外(必要な認証方法すべてが正)の場合に
responseElements : {ConsoleLogin:Success}
フローチャートも作ってみようと思いましたが、ちょっと面倒だったのでやめました。
IAMユーザーあり&MFA設定なしの場合に何故 Success
でイベントが発生しないのかがイマイチ釈然としない。
ログイン失敗を検知したかったら
下記の判定を行えばよさそうです。
responseElements.CheckMfa = Failure
or
responseElements.ConsoleLogin = Failure