使用 Chef InSpec 配置文件与 Systems Manager 合规性 - Amazon Systems Manager
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 Chef InSpec 配置文件与 Systems Manager 合规性

Amazon Systems Manager与 Chef 集成 InSpec。 InSpec 是一个开源测试框架,允许您创建人类可读的配置文件以存储在 GitHub 我们的 Amazon Simple Storage Service (Amazon S3) Service 中。然后,您可以使用 Systems Manager 运行合规性扫描,并查看合规和不合规的节点。配置文件列出您的计算环境的安全性、合规性或策略要求。例如,您可以使用 Amazon Systems Manager 的功能 Compliance,创建将在您扫描节点时执行以下检查的配置文件:

  • 检查特定端口是否处于打开或关闭状态。

  • 检查特定应用程序是否正在运行。

  • 检查某些软件包是否已安装。

  • 检查 Windows 注册表项中的特定属性。

您可以为亚马逊弹性计算云 (Amazon EC2) 实例以及使用 Systems Manager 管理的本地服务器或虚拟机 (VM) 创建 InSpec 配置文件。以下示例 Chef InSpec 配置文件检查端口 22 是否已打开。

control 'Scan Port' do impact 10.0 title 'Server: Configure the service port' desc 'Always specify which port the SSH server should listen to. Prevent unexpected settings.' describe sshd_config do its('Port') { should eq('22') } end end

InSpec 包括一系列资源,可帮助您快速编写支票和审计控制措施。 InSpec 使用InSpec 域特定语言 (DSL) 在 Ruby 中编写这些控件。您还可以使用由大型 InSpec 用户社区创建的个人资料。例如,上的DevSec chef-os-hardening项目 GitHub 包含数十个配置文件,可帮助您保护节点。您可以在 GitHub 或 Amazon S3 中创作和存储个人资料。

工作方式

以下是使用符合性 InSpec 配置文件的过程的工作原理:

  1. 要么确定要使用的预定义 InSpec 配置文件,要么创建自己的配置文件。你可以使用预定义的配置文件 GitHub 开始使用。有关如何创建自己的 InSpec 个人资料的信息,请参阅 Chef InSpec 个人资料

  2. 将配置文件存储在公共或私有 GitHub 存储库中,或者存储在 S3 存储桶中。

  3. 使用 Systems Manager 文档(SSM 文档)AWS-RunInspecChecks运行符合您的 InSpec 配置文件。您可以使用 Amazon Systems Manager 的功能 Run Command 开始按需合规性扫描,也可以使用 Amazon Systems Manager 的功能 State Manager 计划定期合规性扫描。

  4. 使用 Compliance API 或 Compliance 控制台识别不合规的节点。

注意

请注意以下信息。

  • Chef 使用节点上的客户端来处理配置文件。您不需要安装客户端。当 Systems Manager 运行 SSM 文档 AWS-RunInspecChecks 时,系统将检查是否已安装客户端。如果未安装,Systems Manager 会在扫描期间安装 Chef 客户端,然后在扫描完成后卸载该客户端。

  • 运行 SSM 文档 AWS-RunInspecChecks(如本主题中所述)会将类型为 Custom:Inspec 的合规性条目分配到每个目标节点。要分配此合规性类型,该文档会调用 PutComplianceItemsAPI 操作。

运行 InSpec 合规性扫描

本节包括有关如何使用 Systems Manager 控制台和 Amazon Command Line Interface (Amazon CLI) 运行 InSpec 合规性扫描的信息。控制台过程介绍了如何配置 State Manager 来运行该扫描。Amazon CLI 过程介绍了如何配置 Run Command 来运行该扫描。

使用State Manager(控制台)运行 InSpec合规性扫描

