はじめに
こんにちは、クマ松です。
不正なログインや異常なアクティビティを即座に検知することは、AWSアカウントのセキュリティを確保するためには重要ですよね。
AWS CloudTrailとAmazon CloudWatch Logs、そしてAmazon SNSを組み合わせて、不正なAPIコールを監視している人も居るのではないでしょうか。今回はこの構成の注意点と、代替案をご紹介します。
結論
- AWS CloudTrailの操作ログがAmazon CloudWatch Logsに出力されるまでに15分かかることがあるため、迅速に何らかの異常操作を検知したい場合には不向きな構成
- 不正な操作を迅速に検知したい場合はAmazon EventBridgeまたはAmazon GuardDutyを利用するのがおススメ
AWS CloudTrailとAmazon CloudWatch Logsを組み合わせた監視の仕組み
AWS CloudTrail→Amazon CloudWatch Logsへのログ配信
AWS CloudTrailを使えば、AWSサービスの操作履歴を証跡として残すことができます。 AWS CloudTrailはAmazon S3やAmazon CloudWatch Logsへの出力をサポートしており、証跡ログのモニタリングをすることが可能です。
(引用元:20210119 AWS Black Belt Online Seminar AWS CloudTrail)
ログ上に特定の文字列が出力されたらメールを配信
Amazon CloudWatch Logsのメトリクスフィルタという機能を使うことで、ログに特定の文字列が検知されたらAmazon SNSでユーザにメールを配信することが可能です。
(引用元:20210119 AWS Black Belt Online Seminar AWS CloudTrail)
アカウントアクティビティ発生からアラート配信まで最大15分かかることも・・・
AWS CloudTrailの証跡ログの出力は通常15分以内に配信する仕様です。
前述の「モニタリング例」の①の時点で15分かかった場合、当然ユーザがメールを受け取るまで15分かかります。
(引用元:20210119 AWS Black Belt Online Seminar AWS CloudTrail)
「不正なAPI呼び出し」や「MFAなしでのコンソールへのサインイン」、「ルートアカウントの使用」等、すぐにでも検知したいようなアカウント操作を監視する場合はこの設定では遅すぎるかもしれません。
Amazon EventBridgeによるアラート通知
Amazon EventBridgeを使うことで、AWS APIコールが発生した瞬間にイベントを検知し、指定したアクションを実行することが可能です。
(引用元:20200122 AWS Black Belt Online Seminar Amazon EventBridge)
例:MFAを使わずにログインしたアカウントの検知 例
一つ、試しにAmazon EventBridgeでイベントを検知してみましょう。
Amazon EventBridgeの画面から [バス] を選択し、イベントバスで[default]が選択されていることを確認のうえ、 [ルールを作成] を押します。
ルールの詳細を定義では [イベントバターンを持つルール] を選択します。
イベントパターンに以下のJSONを挿入し、「次へ」を押します。
{
"detail-type": ["AWS Console Sign In via CloudTrail"],
"detail": {
"eventName": ["ConsoleLogin"],
"additionalEventData": {
"MFAUsed": ["No"]
}
}
}
ターゲットにはAmazon SNSを追加します。
※事前にメール配信用のSNSトピックを準備しておきましょう
次ページのタグの設定は不要ですので、「ルールの作成」を押します。
その後、MFAを利用していないユーザでログインをすると、10秒以内にメールが飛んできます。
Amazon EventBridgeによる監視のデメリット
AWSサービスのイベントが発生したことをAmazon EventBridgeとAmazon SNSで検知したい場合、前述のとおり監視をしたい内容をイベントパターンでどのように定義するか、調査しなくてはいけません。
これは面倒ですね。
GuardDutyによる検知
Amazon GuardDutyを使えば、AWSアカウントへの脅威の検知を簡単に設定できます。Amazon EventBridgeのイベントパターンに詳しくなる必要はありません。Amazon GuardDutyを有効化すると、セキュリティ上の脅威を検出してくれます。
脅威の検出結果は上記と同じくAmazon EventBridgeとAmazon SNSでアラートの配信をすることができます。
Amazon GuardDutyにより検出された脅威をメールで確認するための設定
Amazon GuardDutyでは、検出された脅威(Fingings)を重要度「高/中/低」に応じて分類してくれるため、Amazon EventBridge側で「重要度 中以上の脅威が検出された場合のみアラートを配信する」という設定をすることができます。
(引用元:【AWS Black Belt Online Seminar】Amazon GuardDuty)
{
"source": ["aws.guardduty"],
"detail-type": ["GuardDuty Finding"],
"detail": {
"severity": [{
"numeric": [">=", 7.0]
}]
}
}
この機能を使えば、一つ一つの脅威に対してAmazon EventBridgeを作成する必要がなくなりますね。
Amazon EventBridgeでは、特定のAWS APIが操作された場合のみネクストアクションを起こすことができますが、Amazon GuardDutyは「悪意のあるIPアドレス、通常操作とは異なる何らかの異常の検出、機械学習などの統合脅威インテリジェンス」を使用した脅威検出をしてくれるため、「どのような脅威を検知したい」とユーザが事前に具体的に定義する必要がないところも良い点です。
もちろん、特定の検出結果だけアラートを配信する設定を入れることもできます。
{
"source": ["aws.guardduty"],
"detail-type": ["GuardDuty Finding"],
"detail": {
"type": ["UnauthorizedAccess:IAMUser/RootCredentialUsage"]
}
}
おわりに
いかがでしたでしょうか。
AWS CloudTrailのメトリクスフィルタを使った監視を利用しているユーザの皆さんの参考になりますと嬉しいです。