本番運用だと無効化することもないと思ったので、参考までに無効化までやってみます。
1.Amazon GuardDuty とは
GuardDuty は、AWS 上で発生しているログを自動的に収集し、機械学習や、悪意のある IP アドレスやドメインのリストなどの脅威インテリジェンスフィードを利用して、怪しい動きを検知する。
Amazon GuardDuty 脅威検知のために使用するログは以下の6種類。
- AWS CloudTrail イベントログ
- AWS CloudTrail 管理イベント
- AWS CloudTrail S3 データイベント
- VPC フローログ
- DNS ログ
- Kubernetes 監査ログ(New!)
2.設定
基本有効化するだけ。GuardDutyを有効化すれば、上記のログが内部的に自動で収集開始される。
ただし、GuardDutyが内部的に生成・検出したログはユーザがコンソール上から閲覧することができないため、インシデント発生時にGuardDuty画面からしかログの参照ができない。このため、VPC フローログ、 Cloud Trail 監査ログは自身で別途有効化しておくことが推奨される模様。S3 バケットにエクスポートすることもできる。
2-1.有効化
GuardDuty はリージョナルサービスのため、有効化するリージョンをしっかり確認して設定を始める。
今回は東京リージョンで設定する。
GuardDutyが各種ログを収集するためのアクセス権限はここで確認できる。
有効化する。
上部にリリース情報が記載されているが、閉じてよい。
2-2.S3 バケットへのエクスポート
S3 バケットへのエクスポートが推奨されているため設定する。
[設定]-[結果のエクスポートオプション]
更新された結果の頻度は以下から選択できるが、検証環境なので15分ごとにエクスポートさせてみる。
- 6時間ごとに CWE と S3 を更新する
- 1時間ごとに CWE と S3 を更新する
- 15分ごとに CWE と S3 を更新する
GuardDuty用にS3 バケットを新たに作成する。
- バケット名:ユニークである必要がある。アンダーバーは使えない。
- プレフィックス:
<AWSアカウントID>/GuardDuty/<リージョン名>
とした。
KMS キーがないので作成する必要がある。
[KMS コンソールに移動して新しいキーを作成する]をクリックすると、KMS のマネジメントコンソール(カスタマー管理型のキー)に飛ぶので、[キーの作成]からKMS キーを作成する。
キーのタイプは「対象」を選択し、その他はデフォルトで[次へ]をクリックする。
[エイリアス]を入力する。その他の項目は任意で設定し[次へ]をクリックする。
[キー管理のアクセス許可を定義]は何もせず[次へ]をクリックする。(後で設定する)
[キーの使用アクセス許可を定義]は何もせず[次へ]をクリックする。(後で設定する)
[完了]をクリックする。
2-3.KMS キーのキーポリシーを設定する
GuardDutyの[設定]画面で探知機 ID (SourceDetectorID)をコピーしておく。
KMS の カスタマー管理型のキー画面に戻り、ARNをコピーしておく。[キーポリシー]タブで[ポリシービューへの切り替え]をクリックする。
[編集]をクリックする。
デフォルトのキーポリシーに、次のステートメントを "Statements": セクションに追加する。
-
"Resource"
:コピーしておいた KMS キーのARN -
"aws:SourceAccount"
:対象AWSアカウントID -
"aws:SourceArn"
:コピーしておいたGuardDutyの探知機 ID (SourceDetectorID)
{
"Sid": "AllowGuardDutyKey",
"Effect": "Allow",
"Principal": {
"Service": "guardduty.amazonaws.com"
},
"Action": "kms:GenerateDataKey",
"Resource": "arn:aws:kms:Region:111122223333:key/KMSKeyId",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "111122223333",
"aws:SourceArn": "arn:aws:guardduty:Region:111122223333:detector/SourceDetectorID"
}
}
}
[変更の保存]をクリックする。
任意でキーローテーションを有効にする。
GuardDutyの画面に戻り、作成した KMS キーを設定して[保存]をクリックする。
S3 バケットへの GuardDuty 結果のエクスポート設定が完了した。
S3 の AWS マネジメントコンソール画面を見ると、S3 バケットが作成されている。
3.サンプル生成
何も検出結果がないが、サンプルを生成することでどんなアクティビティが検出されるか確認できる。
[設定]-[結果サンプルの生成]をクリックすると、サンプル結果が生成される。
サンプル結果詳細まですべて理解する必要はなく、インシデント発生時に確認すればよい。
GuardDutyで検出できる結果の見方については以下を参照。
(サンプル内容についてはあとで書けたら書く。)
4.検出結果のフィルタリング
結果についてはフィルタ機能があり、特定のインスタンスやVPCについて絞り込んで表示することができる。
今回は重要度低のサンプルに絞って表示してみる。
12/102件の検出結果に絞れた。
検出結果を調査したのち、大きな問題ではないと判断できたら、その検出結果をアーカイブすることができる。
アーカイブした検出結果は[アーカイブ済み]から閲覧できる。
検出結果をエクスポートすることもできる。フィルタして必要な検出結果を表示・選択し、JSON形式でエクスポートする。
GuardDutyを有効化してから30日間は無料で使用できる。この30日間の間は料金がかからないが、どれくらいのコストがかかるかの情報は収集してくれていて、以下の[使用状況]画面で確認できるので、無料利用期間の間にどれくらいのコストがかかるか試算できる。
5.GuardDuty の停止と無効化
5-1.GuardDuty の停止
[設定]から GuardDuty の停止ができる。GuardDuty の停止はモニタリングが停止するだけで、既存の検出結果はそのまま残る。
[停止]をクリックする。
「GuardDuty が停止されています」というメッセージが出る。「再有効化」をクリックして再有効化することもできる。
5-2.GuardDuty の無効化
[設定]から GuardDuty の無効化ができる。GuardDuty の無効化は既存の検出結果もすべて消えてなくなる。検出結果のデータが必要な場合は、S3 バケットへのエクスポートを有効化しておくか、マネジメントコンソール画面上からエクスポートしておく。
[無効化]をクリックする。
初期画面に戻る。
[今すぐ始める]から再度有効化すると、今までのサンプル検出結果もすべて消えているのがわかる。
6.Organizations の管理アカウントとメンバーアカウントの画面の違い
Organizations の管理アカウントでGuardDutyの画面を見ると「委任された管理者」に、GuardDutyの管理を任せる AWS アカウント ID を設定することができる。
Organizations 内のアカウントで、セキュリティ管理のためのアカウントを保持している場合、Organizations 管理アカウントではなくセキュリティ管理アカウントに GuardDuty の管理を任せた方が適切な場合もあるため、マルチアカウントで運用している場合はうまく活用できるとよい。
感想
KMS と S3 の設定部分がやや時間かかる印象です。
参考