使用Amazon Systems Manager控制台运行 InSpec 合规性扫描 State Manager
  1. 访问 https://console.aws.amazon.com/systems-manager/,打开 Amazon Systems Manager 控制台。

  2. 在导航窗格中,选择 State Manager

    -或者-

    如果首先打开 Amazon Systems Manager 主页,选择菜单图标 ( 
    The menu icon
  ) 打开导航窗格,然后选择 State Manager

  3. 选择 Create association(创建关联)

  4. 提供关联详细信息部分,输入一个名称。

  5. Document (文档) 列表中,选择 AWS-RunInspecChecks

  6. 文档版本列表中,选择运行时的最新版本

  7. 在 “参数” 部分的 “源类型” 列表中,选择其中一个GitHubS3

    如果您愿意 GitHub,请在 “来源信息” 字段中输入公共或私有 GitHub 存储库中 InSpec 配置文件的路径。以下是 Systems Manager 团队从以下位置提供的公开个人资料的路径示例:https://github.com/awslabs/amazon-ssm/tree/master/Compliance/InSpec/PortCheck

    {"owner":"awslabs","repository":"amazon-ssm","path":"Compliance/InSpec/PortCheck","getOptions":"branch:master"}

    如果您选择 S3,请在 “源信息” 字段中输入 S3 存储桶中 InSpec 配置文件的有效 URL。

    有关 Systems Manager 如何与 GitHub Amazon S3 集成的更多信息,请参阅从 GitHub 运行脚本

  8. Targets(目标)部分中,通过指定标签、手动选择实例或边缘设备或指定资源组,选择要在其上运行此操作的托管式节点。

    提示

    如果未列出您希望看到的托管式节点,请参阅 排除托管式节点可用性的问题 以获取故障排除技巧。

  9. Specify schedule (指定计划) 部分中,使用计划生成器选项创建计划,该计划将指定您希望运行合规性扫描的时间。

  10. 对于 Rate control(速率控制)

    • 对于 Concurrency(并发),请指定要同时运行该命令的托管式节点的数量或百分比。

      注意

      如果您通过指定应用于托管式节点的标签或指定 Amazon Resource Groups 来选择目标,但不确定有多少个托管式节点已被设为目标,则可通过指定百分比来限制可同时运行该文档的目标的数量。

    • 对于 Error threshold(错误阈值),请指定当命令在一定数量或百分比的节点上失败后,何时在其他托管式节点上停止运行该命令。例如,如果您指定三个错误,Systems Manager 将在收到第四个错误时停止发送该命令。仍在处理该命令的托管式节点也可能发送错误。

  11. (可选)对于 输出选项,要将命令输出保存到文件,请选中 将命令输出写入 S3 存储桶 框。在输入框中输入存储桶和前缀(文件夹)名称。

    注意

    授予将数据写入 S3 存储桶的能力的 S3 权限,是分配给实例的实例配置文件(适用于 EC2 实例)或 IAM 服务角色(混合激活的计算机)的权限,而不是执行此任务的 IAM 用户的权限。有关更多信息,请参阅为 Systems Manager 配置实例权限为混合环境创建 IAM 服务角色。此外,如果指定的 S3 存储桶位于不同的 Amazon Web Services 账户 中,请确保与该托管式节点关联的实例配置文件或 IAM 服务角色具有写入该存储桶的所需权限。

  12. 选择创建关联。系统将创建关联并自动运行合规性扫描。

  13. 等待几分钟,以完成扫描,然后在导航窗格中选择合规性

  14. 对应的托管式实例中,找到 Compliance Type(合规性类型)列为 Custom:Inspec 的节点。

  15. 选择一个节点 ID 来查看不合规状态的详细信息。

使用 Run Command (Amazon CLI) 运行 InSpec合规性扫描

  1. 安装并配置 Amazon Command Line Interface (Amazon CLI)(如果尚未执行该操作)。

    有关信息,请参阅安装或更新 Amazon CLI 的最新版本

  2. 运行以下命令之一,从 Amazon S3 GitHub 或 Amazon S3 运行 InSpec 配置文件。

    命令使用以下参数:

    • 源类型: GitHub 或 Amazon S3

    • SourceInfo:指向 S3 存储桶中 GitHub 或 S3 存储桶中的 InSpec 个人资料文件夹的网址。该文件夹必须包含基本 InSpec 文件 (*.yml) 和所有相关控件 (*.rb)。

    GitHub

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters '{"sourceType":["GitHub"],"sourceInfo":["{\"owner\":\"owner_name\", \"repository\":\"repository_name\", \"path\": \"Inspec.yml_file"}"]}'

    下面是一个例子。

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters '{"sourceType":["GitHub"],"getOptions":"branch:master","sourceInfo":["{\"owner\":\"awslabs\", \"repository\":\"amazon-ssm\", \"path\": \"Compliance/InSpec/PortCheck\"}"]}'

    Amazon S3

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:tag_name","Values":["tag_value"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/DOC-EXAMPLE-BUCKET/Inspec.yml_file\"}"]}'

    下面是一个例子。

    aws ssm send-command --document-name "AWS-RunInspecChecks" --targets '[{"Key":"tag:testEnvironment","Values":["webServers"]}]' --parameters'{"sourceType":["S3"],"sourceInfo":["{\"path\":\"https://s3.aws-api-domain/DOC-EXAMPLE-BUCKET/InSpec/PortCheck.yml\"}"]}'
  3. 运行以下命令以查看合规性扫描的摘要。

    aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
  4. 运行以下命令以查看不合规的节点的详细信息。

    aws ssm list-compliance-items --resource-ids node_ID --resource-type ManagedInstance --filters Key=DocumentName,Values=AWS-RunInspecChecks