🍣
GuardDuty Malware Protection for S3の検証
やりたいこと
GuardDuty Malware Protection for S3の検証
検証したい項目
- マルウェアの検知テスト
- 検知したファイルに対して付けられるタグの内容確認
- 検知した場合に通知できるように設定する
- GuardDuty Malware Protection for S3で使用する権限
- 特定のタグがついたオブジェクトをGetできないようにする
検証項目の調査
マルウェアの検知テスト
安全な検知テストとして「EICARファイル」を使用する。
手法:https://dev.classmethod.jp/articles/upload-eicar-to-s3-with-cloudshell/
検知したファイルに対して付けられるタグの内容確認
S3のオブジェクトを検査した際に脅威を検知しなかった場合のタグ。
S3のオブジェクトを検査した際に脅威を検知した場合タグ。
SecurityHubで通知を受け取った場合こういった通知が発報される。
検知した場合に通知できるように設定する
GuardDutyで検知する為SecurityHubを使用していれば追加の対応は特に不要である。
SecurityHubなど設定していない場合はGuardDutyからの通知機能も使える。
GuardDuty Malware Protection for S3で使用する権限
S3MalwareProtectionRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub "s3-malware-protection-role"
AssumeRolePolicyDocument:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "malware-protection-plan.guardduty.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
S3MalwareProtectionRolePolicy:
Type: AWS::IAM::Policy
Properties:
PolicyName: !Sub "s3-malware-protection-policy"
PolicyDocument:
Version: "2012-10-17"
Statement:
- Sid: AllowManagedRuleToSendS3EventsToGuardDut
Effect: Allow
Action:
- events:PutRule
- events:DeleteRule
- events:PutTargets
- events:RemoveTargets
Resource:
- !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
Condition:
StringLike:
"events:ManagedBy": "malware-protection-plan.guardduty.amazonaws.com"
- Sid: AllowGuardDutyToMonitorEventBridgeManagedRule
Effect: Allow
Action:
- events:DescribeRule
- events:ListTargetsByRule
Resource:
- !Sub "arn:aws:events:${AWS::Region}:${AWS::AccountId}:rule/DO-NOT-DELETE-AmazonGuardDutyMalwareProtectionS3*"
- Sid: AllowPostScanTag
Effect: Allow
Action:
- s3:PutObjectTagging
- s3:GetObjectTagging
- s3:PutObjectVersionTagging
- s3:GetObjectVersionTagging
Resource:
- !Sub "arn:aws:s3:::<BucketName>/*"
- Sid: AllowEnableS3EventBridgeEvents
Effect: Allow
Action:
- s3:PutBucketNotification
- s3:GetBucketNotification
Resource:
- !Sub "arn:aws:s3:::<BucketName>"
- Sid: AllowPutValidationObject
Effect: Allow
Action:
- s3:PutObject
Resource:
- !Sub "arn:aws:s3:::<BucketName>/malware-protection-resource-validation-object"
- Sid: AllowGuardDutyToReadS3Bucket
Effect: Allow
Action:
- s3:ListBucket
Resource:
- !Sub "arn:aws:s3:::<BucketName>"
- Sid: AllowMalwareScan
Effect: Allow
Action:
- s3:GetObject
- s3:GetObjectVersion
Resource:
- !Sub "arn:aws:s3:::<BucketName>/*"
- Sid: AllowDecryptForMalwareScan
Effect: Allow
Action:
- kms:GenerateDataKey
- kms:Decrypt
Resource:
- !Sub "arn:aws:kms:${AWS::Region}:${AWS::AccountId}:key/${S3KmsKey}"
Condition:
StringEquals:
"kms:ViaService": "s3.amazonaws.com"
Roles:
- !Ref S3MalwareProtectionRole
特定のタグがついたオブジェクトをGetできないようにする
バケットポリシーに下記のようなアクセス制御を入れれば特定のタグがついているリソースに対する制限をかけることが可能である。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyGetObjectForMalicious",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::<BucketName>/*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/GuardDutyMalwareScanStatus": "THREATS_FOUND"
}
}
}
]
}
参考
Discussion