亚马逊AWS官方博客

FortiGate集成亚马逊云科技中国区GuardDuty威胁源安全服务

亚马逊云科技 GuardDuty服务在亚马逊云科技中国区已发布,本文档介绍亚马逊云科技中国区GuardDuty服务为FortiGate 提供威胁源集成功能。

亚马逊云科技 GuardDuty是一项托管的威胁检测服务,用于监视与亚马逊云科技资源相关的恶意或未经授权的行为/活动。 GuardDuty提供了称为“Findings”的日志,Fortinet提供 “ aws-lambda-GuardDuty”的Lambda脚本,该脚本将来自亚马逊云科技 GuardDuty Findings日志转换为S3存储中的恶意IP地址列表,FortiGate的Fabric SDN connector外部威胁源集成来自GuardDuty 发现的威胁。

要实现GuardDuty威胁源集成,需要订阅亚马逊云科技上GuardDuty,CloudWatch,S3和DynamoDB 服务。

一、FortiGate 与GuardDuty威胁源集成工作流程

  1. 亚马逊云科技 的GuardDuty威胁检测服务检测到安全威胁,产生Findings事件
  2. CloudWatch服务监听Findings事件触发 lambda函数,lambda函数为Fortinet开源的开源代码
  3. Lambda 函数基于GuardDuty事件的威胁源及别生成威胁IP列表和事件ID,存储于DynamoDB
  4. DynamoDB 产生新记录时触发lambda函数
  5. Labmda函数把IP记录生成文本文件存储于S3存储桶
  6. 在云上或企业连缘的FortiGate 定时读取S3存储桶威胁源IP列表文件,加载到FortiGate的外部威胁源列表, 从IP层阻断网络威胁

二、创建S3存储桶

存储桶用来存放威协源文本文件,文件内容为IP列表纯文本文件

S3>创建存储桶

保存存储桶名称,设置存桶权限为可公开访问,企业边缘或其它区域的FortiGate可只读访问威胁源列表文件。

三、创建DynamoDB数据库

DynamoDB数据库用于存储从GuardDuty日志提取的IP列表,每个事件一条数据库记录。

DynamoDB > 创建表

DynamoDB 表包含两个字段

设置管理DynamoDB  管理流

记住DynamoDB ARN全名

四、创建Lambda 权限角色组

创建S3存储桶权限策略

IAM>访问管理>策略>创建策略

包含 S3服务下的ListBucket,HeadBucket(此权限在中国区没有) , GetObject , PutObject, pubobjectacl

权限限定只对前面创建的存储桶生效

创建DynamoDB 权限策略

IAM>访问管理>策略>创建策略

包含DynamoDB服务DescribeStream,GetRecords,GetShardIterator, ListStreams,Scan,UpdateItem权限

限定只授权前面创建的DynamoDB表

创建Lambda权限角色组

IAM>访问管理>角色>创建角色

授予Lambda服务权限

添加Lambda 基本权限策略和 S3,DynamoDB 权限策略

五 创建DynamoDB 触发器

DynamoDB 数据记录发生变化时,触发Lambda函数转换为S3列表文件

DynamoDB > 表 > 表名> 触发>  创建触发器

触发函数关联lambda函数

六 创建Lambda函数

Lambda>  创建函数

用前面创建的权限任务组授权Lambda函数,运行时选node.js 14.0 ,Github 上的Lambda函数要求运行是node.js 8.0  ,亚马逊云科技 中国区已经没有8.0

https://github.com/fortinet/aws-lambda-GuardDuty  下载zip格式代码包,上传到Lambda函数

设置Lambda函数运行参数,大小写敏感。

MIN_SEVERITY	安全威胁级别,参考值 3
S3_BUCKET	 存储桶名字
S3_BLOCKLIST_KEY	存在存储桶里的威胁源列表文件名
REGION	亚马逊云科技 区域,中国宁夏区或中国北京区
DDB_TABLE_NAME	DynamoDB数据库名

把函数运行时间适当延长,15-30秒

七 创建CloudWatch规则

CloudWatch监控GuardDuty生成的Findings安全事件,触发Lambda函数转换Findings为DynamoDB 数据记录

CloudWatch > 规则> 创建规则

规则事件源为GuardDuty  Findings,规则类型为事件模式,目标为Lambda函数。

八 测试产生威胁源

在Lambda函数测度页面,生成GuardDuty Findings,  生成威胁源数据,修改IP和 ID值 产生威胁源IP

Lambda > 函数>测试

{
  "id": "fa9fa4a5-0232-188d-da1c-af410bcfc344",
  "detail": {
    "service": {
      "serviceName": "GuardDuty",
      "action": {
        "networkConnectionAction": {
          "connectionDirection": "INBOUND",
          "remoteIpDetails": {
            "ipAddressV4": "223.6.6.6"
          }
        }
      },
      "additionalInfo": {
        "threatListName": "GeneratedFindingThreatListName"
      },
      "eventLastSeen": "2021-04-21T22:12:01.720Z"
    },
    "severity": 3
  }
}

执行结果无错误,如果有错误一般是S3或DynamoDB 权限问题。

验证DynamoDB 数据库记录

DynamoDB > 表 > 表名> 项目

验证S3 存储桶威胁源列表文件

S3 > 存储桶 > 对象

记录此文件的URL  https://xxx.amazonaws.com.cn/iplist.txt

九 FortiGate集成亚马逊云科技  GuardDuty威胁源

FortiGate Security Fabric 创建IP地址威胁来源

链接到S3存储桶文件

验证威胁源列表动态同步到FortiGate

FortiGate 的DNS安全、反病毒、web过滤模块调用威胁源从IP层拦截威胁

本篇作者

刘瀚文

产品技术专家,亚马逊云科技产品部网络方向。

岑义涛

Fortinet亚太区产品市场总监, AWS 认证Solutions Architecture- Professional 及 Security- Specialty
负责Fortinet SD-WAN,SASE,云安全等战略产品在亚太地区的落地与推广。10年以上企业级网络安全和云服务经验。在云、网、安全融合方面有丰富的规划与实践经验。