亚马逊AWS官方博客

隆重推出与 AWS Security Hub 集成的 Cloud Custodian

Security Hub Cloud Custodian 徽标

对于云的安全性、合规性和成本管理解决方案而言,受欢迎的选择之一是 Cloud Custodian,一个由 Capital One 赞助的开源项目。Cloud Custodian 是灵活的规则引擎,采用简单的 YAML 配置文件写出政策,支持超过 130 种 AWS 资源类型。然而,因为 Cloud Custiodian 主要通过邮件通知或命令行输出以及云观察指标进行报告,所以缺乏带有搜索和过滤功能的统一视图对于拥有大型环境和多个账户的客户来说是一个痛点。

现在,这一痛点的处理方式是集成 Cloud Custodian,作为 AWS Security Hub 的结果提供商。新发布的 AWS Security Hub 提供了您在 AWS 中安全状态的全面视图,包括关于安全行业标准和最佳规范的合规性。Security Hub 搜集了关于 AWS 账户、服务和受支持第三方合作伙伴的安全数据,帮助分析安全趋势,识别最高优先度的安全问题。

解决方案概览

  • 该解决方案包含如何升级并配置现有 Cloud Custodian 环境,以便将调查结果发表(即为发送)至 AWS Security Hub,然后在 Security Hub 中查看该等结果。如果您没有可用的 Cloud Custodian 环境,请浏览 Cloud Custodian 的开始使用页面
  • 必须在账户中提前激活 Security Hub。
  • 示例将展示 Cloud Custodian 如何对未有任何执行加密存储桶政策声明的 S3 存储桶进行检测。如果您没有这类存储桶,只需创建一个无任何加密政策的空的 S3 存储桶,或者使用您知晓将触发结果的 S3 或 EC2 政策。
  • 用于执行 Cloud Custodian 的 AWS 凭据需要允许 securityhub:ImportFindings 操作,以允许输入。

第 1 步:升级 Cloud Custodian

从现有的 Cloud Custodian 虚拟环境范围内,运行以下命令:

pip install c7n --upgrade

第 2 步:设置所需的 AWS IAM 权限

需要 securityhub:BatchImportFinding 操作。如果将要使用的凭据不允许该操作,则将其添加至现有客户管理政策,或附上新的 AWSSecurityHubFullAccess AWS 管理政策。注意:arn:aws:iam::aws:policy/AdministratorAccess 或 arn:aws:iam::aws:policy/PowerUserAccess 的 IAM 用户或角色已有所需权限。

第 3 步:用新操作创建 Cloud Custodian 政策

Cloud Custodian 的优化是增加了 “post-finding” 操作类型。 以下是输入结果所需的最低限度的政策变更的示例:

    - type: post-finding
        severity_normalized: 30
        types:
          - "Software and Configuration Checks/Industry and Regulatory Standards/NIST CSF Controls (USA)"

将以下最低限度政策示例剪切并粘贴至名为 s3-no-encryption.yml 政策

的新文件:
  - name: s3-bucket-encryption-policy-absent
    resource: s3
    description: s3 buckets without encryption required 
    filters:
      - type: no-encryption-statement
    actions:
      - type: post-finding
        severity_normalized: 30
        types:
          - "Software and Configuration Checks/Industry and Regulatory Standards/NIST CSF Controls (USA)"

第 4 步:运行政策

以下命令将执行 Cloud Custodian,使用本地目录中的政策文件 s3-no-encryption.yml。Cloud Custodian 支持与 AWS CLI 相同的安全凭据和地区设置

custodian run -s /tmp s3-no-encryption.yml

该运行命令的结果应该与以下情况相似,预计差别在于时间戳、execution_time、资源计数和编号。如果首行计数为零,则第二行不会显示,因为没有结果发送至 Security Hub。

2018-11-19 05:43:30,095: custodian.policy:INFO policy: s3-bucket-encryption-policy-absent resource:s3 region:us-east-1 count:22 time:5.80 
2018-11-19 05:43:30,832: custodian.policy:INFO policy: s3-bucket-encryption-policy-absent action: bucketfinding resources: 22 execution_time: 0.73

第 5 步:查看 Security Hub 控制台中的结果

  1. 登入 AWS 控制台,选择 Security Hub,然后,在“导航 (Navigation)”区域的左上方点击 Findings
  2. 在“结果 (Findings)”区域点击输入窗口中的 Filters,然后在“过滤器 (Filters)”的选择列表中选择 Product Fields。密钥 (Key) 栏输入 “ProviderName”,数值 (Value) 栏输入 “CloudCustodian”。
  3. 观察 Cloud Custodian 政策中的“名称 (Name)”如何映射到结果“标题 (Title)”。政策中的“描述”映射到结果中的“描述”,显示于“结果 ID”下的详细信息面板。
  4. 要查看 Cloud Custodian 所纳入结果部分的完整数据集,点击右边的 “Finding ID”:

第 6 步:浏览可以略过的附加数据

要查看 Custodian 可支持提交至 Security Hub 的附加属性和“类型”字段允许的值,运行以下命令:

custodian schema ec2.actions.post-finding

属性名称直接映射至 Security Hub 使用的标准结果格式中定义的字段。

第 7 步:浏览所支持的 AWS 资源类型

启动该集成时,支持以下 AWS 资源类型(如 CloudCustodian 中所定义):ec2 和 s3。其他来源即将加入,包括 rds、vpc、security-group、subnet、iam-user、iam-role、iam-profile、iam-policy,将在账户中首先加入上述部分。查看特定资源是否已有添加的后结果操作支持,运行:

custodian schema <resource>.actions.post-finding

如果得到以下错误信息,则表示 Cloud Custodian 尚不支持与该来源集成:

custodian.commands:ERROR post-findings is not in the actions list for resource

第 8 步:浏览代码及参与方式

Cloud Custodian 集成的源代码包含在 securityhub.py 中,函数程序 () 调用名为 BatchImportFindings 的 Security Hub 公开 API。在相同文件中,函数 <resource>Finding 包含资源级数据映射。鼓励拉取“请求 (Requests)” 支持附加资源,或者您可以提交标题前缀为 ‘[SecurityHub]’ 的问题。此外,有任何想要的附加数据映射至“Amazon 结果格式 (Amazon Finding Format)”,请提交 PR 或问题。您还可以加入 Cloud Custodian 在 gitter.im 上的聊天室,有数百位其他用户和开发者可以帮助您开始使用。

将此代码提供给 Cloud Custodian 的主要原因是支持已经使用 Cloud Custodian 的 AWS 客户。其他开源安全和合规评估项目也可以使用这一方法作为如何与 AWS Security Hub 集成的示例。