作者选择了自由和开源基金作为Write for DOnations计划的一部分进行捐赠。
介绍
InSpec是一个开源的自动化测试框架,用于测试和审核您的系统,以确保集成,安全性和其他策略要求的合规性。 开发人员可以使用InSpec代码针对目标状态测试其基础架构和应用程序的实际状态。
要指定您要测试的策略要求,InSpec包含审计控制 。 传统上,开发人员手动执行策略要求,并且通常在将更改部署到生产之前执行此操作。 但是,使用InSpec,开发人员可以在产品开发的每个阶段持续评估合规性,这有助于在开发过程的早期解决问题。 基于RSpec构建的InSpec DSL(领域特定语言)是一种用Ruby编写的DSL测试工具,它指定用于编写审计控制的语法。
InSpec还包括一组资源 ,可帮助您配置系统的特定部分并简化审计控制。 当您需要定义不可用的特定解决方案时,可以编写自己的自定义资源。 通用匹配器允许您将资源值与所有InSpec测试中的期望进行比较。
在本教程中,您将在运行Ubuntu 18.04的服务器上安装InSpec。 您将首先编写一个验证服务器操作系统系列的测试,然后您将从头开始创建PostgreSQL审计配置文件。 此审核配置文件首先检查您是否在服务器上安装了PostgreSQL并且其服务正在运行。 然后,您将添加测试以检查PostgreSQL服务是否正在使用正确的端口,地址,协议和用户运行。 接下来,您将测试特定的PostgreSQL配置参数,最后,您将审核客户端身份验证配置。
先决条件
在学习本教程之前,您需要具备以下条件:
- 一个Ubuntu 18.04服务器,通过使用Ubuntu 18.04的初始服务器设置来设置 ,包括一个sudo非root用户和防火墙。
- 按照本安装指南安装PostgreSQL 10。
第1步 – 准备环境
在此步骤中,您将下载并将最新稳定版本的InSpec解压缩到您的主目录中。 InSpec在其下载页面上提供可安装的二进制文件。
导航到您的主目录:
cd ~
现在用curl
下载二进制文件:
curl -LO https://packages.chef.io/files/stable/inspec/3.7.11/ubuntu/18.04/inspec_3.7.11-1<^>_amd64.deb
接下来,使用sha256sum
命令生成下载文件的校验和。 这是为了验证下载文件的完整性和真实性。
sha256sum inspec_3.7.11-1_amd64.deb
InSpec下载页面上列出了每个二进制文件的校验和,因此请访问下载页面以与此命令的输出进行比较。
e665948f9c0441e8648b08f8d3c8d34a86f9e994609877a7e4853c012dbc7523 inspec_3.7.11-1_amd64.deb
如果校验和不同,请删除下载的文件并重复下载过程。
接下来,您将安装下载的二进制文件。 为此,您将使用可用于包管理的dpkg
命令,默认情况下,它将与所有基于Debian的系统一起提供,例如Ubuntu。 -i
标志提示dpkg命令安装包文件。
sudo dpkg -i inspec_3.7.11-1_amd64.deb
如果没有错误,则表示您已成功安装InSpec。 要验证安装,请输入以下命令:
inspec version
您将收到显示刚刚安装的InSpec版本的输出:
3.7.11
如果未显示版本号,请再次运行第1步。
在此之后,您可以删除inspec_3.7.11-1_amd64.deb
,因为您在安装软件包后不再需要它:
rm inspec_3.7.11-1_amd64.deb
您已在服务器上成功安装了InSpec。 在下一步中,您将编写一个测试来验证服务器的操作系统系列。
第2步 – 完成您的第一次InSpec测试
在此步骤中,您将完成第一个InSpec测试,该测试将测试您的操作系统系列是否为debian
。
您将使用os
资源,它是一个内置的InSpec审计资源,用于测试运行系统的平台。 您还将使用eq
匹配器。 eq
匹配器是一个通用匹配器,可以测试两个值的完全相等。
InSpec测试由一个describe
块组成,该块包含一个或多个it
its
语句,每个语句验证资源的一个特性。 每个语句都描述了系统特定条件作为断言的期望。 您可以包含两个用于进行断言的关键字是should
和should_not
,它们断言条件应该分别为true和false。
创建一个名为os_family.rb
的文件来保存测试并使用文本编辑器打开它:
nano os_family.rb
将以下内容添加到您的文件中:
describe os.family do it {should eq 'debian'}end
此测试确保目标系统的操作系统系列是debian
。 其他可能的值是windows
, unix
, bsd
等。 您可以在os
资源文档中找到完整列表。 保存并退出该文件。
接下来,使用以下命令运行测试:
inspec exec os_family.rb
测试将通过,您将收到类似以下内容的输出:
Profile: tests from os_family.rb (tests from os_family.rb)Version: (not specified)Target: local:// debian ✔ should eq "debian"Test Summary: 1 successful, 0 failures, 0 skipped
在您的输出中, Profile
包含刚刚执行的配置文件的名称。 由于此测试未包含在配置文件中,因此InSpec会tests from os_family.rb
的测试文件名tests from os_family.rb
生成默认配置文件名称。 (您将在下一部分中使用InSpec 配置文件开始构建PostgreSQL InSpec配置文件。)此处InSpec显示not specified
的Version
,因为您只能在配置文件中指定版本。
Target
字段指定执行测试的目标系统,可以是本地或通过ssh
的远程系统。 在这种情况下,您已在本地系统上执行测试,因此目标显示为local://
。
有用的是,输出还显示执行的测试,左侧带有复选标记符号(✔)表示测试成功。 如果测试失败,输出将显示十字符号(✘)。
最后,测试摘要提供了有关成功,失败和跳过多少测试的总体详细信息。 在这种情况下,您只有一次成功的测试。
现在,您将看到失败测试的输出结果。 打开os_family.rb
:
nano os_family.rb
在此步骤中先前创建的测试中,您现在将操作系统系列的期望值从debian
更改为windows
。 此后的文件内容如下:
describe os.family do it {should eq 'windows'}end
保存并退出该文件。
接下来,使用以下命令运行更新的测试:
inspec exec os_family.rb
您将获得类似于以下内容的输出:
Profile: tests from os_family.fail.rb (tests from os_family.fail.rb)Version: (not specified)Target: local:// debian (✘) should eq "windows" expected: "windows" got: "debian" (compared using ==)Test Summary: 0 successful, 1 failure, 0 skipped
正如预期的那样,测试失败了。 输出表明您的预期( windows
)和实际( debian
)值与os.family
属性不匹配。 (compared using ==)
输出表明eq
匹配器在两个值之间执行字符串比较以得出该结果。
在此步骤中,您编写了一个成功的测试,用于验证服务器的操作系统系列。 您还创建了一个失败的测试,以查看失败测试的InSpec输出是什么样的。 在下一步中,您将开始构建审计配置文件以测试PostgreSQL安装。
第3步 – 审核PostgreSQL安装
现在,您将审核PostgreSQL安装。 首先,检查您是否安装了PostgreSQL并且其服务是否正常运行。 最后,您将审核PostgreSQL系统端口和进程。 对于PostgreSQL审计,您将在名为PostgreSQL
的InSpec profile
创建各种InSpec控件。
InSpec 控件是相关测试的高级分组。 在控件中,您可以拥有多个describe
块,以及描述测试的元数据,例如影响级别,标题,描述和标记。 InSpec配置文件组织控件以支持依赖关系管理和代码重用,这两者都有助于管理测试复杂性。 它们还可用于通过Chef Supermarket与公众进行包装和共享测试。 您可以使用配置文件来定义您将作为常规Ruby类实现的自定义资源。
要创建InSpec配置文件,您将使用init
命令。 输入此命令以创建PostgreSQL
配置文件:
inspec init profile PostgreSQL
这将在与您的配置文件同名的新目录中创建配置文件,在本例中为PostgreSQL
。 现在,进入新目录:
cd PostgreSQL/
目录结构如下所示:
PostgreSQL/├── controls│ └── example.rb├── inspec.yml├── libraries└── README.md
controls/example.rb
文件包含一个示例控件,用于测试目标系统上是否存在/tmp
文件夹。 这仅作为样本存在,您将用自己的测试替换它。
您的第一个测试将是确保您的系统上安装了postgresql-10
软件包,并且您已安装,启用并运行postgresql
服务。
将controls/example.rb
文件重命名为controls/postgresql.rb
:
mv controls/example.rb controls/postgresql.rb
接下来,使用文本编辑器打开文件:
nano controls/postgresql.rb
用以下内容替换文件的内容:
control '1-audit_installation' do impact 1.0 title 'Audit PostgreSQL Installation' desc 'Postgres should be installed and running' describe package('postgresql-10') do it {should be_installed} its('version') {should cmp >= '10'} end describe service('[email protected]') do it {should be_enabled} it {should be_installed} it {should be_running} endend
在前面的代码块中,首先使用其名称和元数据定义控件。
在第一个describe
块中,使用package
资源并将PostgreSQL包名称postgresql-10
作为资源参数传递。 package
资源提供了匹配器be_installed
以测试系统上是否安装了命名包。 如果安装了软件包,则返回true ,否则返回false 。 接下来,您使用its
声明来验证已安装的PostgreSQL包的版本是否至少为10.您使用的是cmp
而不是eq
因为包版本字符串通常包含除数字版本之外的其他属性。 只有当cmp
的限制较少时, eq
才会返回true 。
在第二个describe
块中,您使用service
资源并将PostgreSQL 10服务名称[email protected]
作为资源参数传递。 service
资源为匹配器提供be_enabled
, be_installed
和be_running
,如果分别在目标系统上安装,启用和运行命名服务,它们将返回true 。
保存并退出您的文件。
接下来,您将运行您的个人资料。 在运行以下命令之前,请确保您位于~/PostgreSQL
目录中:
inspec exec .
自从您完成PostgreSQL必备教程后,您的测试将通过。 您的输出将类似于以下内容:
Profile: InSpec Profile (PostgreSQL)Version: 0.1.0Target: local:// ✔ 1-audit_installation: Audit PostgreSQL Installation ✔ System Package postgresql-10 should be installed ✔ System Package postgresql-10 version should cmp >= "10" ✔ Service [email protected] should be enabled ✔ Service [email protected] should be installed ✔ Service [email protected] should be runningProfile Summary: 1 successful control, 0 control failures, 0 controls skippedTest Summary: 5 successful, 0 failures, 0 skipped
输出表明您的控件成功。 当且仅当其中的所有测试都成功时,控件才会成功。 输出还确认您的所有测试都是成功的。
既然您已经验证安装了正确版本的PostgreSQL且服务正常,您将创建一个新控件,以确保PostgreSQL正在监听正确的端口,地址和协议。
对于此测试,您还将使用属性 。 InSpec属性用于参数化配置文件,以便在不同环境或目标系统中轻松重用。 您将定义PORT
属性。
在文本编辑器中打开inspec.yml
文件:
nano inspec.yml
您将port
属性附加到文件的末尾。 在文件末尾添加以下内容:
...attributes: - name: port type: string default: '5432'
在前面的代码块中,您添加了port
属性并将其设置为默认值5432
因为这是PostgreSQL默认监听的端口。
保存并退出该文件。 然后运行inspec check
以验证配置文件是否仍然有效,因为您刚刚编辑了inspec.yml
:
inspec check .
如果没有错误,您可以继续。 否则,打开inspec.yml
文件并确保该属性出现在文件末尾。
现在,您将创建控件,检查PostgreSQL进程是否正在运行并使用正确的用户进行配置。 在文本编辑器中打开controls/postgresql.rb
:
nano controls/postgresql.rb
将以下控件追加到当前测试文件controls/postgresql.rb
的末尾:
...PORT = attribute('port')control '2-audit_address_port' do impact 1.0 title 'Audit Process and Port' desc 'Postgres port should be listening and the process should be running' describe port(PORT) do it {should be_listening} its('addresses') {should include '127.0.0.1'} its('protocols') {should cmp 'tcp'} end describe processes('postgres') do it {should exist} its('users') {should include 'postgres'} end describe user('postgres') do it {should exist} endend
在这里,您首先声明一个PORT
变量来保存port
配置文件属性的值。 然后声明控件及其元数据。
在第一个describe
块中,包括port
资源以测试基本端口属性。 port
资源提供匹配器be_listening
, addresses
和protocols
。 您使用be_listening
匹配器来测试指定端口正在监听目标系统。 如果端口5432
正在监听则返回true,否则返回false 。 addresses
匹配器测试指定的地址是否与端口相关联。 在这种情况下,PostgreSQL将监听本地地址127.0.0.1
。
protocols
匹配器测试端口正在监听的Internet协议,可以是icmp
, tcp
/ tcp6
或udp
/ udp6
。 PostgreSQL将监听tcp
连接。
在第二个describe
块中,包括processes
资源。 您可以使用processes
资源来测试系统上运行的程序的属性。 首先,验证系统上是否存在postgres
进程,然后使用users
匹配器测试postgres
用户是否拥有postgres
进程。
在第三个describe
块中,您拥有user
资源。 您包括user
资源以测试用户的用户属性,例如用户是否存在,用户所属的组等等。 使用此资源,您可以测试系统上是否存在postgres
用户。 保存并退出controls/postgresql.rb
。
接下来,使用以下命令运行您的配置文件:
inspec exec .
测试将通过,您的输出将类似于以下内容:
Profile: InSpec Profile (PostgreSQL)Version: 0.1.0Target: local:// ✔ 1-audit_installation: Audit PostgreSQL Installation ✔ System Package postgresql-10 should be installed ✔ System Package postgresql-10 version should cmp >= "10" ✔ Service [email protected] should be enabled ✔ Service [email protected] should be installed ✔ Service [email protected] should be running ✔ 2-audit_address_port: Audit Process and Port ✔ Port 5432 should be listening ✔ Port 5432 addresses should include "127.0.0.1" ✔ Port 5432 protocols should cmp == "tcp" ✔ Processes postgres should exist ✔ Processes postgres users should include "postgres" ✔ User postgres should existProfile Summary: 2 successful controls, 0 control failures, 0 controls skippedTest Summary: 11 successful, 0 failures, 0 skipped
输出表明您的控件和所有测试都成功。
在本节中,您已创建了第一个InSpec配置文件和控件,并使用它们来组织测试。 您已使用多个InSpec资源来确保安装了正确版本的PostgreSQL,启用并正确运行PostgreSQL服务,以及系统上存在PostgreSQL用户。 通过此设置,您可以审核配置。
第4步 – 审核PostgreSQL配置
在此步骤中,您将审核一些PostgreSQL配置值,这将为您提供处理这些配置文件的基础,允许您根据需要审核任何PostgreSQL配置参数。
现在您已经有了审核PostgreSQL安装的测试,您将自己审核PostgreSQL配置。 PostgreSQL有几个配置参数可供您根据需要调整它们,这些参数存储在默认位于/etc/postgresql/10/main/postgresql.conf
的配置文件中。 对于各种部署,例如日志记录,密码加密,SSL和复制策略,您可能对PostgreSQL配置有不同的要求 – 这些要求是您在配置文件中指定的。
您将使用postgres_conf
资源,该资源针对PostgreSQL配置文件内容中的预期值测试特定的命名配置选项。
此测试将假设您将手动设置的一些非默认PostgreSQL配置值。
在您喜欢的文本编辑器中打开PostgreSQL配置文件:
sudo nano /etc/postgresql/10/main/postgresql.conf
设置以下配置值。 如果该选项已存在于文件中但已注释掉,则通过删除#
取消注释,并将值设置为:
password_encryption = scram-sha-256logging_collector = onlog_connections = onlog_disconnections = onlog_duration = on
您设置的配置值:
- 确保始终使用scram-sha-256算法加密已保存的密码。
- 启用
logging collector
,这是一个后台进程,用于从标准错误(stderr
)捕获日志消息并将其重定向到日志文件。 - 启用对PostgreSQL服务器的连接尝试的记录以及成功的连接。
- 启用会话终止的日志记录。
- 启用每个已完成语句的持续时间记录。
保存并退出配置文件。 然后重启PostgreSQL服务:
sudo service [email protected] restart
您将仅测试几个配置选项,但您可以使用postgres_conf
资源测试任何PostgreSQL配置选项。
您将使用新的配置文件属性postgres_conf_dir
传入PostgreSQL配置目录,该目录位于/etc/postgresql/10/main
。 此配置目录在所有操作系统和平台上都不相同,因此通过将其作为配置文件属性传递,您将使此配置文件更易于在不同环境中重用。
打开你的inspec.yml
文件:
nano inspec.yml
将此新属性添加到inspec.yml
的attributes
部分:
... - name: postgres_conf_dir type: string default: '/etc/postgresql/10/main'
保存并退出您的文件。 然后运行以下命令以验证InSpec配置文件是否仍然有效,因为您刚刚编辑了inspec.yml
:
inspec check .
如果没有错误,您可以继续。 否则,打开inspec.yml
文件并确保上面的行存在于文件末尾。
现在,您将创建用于审核要强制执行的配置值的控件。 将以下控件追加到测试文件controls/postgresql.rb
的末尾:
...POSTGRES_CONF_DIR = attribute('postgres_conf_dir')POSTGRES_CONF_PATH = File.join(POSTGRES_CONF_DIR, 'postgresql.conf')control '3-postgresql' do impact 1.0 title 'Audit PostgreSQL Configuration' desc 'Audits specific configuration options' describe postgres_conf(POSTGRES_CONF_PATH) do its('port') {should eq PORT} its('password_encryption') {should eq 'scram-sha-256'} its('ssl') {should eq 'on'} its('logging_collector') {should eq 'on'} its('log_connections') {should eq 'on'} its('log_disconnections') {should eq 'on'} its('log_duration') {should eq 'on'} endend
在这里定义两个变量:
-
POSTGRES_CONF_DIR
保存配置文件配置中定义的postgres_conf_dir
属性。 -
POSTGRES_CONF_PATH
通过使用File.join
将配置文件名与配置目录连接来保存配置文件的绝对路径。
接下来,使用其名称和元数据定义控件。 然后将postgres_conf
资源与eq
匹配器一起使用,以确保配置选项所需的值正确。 保存并退出controls/postgresql.rb
。
接下来,您将使用以下命令运行测试:
inspec exec .
测试将通过,您的输出将类似于以下内容:
Profile: InSpec Profile (PostgreSQL)Version: 0.1.0Target: local:// ✔ 1-audit_installation: Audit PostgreSQL Installation ✔ System Package postgresql-10 should be installed ✔ System Package postgresql-10 version should cmp >= "10" ✔ Service [email protected] should be enabled ✔ Service [email protected] should be installed ✔ Service [email protected] should be running ✔ 2-audit_address_port: Audit Process and Port ✔ Port 5432 should be listening ✔ Port 5432 addresses should include "127.0.0.1" ✔ Port 5432 protocols should cmp == "tcp" ✔ Processes postgres should exist ✔ Processes postgres users should include "postgres" ✔ User postgres should exist ✔ 3-postgresql: Audit PostgreSQL Configuration ✔ PostgreSQL Configuration port should eq "5432" ✔ PostgreSQL Configuration password_encryption should eq "scram-sha-256" ✔ PostgreSQL Configuration ssl should eq "on" ✔ PostgreSQL Configuration logging_collector should eq "on" ✔ PostgreSQL Configuration log_connections should eq "on" ✔ PostgreSQL Configuration log_disconnections should eq "on" ✔ PostgreSQL Configuration log_duration should eq "on"Profile Summary: 3 successful controls, 0 control failures, 0 controls skippedTest Summary: 18 successful, 0 failures, 0 skipped
输出表明您的三个控件和所有测试都是成功的,没有任何跳过的测试或控件。
在此步骤中,您添加了一个新的InSpec控件,该控件使用postgres_conf
资源从配置文件中测试特定的PostgreSQL配置值。 您在本节中审核了一些值,但您可以使用它来测试配置文件中的任何配置选项。
第5步 – 审核PostgreSQL客户端身份验证
现在您已经为PostgreSQL配置编写了一些测试,您将为客户端身份验证编写一些测试。 这对于需要为不同类型的用户确保特定身份验证方法的安装非常重要; 例如,要确保在本地连接到PostgreSQL的客户端始终需要使用密码进行身份验证,或者拒绝来自特定IP地址或IP地址范围的连接,等等。
对于需要考虑安全性的PostgreSQL安装的一个重要配置是仅允许加密的密码验证。 PostgreSQL 10 支持两种用于客户端身份验证的密码加密方法 : md5
和scram-sha-256
。 此测试将要求对所有客户端进行密码加密,因此这意味着客户端配置文件中所有客户端的METHOD
字段必须设置为md5
或scram-sha-256
。 对于这些测试,您将使用scram-sha-256
因为它比md5
更安全。
默认情况下, local
客户端在pg_hba.conf
文件中具有其peer
身份验证方法。 对于测试,您需要将这些更改为scram-sha-256
。 打开/etc/postgresql/10/main/pg_hba.conf
文件:
sudo nano /etc/postgresql/10/main/pg_hba.conf
文件顶部包含注释。 向下滚动并查找身份验证类型为local
注释行,并将身份验证方法从peer
更改为scram-sha-256
。 例如,更改:
...local all postgres peer...
至:
...local all postgres scram-sha-256...
最后,您的pg_hba.conf
配置将类似于以下内容:
...local all postgres scram-sha-256# TYPE DATABASE USER ADDRESS METHOD# "local" is for Unix domain socket connections onlylocal all all scram-sha-256# IPv4 local connections:host all all 127.0.0.1/32 scram-sha-256# IPv6 local connections:host all all ::1/128 scram-sha-256# Allow replication connections from localhost, by a user with the# replication privilege.local replication all scram-sha-256host replication all 127.0.0.1/32 scram-sha-256host replication all ::1/128 scram-sha-256...
保存并退出配置文件。 然后重启PostgreSQL服务:
sudo service [email protected] restart
对于此测试,您将使用postgres_hba_conf
资源。 此资源用于测试pg_hba.conf
文件中定义的客户端身份验证数据。 您将传递pg_hba.conf
文件的路径作为此资源的参数。
您的控件将包含两个describe
块,分别检查local
和host
客户端的auth_method
字段,以确保它们都等于scram-sha-256
。 在文本编辑器中打开controls/postgresql.rb
:
nano controls/postgresql.rb
将以下控件追加到测试文件controls/postgresql.rb
的末尾:
POSTGRES_HBA_CONF_FILE = File.join(POSTGRES_CONF_DIR, 'pg_hba.conf')control '4-postgres_hba' do impact 1.0 title 'Require SCRAM-SHA-256 for ALL users, peers in pg_hba.conf' desc 'Require SCRAM-SHA-256 for ALL users, peers in pg_hba.conf. Do not allow untrusted authentication methods.' describe postgres_hba_conf(POSTGRES_HBA_CONF_FILE).where { type == 'local' } do its('auth_method') { should all eq 'scram-sha-256' } end describe postgres_hba_conf(POSTGRES_HBA_CONF_FILE).where { type == 'host' } do its('auth_method') { should all eq 'scram-sha-256' } endend
在此代码块中,您定义一个新变量POSTGRES_HBA_CONF_FILE
以存储pg_hba.conf
文件的绝对位置。 File.join
是一个用/
连接两个文件路径段的Ruby方法。 您可以在此处使用PostgreSQL配置文件pg_hba.conf
来连接上一节中声明的POSTGRES_CONF_DIR
变量。 这将生成pg_hba.conf
文件的绝对文件路径,并将其存储在POSTGRES_HBA_CONF_FILE
变量中。
之后,您声明并配置控件及其元数据。 第一个describe
块检查客户端类型是local
所有配置条目是否也具有scram-sha-256
作为其身份验证方法。 第二个describe
块对于客户端类型为host
情况也是如此。 保存并退出controls/postgresql.rb
。
您将以postgres
用户身份执行此控件,因为PostgreSQL HBA配置的Read
权限仅授予所有者和组,即postgres
用户。 运行以下命令来执行配置文件:
sudo -u postgres inspec exec .
您的输出将类似于以下内容:
Profile: InSpec Profile (PostgreSQL)Version: 0.1.0Target: local:// ✔ 1-audit_installation: Audit PostgreSQL Installation ✔ System Package postgresql-10 should be installed ✔ System Package postgresql-10 version should cmp >= "10" ✔ Service [email protected] should be enabled ✔ Service [email protected] should be installed ✔ Service [email protected] should be running ✔ 2-audit_address_port: Audit Process and Port ✔ Port 5432 should be listening ✔ Port 5432 addresses should include "127.0.0.1" ✔ Port 5432 protocols should cmp == "tcp" ✔ Processes postgres should exist ✔ Processes postgres users should include "postgres" ✔ User postgres should exist ✔ 3-postgresql: Audit PostgreSQL Configuration ✔ PostgreSQL Configuration port should eq "5432" ✔ PostgreSQL Configuration password_encryption should eq "scram-sha-256" ✔ PostgreSQL Configuration ssl should eq "on" ✔ PostgreSQL Configuration logging_collector should eq "on" ✔ PostgreSQL Configuration log_connections should eq "on" ✔ PostgreSQL Configuration log_disconnections should eq "on" ✔ PostgreSQL Configuration log_duration should eq "on" ✔ 4-postgres_hba: Require SCRAM-SHA-256 for ALL users, peers in pg_hba.conf ✔ Postgres Hba Config /etc/postgresql/10/main/pg_hba.conf with type == "local" auth_method should all eq "scram-sha-256" ✔ Postgres Hba Config /etc/postgresql/10/main/pg_hba.conf with type == "host" auth_method should all eq "scram-sha-256"Profile Summary: 4 successful controls, 0 control failures, 0 controls skippedTest Summary: 20 successful, 0 failures, 0 skipped
此输出表示您添加的新控件以及所有先前的控件都是成功的。 它还表明您的个人资料中的所有测试都是成功的。
在此步骤中,您已向配置文件添加了一个控件,该控件成功审核了PostgreSQL客户端身份验证配置,以确保使用postgres_hba_conf
资源通过scram-sha-256
对所有客户端进行身份验证。
结论
您已经设置了InSpec并成功审核了PostgreSQL 10安装。 在此过程中,您使用了一系列InSpec工具,例如:InSpec DSL,匹配器,资源,配置文件,属性和CLI。 从这里,您可以在其文档的参考资料部分中包含InSpec提供的其他资源。 InSpec还提供了一种机制,可根据您的特定需求定义自定义资源 。 这些自定义资源是作为常规Ruby类编写的。
您还可以浏览Chef超市的Compliance Profiles
部分,其中包含您可以直接执行或在您自己的配置文件中扩展的公共共享InSpec配置文件。 您还可以在Chef Supermarket与公众分享您自己的个人资料。
您可以进一步探索Chef Universe中的其他工具,例如Chef
和Habitat
。 InSpec与Habitat集成,可以将您的合规性控制与您的Habitat打包应用程序一起发送并持续运行。 您可以在教程页面上浏览官方和社区的InSpec教程。 有关更高级的InSpec参考,请查看官方的InSpec文档 。