Amazon GuardDutyの検出設定について。CloudTrail、DNSLogs、FlowLogsだけを有効とする方法。
前提
GuardDutyを有効化すると、デフォルトで保護プランのS3 Protectionなども有効化される。この際、GuardDutyを有効化&CloudTrail(AWS API のイベントログを監視)、DNS Logs(不審な DNS クエリを検出)、Flow Logs(ネットワークトラフィックの異常を監視)も有効化、他の設定は無効化状態としたい。これをCloudFormationで実現する方法を調べた。
IaCジェネレーターでデフォルト状態の設定をテンプレート化する
そもそもコンソールでGuardDutyを有効化した後、どのような設定になっているかをチェックしたかったので、IaCジェネレーターのスキャン→テンプレート作成を実施した。出力されたテンプレートの内容がこちら。
Metadata:
AWSToolsMetrics:
IaC_Generator: "arn:aws:cloudformation:ap-northeast-1:xxxxxxxxxxxx:generatedTemplate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Resources:
GuardDutyDetectorxxxxxxxxxxxxxxxxxxxxxxxxx:
UpdateReplacePolicy: "Delete"
Type: "AWS::GuardDuty::Detector"
DeletionPolicy: "Delete"
Properties:
FindingPublishingFrequency: "SIX_HOURS"
Enable: true
DataSources:
MalwareProtection:
ScanEc2InstanceWithFindings:
EbsVolumes: true
S3Logs:
Enable: true
Kubernetes:
AuditLogs:
Enable: true
Features:
- Status: "ENABLED"
Name: "CLOUD_TRAIL"
- Status: "ENABLED"
Name: "DNS_LOGS"
- Status: "ENABLED"
Name: "FLOW_LOGS"
- Status: "ENABLED"
Name: "S3_DATA_EVENTS"
- Status: "ENABLED"
Name: "EKS_AUDIT_LOGS"
- Status: "ENABLED"
Name: "EBS_MALWARE_PROTECTION"
- Status: "ENABLED"
Name: "RDS_LOGIN_EVENTS"
- Status: "DISABLED"
AdditionalConfiguration:
- Status: "DISABLED"
Name: "EKS_ADDON_MANAGEMENT"
Name: "EKS_RUNTIME_MONITORING"
- Status: "ENABLED"
Name: "LAMBDA_NETWORK_LOGS"
- Status: "DISABLED"
AdditionalConfiguration:
- Status: "DISABLED"
Name: "EKS_ADDON_MANAGEMENT"
- Status: "DISABLED"
Name: "ECS_FARGATE_AGENT_MANAGEMENT"
- Status: "DISABLED"
Name: "EC2_AGENT_MANAGEMENT"
Name: "RUNTIME_MONITORING"
Tags: []
DataSources:やFeatures:を見ると所々ENABLEDになっている。
テンプレートを手直しする
手直ししたものがこちら。
Resources:
GuardDutyEssentialDetector:
Type: "AWS::GuardDuty::Detector"
Properties:
FindingPublishingFrequency: "SIX_HOURS"
Enable: true
Features:
- Status: "DISABLED"
Name: "S3_DATA_EVENTS"
- Status: "DISABLED"
Name: "EKS_AUDIT_LOGS"
- Status: "DISABLED"
Name: "EBS_MALWARE_PROTECTION"
- Status: "DISABLED"
Name: "RDS_LOGIN_EVENTS"
- Status: "DISABLED"
Name: "LAMBDA_NETWORK_LOGS"
- Status: "DISABLED"
AdditionalConfiguration:
- Status: "DISABLED"
Name: "EKS_ADDON_MANAGEMENT"
- Status: "DISABLED"
Name: "ECS_FARGATE_AGENT_MANAGEMENT"
- Status: "DISABLED"
Name: "EC2_AGENT_MANAGEMENT"
Name: "RUNTIME_MONITORING"
Tags:
- Key: Environment
Value: test
上記コードのyamlファイルでCloudFormationのスタックを作成。
作成後、AWS CLIコマンドでGuardDutyのDataSources:とFeatures:の設定値を確認する。
~ $ aws guardduty get-detector --detector-id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --query "DataSources"
{
"CloudTrail": {
"Status": "ENABLED"
},
"DNSLogs": {
"Status": "ENABLED"
},
"FlowLogs": {
"Status": "ENABLED"
},
"S3Logs": {
"Status": "DISABLED"
},
"Kubernetes": {
"AuditLogs": {
"Status": "DISABLED"
}
},
"MalwareProtection": {
"ScanEc2InstanceWithFindings": {
"EbsVolumes": {
"Status": "DISABLED"
}
}
}
}
~ $
~ $ aws guardduty get-detector --detector-id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx --query "Features"
[
{
"Name": "CLOUD_TRAIL",
"Status": "ENABLED",
"UpdatedAt": "2025-02-08T10:26:00+00:00"
},
{
"Name": "DNS_LOGS",
"Status": "ENABLED",
"UpdatedAt": "2025-02-08T10:26:00+00:00"
},
{
"Name": "FLOW_LOGS",
"Status": "ENABLED",
"UpdatedAt": "2025-02-08T10:26:00+00:00"
},
{
"Name": "S3_DATA_EVENTS",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
},
{
"Name": "EKS_AUDIT_LOGS",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
},
{
"Name": "EBS_MALWARE_PROTECTION",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
},
{
"Name": "RDS_LOGIN_EVENTS",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
},
{
"Name": "EKS_RUNTIME_MONITORING",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00",
"AdditionalConfiguration": [
{
"Name": "EKS_ADDON_MANAGEMENT",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
}
]
},
{
"Name": "LAMBDA_NETWORK_LOGS",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
},
{
"Name": "RUNTIME_MONITORING",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00",
"AdditionalConfiguration": [
{
"Name": "EKS_ADDON_MANAGEMENT",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
},
{
"Name": "ECS_FARGATE_AGENT_MANAGEMENT",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
},
{
"Name": "EC2_AGENT_MANAGEMENT",
"Status": "DISABLED",
"UpdatedAt": "2025-02-08T09:56:52+00:00"
}
]
}
]
(END)
結果、CloudTrail、DNSLogs、FlowLogsのStatusはENABLED、他の設定がDISABLEDになっていることが確認できた。
手直し内容について
スタックのテンプレートだが、DataSources:とFeatures:は併存できないので、DataSources:はまるっと省いた。次にFeatures:だが、CloudTrail、DNSLogs、FlowLogsはデフォルトでENABLEDのため記載を省いた。
RUNTIME_MONITORINGとEKS_RUNTIME_MONITORINGは両方記述できないようなので、EKS_RUNTIME_MONITORINGを省いた。最後にとりあえずのタグを設定。
終わりに
スタックの作成後、コンソールでもGuardDutyの設定を確認してみた。
もちろんGuardDutyは閲覧可能状態(有効化状態)となっている。
保護プランを確認すると、拡張脅威検出以外、有効化状態でないことが確認できた。(拡張脅威検出は自動的に有効化になるとのこと)
S3 Protection:有効でない
EKS Protection:有効でない
拡張脅威検出:有効(拡張脅威検出機能は、追加料金なしで自動的に有効になります。この機能を利用するためにすべての GuardDuty 保護プランを有効にする必要はありませんが、より多くのプランを有効化すればセキュリティシグナルの幅が広がり、脅威分析と攻撃シナリオをより包括的にカバーできるようになります。)
ランタイムモニタリング:有効でない
EC2 の Malware Protection:有効でない
S3 の Malware Protection:保護されたバケット、有効でない
RDS Protection:有効でない
Lambda 保護:有効でない
参考資料
https://docs.aws.amazon.com/guardduty/latest/ug/guardduty-feature-object-api-changes-march2023.html
https://docs.aws.amazon.com/guardduty/latest/APIReference/API_DetectorFeatureConfiguration.html