AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

将 Chef InSpec 配置文件与 Systems Manager Compliance 结合使用

Systems Manager 现在与 Chef InSpec 集成。InSpec 是一个开源的运行时框架,您可以使用它在 GitHub 或 Amazon S3 上创建人工可读的配置文件。然后,您可以使用 Systems Manager 运行合规性扫描并查看合规和不合规的实例。配置文件列出您的计算环境的安全性、合规性或策略要求。例如,您可以使用 Systems Manager Compliance 创建配置文件以便在您扫描实例时执行以下检查:

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

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

  • 检查某些程序包是否已安装。

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

您可以为使用 Systems Manager 管理的 Amazon EC2 实例和本地服务器或虚拟机 (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 用户社区创建的配置文件。例如,GitHub 上的 DevSec chef-os-hardening 项目包含许多配置文件,可帮助您保护实例和服务器。您可以在 GitHub 或 Amazon Simple Storage Service (Amazon S3) 中创作和存储配置文件。

如何使用

下面演示了 InSpec 配置文件与 Systems Manager Compliance 结合使用的过程。

  1. 要么识别要使用的预定义 InSpec 配置文件,要么创建您自己的配置文件。您可以使用 GitHub 上的 预定义配置文件来开始操作。有关如何创建您自己的 InSpec 配置文件的信息,请参阅使用 InSpec 实现合规自动化

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

  3. 使用 AWS-RunInspecChecks SSM 文档对您的 InSpec 配置文件运行合规性检查。您可以使用 Run Command (对于按需扫描) 开始合规性扫描,也可以使用 状态管理器 安排定期合规性扫描。

  4. 使用 Compliance API 或 Systems Manager Compliance 控制台识别不合规的实例。

注意

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

运行 InSpec 合规性扫描

本节包含有关如何使用 Systems Manager 控制台和 AWS CLI 执行 InSpec Compliance 扫描的信息。控制台过程显示如何配置状态管理器 来运行扫描。AWS CLI 过程显示如何配置 Run Command 来运行扫描。

使用控制台通过 状态管理器 运行 InSpec 合规性扫描

使用 AWS Systems Manager 控制台通过 状态管理器 运行 InSpec 合规性扫描

  1. https://console.www.amazonaws.cn/systems-manager/ 上打开 AWS Systems Manager 控制台。

  2. 在导航窗格中,选择 状态管理器

    -或者-

    如果 AWS Systems Manager 主页首先打开,请选择菜单图标 ( ) 以打开导航窗格,然后选择 状态管理器

  3. 选择创建关联

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

  5. Command 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,请在源信息字段中输入 Amazon S3 存储桶中 InSpec 配置文件的有效 URL。

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

  8. Targets 部分中,通过手动指定标签或选择实例来标识您要运行此操作的实例。

    注意

    如果选择手动选择实例,而列表中不包含您预期看到的实例,请参阅我的实例在哪里?中的故障排除提示。

  9. 指定计划部分,使用计划生成器选项创建您想要运行合规性扫描的时间计划。

  10. Output options 部分中,如果您要将命令输出保存到文件,请选择 Write command output to an Amazon S3 bucket。在框中键入存储桶和前缀 (文件夹) 名称。

    注意

    授予将数据写入 S3 存储桶的能力的 S3 权限是分配给实例的实例配置文件的权限,而不是执行此任务的 IAM 用户的权限。有关更多信息,请参阅 配置对 Systems Manager 的访问权限

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

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

  13. 对应的托管实例中,找到合规性类型列为 Custom:Inspec 的实例。

  14. 选择一个实例 ID 来查看不合规状态的详细信息。

使用 AWS CLI 通过 Run Command 运行 InSpec 合规性扫描

  1. 打开 AWS CLI 并运行以下命令指定您的凭证和区域。您必须在 Amazon EC2 中具有管理员权限,或者您必须在 IAM 中被授予相应权限。有关更多信息,请参阅 Systems Manager 先决条件

    aws configure

    系统将提示您指定以下内容。

    AWS Access Key ID [None]: key_name AWS Secret Access Key [None]: key_name Default region name [None]: region Default output format [None]: ENTER
  2. 执行下列命令之一以从 GitHub 或 Amazon S3 运行 InSpec 配置文件。

    命令使用以下参数:

    • sourceType:GitHub 或 Amazon S3

    • sourceInfo :GitHub 或 Amazon S3 存储桶中 InSpec 配置文件文件夹的 URL。该文件夹必须包含基本 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.amazonaws.com/directory/Inspec.yml_file\"}"]}'

    以下是示例。

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

    aws ssm list-resource-compliance-summaries --filters Key=ComplianceType,Values=Custom:Inspec
  4. 执行以下命令以深入查看不合规的实例。

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

相关 AWS 服务

以下相关服务可帮助您评估合规性并使用 Chef。