inspec 2.0.32 → 2.0.45

Sign up to get free protection for your applications and to get access to all the features.
Files changed (482) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +101 -101
  3. data/CHANGELOG.md +2991 -2970
  4. data/Gemfile +55 -55
  5. data/LICENSE +14 -14
  6. data/MAINTAINERS.md +33 -33
  7. data/MAINTAINERS.toml +52 -52
  8. data/README.md +446 -437
  9. data/Rakefile +322 -322
  10. data/bin/inspec +12 -12
  11. data/docs/.gitignore +2 -2
  12. data/docs/README.md +40 -40
  13. data/docs/dsl_inspec.md +258 -258
  14. data/docs/dsl_resource.md +93 -93
  15. data/docs/glossary.md +99 -99
  16. data/docs/habitat.md +191 -191
  17. data/docs/inspec_and_friends.md +107 -107
  18. data/docs/matchers.md +169 -168
  19. data/docs/migration.md +293 -293
  20. data/docs/platforms.md +118 -118
  21. data/docs/plugin_kitchen_inspec.md +49 -49
  22. data/docs/profiles.md +370 -370
  23. data/docs/reporters.md +105 -105
  24. data/docs/resources/aide_conf.md.erb +75 -75
  25. data/docs/resources/apache.md.erb +67 -67
  26. data/docs/resources/apache_conf.md.erb +68 -68
  27. data/docs/resources/apt.md.erb +71 -71
  28. data/docs/resources/audit_policy.md.erb +47 -47
  29. data/docs/resources/auditd.md.erb +79 -79
  30. data/docs/resources/auditd_conf.md.erb +68 -68
  31. data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
  32. data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
  33. data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
  34. data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
  35. data/docs/resources/aws_config_recorder.md.erb +71 -71
  36. data/docs/resources/aws_ec2_instance.md.erb +106 -106
  37. data/docs/resources/aws_iam_access_key.md.erb +123 -123
  38. data/docs/resources/aws_iam_access_keys.md.erb +198 -198
  39. data/docs/resources/aws_iam_group.md.erb +46 -46
  40. data/docs/resources/aws_iam_groups.md.erb +43 -43
  41. data/docs/resources/aws_iam_password_policy.md.erb +76 -76
  42. data/docs/resources/aws_iam_policies.md.erb +82 -82
  43. data/docs/resources/aws_iam_policy.md.erb +144 -144
  44. data/docs/resources/aws_iam_role.md.erb +63 -63
  45. data/docs/resources/aws_iam_root_user.md.erb +58 -58
  46. data/docs/resources/aws_iam_user.md.erb +64 -64
  47. data/docs/resources/aws_iam_users.md.erb +89 -89
  48. data/docs/resources/aws_kms_keys.md.erb +84 -84
  49. data/docs/resources/aws_route_table.md.erb +47 -47
  50. data/docs/resources/aws_s3_bucket.md.erb +134 -134
  51. data/docs/resources/aws_security_group.md.erb +151 -151
  52. data/docs/resources/aws_security_groups.md.erb +91 -91
  53. data/docs/resources/aws_sns_topic.md.erb +63 -63
  54. data/docs/resources/aws_subnet.md.erb +133 -133
  55. data/docs/resources/aws_subnets.md.erb +126 -126
  56. data/docs/resources/aws_vpc.md.erb +120 -120
  57. data/docs/resources/aws_vpcs.md.erb +48 -48
  58. data/docs/resources/azure_generic_resource.md.erb +170 -170
  59. data/docs/resources/azure_resource_group.md.erb +284 -284
  60. data/docs/resources/azure_virtual_machine.md.erb +347 -347
  61. data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
  62. data/docs/resources/bash.md.erb +75 -75
  63. data/docs/resources/bond.md.erb +90 -90
  64. data/docs/resources/bridge.md.erb +57 -57
  65. data/docs/resources/bsd_service.md.erb +67 -67
  66. data/docs/resources/command.md.erb +138 -138
  67. data/docs/resources/cpan.md.erb +79 -79
  68. data/docs/resources/cran.md.erb +64 -64
  69. data/docs/resources/crontab.md.erb +89 -89
  70. data/docs/resources/csv.md.erb +54 -54
  71. data/docs/resources/dh_params.md.erb +205 -205
  72. data/docs/resources/directory.md.erb +30 -30
  73. data/docs/resources/docker.md.erb +219 -219
  74. data/docs/resources/docker_container.md.erb +104 -104
  75. data/docs/resources/docker_image.md.erb +94 -94
  76. data/docs/resources/docker_service.md.erb +114 -114
  77. data/docs/resources/elasticsearch.md.erb +242 -242
  78. data/docs/resources/etc_fstab.md.erb +125 -125
  79. data/docs/resources/etc_group.md.erb +75 -75
  80. data/docs/resources/etc_hosts.md.erb +78 -78
  81. data/docs/resources/etc_hosts_allow.md.erb +74 -74
  82. data/docs/resources/etc_hosts_deny.md.erb +74 -74
  83. data/docs/resources/file.md.erb +526 -515
  84. data/docs/resources/filesystem.md.erb +41 -41
  85. data/docs/resources/firewalld.md.erb +107 -107
  86. data/docs/resources/gem.md.erb +79 -79
  87. data/docs/resources/group.md.erb +61 -61
  88. data/docs/resources/grub_conf.md.erb +101 -101
  89. data/docs/resources/host.md.erb +86 -86
  90. data/docs/resources/http.md.erb +196 -196
  91. data/docs/resources/iis_app.md.erb +122 -122
  92. data/docs/resources/iis_site.md.erb +135 -135
  93. data/docs/resources/inetd_conf.md.erb +94 -94
  94. data/docs/resources/ini.md.erb +76 -76
  95. data/docs/resources/interface.md.erb +58 -58
  96. data/docs/resources/iptables.md.erb +64 -64
  97. data/docs/resources/json.md.erb +63 -63
  98. data/docs/resources/kernel_module.md.erb +120 -120
  99. data/docs/resources/kernel_parameter.md.erb +53 -53
  100. data/docs/resources/key_rsa.md.erb +85 -85
  101. data/docs/resources/launchd_service.md.erb +57 -57
  102. data/docs/resources/limits_conf.md.erb +75 -75
  103. data/docs/resources/login_def.md.erb +71 -71
  104. data/docs/resources/mount.md.erb +69 -69
  105. data/docs/resources/mssql_session.md.erb +60 -60
  106. data/docs/resources/mysql_conf.md.erb +99 -99
  107. data/docs/resources/mysql_session.md.erb +74 -74
  108. data/docs/resources/nginx.md.erb +79 -79
  109. data/docs/resources/nginx_conf.md.erb +128 -128
  110. data/docs/resources/npm.md.erb +60 -60
  111. data/docs/resources/ntp_conf.md.erb +60 -60
  112. data/docs/resources/oneget.md.erb +53 -53
  113. data/docs/resources/oracledb_session.md.erb +52 -52
  114. data/docs/resources/os.md.erb +141 -141
  115. data/docs/resources/os_env.md.erb +78 -78
  116. data/docs/resources/package.md.erb +120 -120
  117. data/docs/resources/packages.md.erb +67 -67
  118. data/docs/resources/parse_config.md.erb +103 -103
  119. data/docs/resources/parse_config_file.md.erb +138 -138
  120. data/docs/resources/passwd.md.erb +141 -141
  121. data/docs/resources/pip.md.erb +67 -67
  122. data/docs/resources/port.md.erb +137 -137
  123. data/docs/resources/postgres_conf.md.erb +79 -79
  124. data/docs/resources/postgres_hba_conf.md.erb +93 -93
  125. data/docs/resources/postgres_ident_conf.md.erb +76 -76
  126. data/docs/resources/postgres_session.md.erb +69 -69
  127. data/docs/resources/powershell.md.erb +102 -102
  128. data/docs/resources/processes.md.erb +109 -109
  129. data/docs/resources/rabbitmq_config.md.erb +41 -41
  130. data/docs/resources/registry_key.md.erb +158 -158
  131. data/docs/resources/runit_service.md.erb +57 -57
  132. data/docs/resources/security_policy.md.erb +47 -47
  133. data/docs/resources/service.md.erb +121 -121
  134. data/docs/resources/shadow.md.erb +146 -144
  135. data/docs/resources/ssh_config.md.erb +80 -80
  136. data/docs/resources/sshd_config.md.erb +83 -83
  137. data/docs/resources/ssl.md.erb +119 -119
  138. data/docs/resources/sys_info.md.erb +42 -42
  139. data/docs/resources/systemd_service.md.erb +57 -57
  140. data/docs/resources/sysv_service.md.erb +57 -57
  141. data/docs/resources/upstart_service.md.erb +57 -57
  142. data/docs/resources/user.md.erb +140 -140
  143. data/docs/resources/users.md.erb +127 -127
  144. data/docs/resources/vbscript.md.erb +55 -55
  145. data/docs/resources/virtualization.md.erb +57 -57
  146. data/docs/resources/windows_feature.md.erb +47 -47
  147. data/docs/resources/windows_hotfix.md.erb +53 -53
  148. data/docs/resources/windows_task.md.erb +95 -95
  149. data/docs/resources/wmi.md.erb +81 -81
  150. data/docs/resources/x509_certificate.md.erb +151 -151
  151. data/docs/resources/xinetd_conf.md.erb +156 -156
  152. data/docs/resources/xml.md.erb +85 -85
  153. data/docs/resources/yaml.md.erb +69 -69
  154. data/docs/resources/yum.md.erb +98 -98
  155. data/docs/resources/zfs_dataset.md.erb +53 -53
  156. data/docs/resources/zfs_pool.md.erb +47 -47
  157. data/docs/ruby_usage.md +203 -203
  158. data/docs/shared/matcher_be.md.erb +1 -1
  159. data/docs/shared/matcher_cmp.md.erb +43 -43
  160. data/docs/shared/matcher_eq.md.erb +3 -3
  161. data/docs/shared/matcher_include.md.erb +1 -1
  162. data/docs/shared/matcher_match.md.erb +1 -1
  163. data/docs/shell.md +215 -215
  164. data/examples/README.md +8 -8
  165. data/examples/inheritance/README.md +65 -65
  166. data/examples/inheritance/controls/example.rb +14 -14
  167. data/examples/inheritance/inspec.yml +15 -15
  168. data/examples/kitchen-ansible/.kitchen.yml +25 -25
  169. data/examples/kitchen-ansible/Gemfile +19 -19
  170. data/examples/kitchen-ansible/README.md +53 -53
  171. data/examples/kitchen-ansible/files/nginx.repo +6 -6
  172. data/examples/kitchen-ansible/tasks/main.yml +16 -16
  173. data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
  174. data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
  175. data/examples/kitchen-chef/.kitchen.yml +20 -20
  176. data/examples/kitchen-chef/Berksfile +3 -3
  177. data/examples/kitchen-chef/Gemfile +19 -19
  178. data/examples/kitchen-chef/README.md +27 -27
  179. data/examples/kitchen-chef/metadata.rb +7 -7
  180. data/examples/kitchen-chef/recipes/default.rb +6 -6
  181. data/examples/kitchen-chef/recipes/nginx.rb +30 -30
  182. data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
  183. data/examples/kitchen-puppet/.kitchen.yml +22 -22
  184. data/examples/kitchen-puppet/Gemfile +20 -20
  185. data/examples/kitchen-puppet/Puppetfile +25 -25
  186. data/examples/kitchen-puppet/README.md +53 -53
  187. data/examples/kitchen-puppet/manifests/site.pp +33 -33
  188. data/examples/kitchen-puppet/metadata.json +11 -11
  189. data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
  190. data/examples/meta-profile/README.md +37 -37
  191. data/examples/meta-profile/controls/example.rb +13 -13
  192. data/examples/meta-profile/inspec.yml +13 -13
  193. data/examples/profile-attribute.yml +2 -2
  194. data/examples/profile-attribute/README.md +14 -14
  195. data/examples/profile-attribute/controls/example.rb +11 -11
  196. data/examples/profile-attribute/inspec.yml +8 -8
  197. data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
  198. data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
  199. data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
  200. data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
  201. data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
  202. data/examples/profile-aws/inspec.yml +11 -11
  203. data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
  204. data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
  205. data/examples/profile-azure/inspec.yml +11 -11
  206. data/examples/profile-sensitive/README.md +29 -29
  207. data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
  208. data/examples/profile-sensitive/controls/sensitive.rb +9 -9
  209. data/examples/profile-sensitive/inspec.yml +8 -8
  210. data/examples/profile/README.md +48 -48
  211. data/examples/profile/controls/example.rb +23 -23
  212. data/examples/profile/controls/gordon.rb +36 -36
  213. data/examples/profile/controls/meta.rb +34 -34
  214. data/examples/profile/inspec.yml +10 -10
  215. data/examples/profile/libraries/gordon_config.rb +53 -53
  216. data/inspec.gemspec +47 -47
  217. data/lib/bundles/README.md +3 -3
  218. data/lib/bundles/inspec-artifact.rb +7 -7
  219. data/lib/bundles/inspec-artifact/README.md +1 -1
  220. data/lib/bundles/inspec-artifact/cli.rb +277 -277
  221. data/lib/bundles/inspec-compliance.rb +16 -16
  222. data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
  223. data/lib/bundles/inspec-compliance/README.md +185 -185
  224. data/lib/bundles/inspec-compliance/api.rb +316 -316
  225. data/lib/bundles/inspec-compliance/api/login.rb +152 -152
  226. data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
  227. data/lib/bundles/inspec-compliance/cli.rb +254 -254
  228. data/lib/bundles/inspec-compliance/configuration.rb +103 -103
  229. data/lib/bundles/inspec-compliance/http.rb +86 -86
  230. data/lib/bundles/inspec-compliance/support.rb +36 -36
  231. data/lib/bundles/inspec-compliance/target.rb +98 -98
  232. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
  233. data/lib/bundles/inspec-habitat.rb +12 -12
  234. data/lib/bundles/inspec-habitat/cli.rb +36 -36
  235. data/lib/bundles/inspec-habitat/log.rb +10 -10
  236. data/lib/bundles/inspec-habitat/profile.rb +390 -390
  237. data/lib/bundles/inspec-init.rb +8 -8
  238. data/lib/bundles/inspec-init/README.md +31 -31
  239. data/lib/bundles/inspec-init/cli.rb +97 -97
  240. data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
  241. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
  242. data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
  243. data/lib/bundles/inspec-supermarket.rb +13 -13
  244. data/lib/bundles/inspec-supermarket/README.md +45 -45
  245. data/lib/bundles/inspec-supermarket/api.rb +84 -84
  246. data/lib/bundles/inspec-supermarket/cli.rb +73 -73
  247. data/lib/bundles/inspec-supermarket/target.rb +34 -34
  248. data/lib/fetchers/git.rb +163 -163
  249. data/lib/fetchers/local.rb +74 -74
  250. data/lib/fetchers/mock.rb +35 -35
  251. data/lib/fetchers/url.rb +204 -204
  252. data/lib/inspec.rb +24 -24
  253. data/lib/inspec/archive/tar.rb +29 -29
  254. data/lib/inspec/archive/zip.rb +19 -19
  255. data/lib/inspec/backend.rb +92 -92
  256. data/lib/inspec/base_cli.rb +355 -350
  257. data/lib/inspec/cached_fetcher.rb +66 -66
  258. data/lib/inspec/cli.rb +292 -292
  259. data/lib/inspec/completions/bash.sh.erb +45 -45
  260. data/lib/inspec/completions/fish.sh.erb +34 -34
  261. data/lib/inspec/completions/zsh.sh.erb +61 -61
  262. data/lib/inspec/control_eval_context.rb +179 -179
  263. data/lib/inspec/dependencies/cache.rb +72 -72
  264. data/lib/inspec/dependencies/dependency_set.rb +92 -92
  265. data/lib/inspec/dependencies/lockfile.rb +115 -115
  266. data/lib/inspec/dependencies/requirement.rb +123 -123
  267. data/lib/inspec/dependencies/resolver.rb +86 -86
  268. data/lib/inspec/describe.rb +27 -27
  269. data/lib/inspec/dsl.rb +66 -66
  270. data/lib/inspec/dsl_shared.rb +33 -33
  271. data/lib/inspec/env_printer.rb +157 -157
  272. data/lib/inspec/errors.rb +13 -13
  273. data/lib/inspec/exceptions.rb +12 -12
  274. data/lib/inspec/expect.rb +45 -45
  275. data/lib/inspec/fetcher.rb +45 -45
  276. data/lib/inspec/file_provider.rb +275 -275
  277. data/lib/inspec/formatters.rb +3 -3
  278. data/lib/inspec/formatters/base.rb +250 -250
  279. data/lib/inspec/formatters/json_rspec.rb +20 -20
  280. data/lib/inspec/formatters/show_progress.rb +12 -12
  281. data/lib/inspec/library_eval_context.rb +58 -58
  282. data/lib/inspec/log.rb +11 -11
  283. data/lib/inspec/metadata.rb +247 -247
  284. data/lib/inspec/method_source.rb +24 -24
  285. data/lib/inspec/objects.rb +14 -14
  286. data/lib/inspec/objects/attribute.rb +65 -65
  287. data/lib/inspec/objects/control.rb +61 -61
  288. data/lib/inspec/objects/describe.rb +92 -92
  289. data/lib/inspec/objects/each_loop.rb +36 -36
  290. data/lib/inspec/objects/list.rb +15 -15
  291. data/lib/inspec/objects/or_test.rb +40 -40
  292. data/lib/inspec/objects/ruby_helper.rb +15 -15
  293. data/lib/inspec/objects/tag.rb +27 -27
  294. data/lib/inspec/objects/test.rb +87 -87
  295. data/lib/inspec/objects/value.rb +27 -27
  296. data/lib/inspec/plugins.rb +60 -60
  297. data/lib/inspec/plugins/cli.rb +24 -24
  298. data/lib/inspec/plugins/fetcher.rb +86 -86
  299. data/lib/inspec/plugins/resource.rb +135 -135
  300. data/lib/inspec/plugins/secret.rb +15 -15
  301. data/lib/inspec/plugins/source_reader.rb +40 -40
  302. data/lib/inspec/polyfill.rb +12 -12
  303. data/lib/inspec/profile.rb +510 -510
  304. data/lib/inspec/profile_context.rb +207 -207
  305. data/lib/inspec/profile_vendor.rb +66 -66
  306. data/lib/inspec/reporters.rb +54 -50
  307. data/lib/inspec/reporters/base.rb +24 -24
  308. data/lib/inspec/reporters/cli.rb +356 -356
  309. data/lib/inspec/reporters/json.rb +116 -116
  310. data/lib/inspec/reporters/json_min.rb +48 -48
  311. data/lib/inspec/reporters/junit.rb +77 -77
  312. data/lib/inspec/require_loader.rb +33 -33
  313. data/lib/inspec/resource.rb +186 -186
  314. data/lib/inspec/rule.rb +266 -266
  315. data/lib/inspec/runner.rb +345 -345
  316. data/lib/inspec/runner_mock.rb +41 -41
  317. data/lib/inspec/runner_rspec.rb +175 -175
  318. data/lib/inspec/runtime_profile.rb +26 -26
  319. data/lib/inspec/schema.rb +213 -213
  320. data/lib/inspec/secrets.rb +19 -19
  321. data/lib/inspec/secrets/yaml.rb +30 -30
  322. data/lib/inspec/shell.rb +220 -220
  323. data/lib/inspec/shell_detector.rb +90 -90
  324. data/lib/inspec/source_reader.rb +29 -29
  325. data/lib/inspec/version.rb +8 -8
  326. data/lib/matchers/matchers.rb +339 -339
  327. data/lib/resource_support/aws.rb +41 -41
  328. data/lib/resource_support/aws/aws_backend_base.rb +12 -12
  329. data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
  330. data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
  331. data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
  332. data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
  333. data/lib/resources/aide_conf.rb +159 -160
  334. data/lib/resources/apache.rb +48 -48
  335. data/lib/resources/apache_conf.rb +156 -156
  336. data/lib/resources/apt.rb +149 -149
  337. data/lib/resources/audit_policy.rb +63 -63
  338. data/lib/resources/auditd.rb +231 -231
  339. data/lib/resources/auditd_conf.rb +55 -55
  340. data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
  341. data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
  342. data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
  343. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
  344. data/lib/resources/aws/aws_config_recorder.rb +98 -98
  345. data/lib/resources/aws/aws_ec2_instance.rb +157 -157
  346. data/lib/resources/aws/aws_iam_access_key.rb +106 -106
  347. data/lib/resources/aws/aws_iam_access_keys.rb +149 -144
  348. data/lib/resources/aws/aws_iam_group.rb +56 -56
  349. data/lib/resources/aws/aws_iam_groups.rb +52 -45
  350. data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
  351. data/lib/resources/aws/aws_iam_policies.rb +53 -46
  352. data/lib/resources/aws/aws_iam_policy.rb +125 -119
  353. data/lib/resources/aws/aws_iam_role.rb +51 -51
  354. data/lib/resources/aws/aws_iam_root_user.rb +60 -60
  355. data/lib/resources/aws/aws_iam_user.rb +111 -111
  356. data/lib/resources/aws/aws_iam_users.rb +108 -96
  357. data/lib/resources/aws/aws_kms_keys.rb +53 -46
  358. data/lib/resources/aws/aws_route_table.rb +61 -61
  359. data/lib/resources/aws/aws_s3_bucket.rb +115 -115
  360. data/lib/resources/aws/aws_security_group.rb +93 -93
  361. data/lib/resources/aws/aws_security_groups.rb +68 -68
  362. data/lib/resources/aws/aws_sns_topic.rb +53 -53
  363. data/lib/resources/aws/aws_subnet.rb +88 -88
  364. data/lib/resources/aws/aws_subnets.rb +53 -53
  365. data/lib/resources/aws/aws_vpc.rb +69 -69
  366. data/lib/resources/aws/aws_vpcs.rb +45 -45
  367. data/lib/resources/azure/azure_backend.rb +377 -377
  368. data/lib/resources/azure/azure_generic_resource.rb +59 -59
  369. data/lib/resources/azure/azure_resource_group.rb +152 -152
  370. data/lib/resources/azure/azure_virtual_machine.rb +264 -264
  371. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +136 -136
  372. data/lib/resources/bash.rb +35 -35
  373. data/lib/resources/bond.rb +68 -68
  374. data/lib/resources/bridge.rb +122 -122
  375. data/lib/resources/command.rb +73 -69
  376. data/lib/resources/cpan.rb +58 -58
  377. data/lib/resources/cran.rb +64 -64
  378. data/lib/resources/crontab.rb +169 -170
  379. data/lib/resources/csv.rb +60 -60
  380. data/lib/resources/dh_params.rb +82 -82
  381. data/lib/resources/directory.rb +25 -25
  382. data/lib/resources/docker.rb +236 -236
  383. data/lib/resources/docker_container.rb +89 -89
  384. data/lib/resources/docker_image.rb +83 -83
  385. data/lib/resources/docker_object.rb +57 -57
  386. data/lib/resources/docker_service.rb +90 -90
  387. data/lib/resources/elasticsearch.rb +169 -169
  388. data/lib/resources/etc_fstab.rb +101 -102
  389. data/lib/resources/etc_group.rb +152 -156
  390. data/lib/resources/etc_hosts.rb +82 -81
  391. data/lib/resources/etc_hosts_allow_deny.rb +122 -123
  392. data/lib/resources/file.rb +298 -298
  393. data/lib/resources/filesystem.rb +31 -31
  394. data/lib/resources/firewalld.rb +143 -144
  395. data/lib/resources/gem.rb +70 -70
  396. data/lib/resources/groups.rb +215 -215
  397. data/lib/resources/grub_conf.rb +237 -237
  398. data/lib/resources/host.rb +306 -300
  399. data/lib/resources/http.rb +251 -250
  400. data/lib/resources/iis_app.rb +101 -104
  401. data/lib/resources/iis_site.rb +148 -148
  402. data/lib/resources/inetd_conf.rb +62 -62
  403. data/lib/resources/ini.rb +29 -29
  404. data/lib/resources/interface.rb +129 -129
  405. data/lib/resources/iptables.rb +80 -69
  406. data/lib/resources/json.rb +117 -117
  407. data/lib/resources/kernel_module.rb +107 -107
  408. data/lib/resources/kernel_parameter.rb +58 -58
  409. data/lib/resources/key_rsa.rb +67 -67
  410. data/lib/resources/limits_conf.rb +55 -55
  411. data/lib/resources/login_def.rb +66 -66
  412. data/lib/resources/mount.rb +88 -88
  413. data/lib/resources/mssql_session.rb +101 -101
  414. data/lib/resources/mysql.rb +81 -81
  415. data/lib/resources/mysql_conf.rb +134 -134
  416. data/lib/resources/mysql_session.rb +71 -71
  417. data/lib/resources/nginx.rb +96 -96
  418. data/lib/resources/nginx_conf.rb +227 -227
  419. data/lib/resources/npm.rb +48 -48
  420. data/lib/resources/ntp_conf.rb +58 -58
  421. data/lib/resources/oneget.rb +71 -71
  422. data/lib/resources/oracledb_session.rb +139 -139
  423. data/lib/resources/os.rb +36 -36
  424. data/lib/resources/os_env.rb +76 -76
  425. data/lib/resources/package.rb +370 -370
  426. data/lib/resources/packages.rb +111 -111
  427. data/lib/resources/parse_config.rb +116 -116
  428. data/lib/resources/passwd.rb +74 -74
  429. data/lib/resources/pip.rb +89 -89
  430. data/lib/resources/platform.rb +109 -109
  431. data/lib/resources/port.rb +771 -771
  432. data/lib/resources/postgres.rb +130 -130
  433. data/lib/resources/postgres_conf.rb +121 -121
  434. data/lib/resources/postgres_hba_conf.rb +99 -100
  435. data/lib/resources/postgres_ident_conf.rb +76 -78
  436. data/lib/resources/postgres_session.rb +71 -71
  437. data/lib/resources/powershell.rb +53 -57
  438. data/lib/resources/processes.rb +204 -204
  439. data/lib/resources/rabbitmq_conf.rb +52 -52
  440. data/lib/resources/registry_key.rb +296 -296
  441. data/lib/resources/security_policy.rb +180 -180
  442. data/lib/resources/service.rb +789 -789
  443. data/lib/resources/shadow.rb +146 -140
  444. data/lib/resources/ssh_conf.rb +102 -102
  445. data/lib/resources/ssl.rb +99 -99
  446. data/lib/resources/sys_info.rb +28 -28
  447. data/lib/resources/toml.rb +32 -32
  448. data/lib/resources/users.rb +654 -654
  449. data/lib/resources/vbscript.rb +68 -69
  450. data/lib/resources/virtualization.rb +247 -247
  451. data/lib/resources/windows_feature.rb +84 -84
  452. data/lib/resources/windows_hotfix.rb +35 -35
  453. data/lib/resources/windows_task.rb +102 -105
  454. data/lib/resources/wmi.rb +110 -113
  455. data/lib/resources/x509_certificate.rb +143 -143
  456. data/lib/resources/xinetd.rb +111 -111
  457. data/lib/resources/xml.rb +46 -46
  458. data/lib/resources/yaml.rb +47 -47
  459. data/lib/resources/yum.rb +180 -180
  460. data/lib/resources/zfs_dataset.rb +60 -60
  461. data/lib/resources/zfs_pool.rb +49 -49
  462. data/lib/source_readers/flat.rb +39 -39
  463. data/lib/source_readers/inspec.rb +75 -75
  464. data/lib/utils/command_wrapper.rb +27 -27
  465. data/lib/utils/convert.rb +12 -12
  466. data/lib/utils/database_helpers.rb +77 -77
  467. data/lib/utils/erlang_parser.rb +192 -192
  468. data/lib/utils/filter.rb +272 -272
  469. data/lib/utils/filter_array.rb +27 -27
  470. data/lib/utils/find_files.rb +44 -44
  471. data/lib/utils/hash.rb +41 -41
  472. data/lib/utils/json_log.rb +18 -18
  473. data/lib/utils/latest_version.rb +22 -22
  474. data/lib/utils/modulator.rb +12 -12
  475. data/lib/utils/nginx_parser.rb +85 -85
  476. data/lib/utils/object_traversal.rb +49 -49
  477. data/lib/utils/parser.rb +274 -274
  478. data/lib/utils/plugin_registry.rb +93 -93
  479. data/lib/utils/simpleconfig.rb +120 -120
  480. data/lib/utils/spdx.rb +13 -13
  481. data/lib/utils/spdx.txt +343 -343
  482. metadata +2 -2
data/docs/platforms.md CHANGED
@@ -1,119 +1,119 @@
1
- # Using InSpec 2.0 on Cloud Platforms
2
-
3
- We are pleased to announce that with this release of InSpec 2.0, we have expanded our platform support beyond individual machines and now include support for select AWS and Azure resources.
4
-
5
- With InSpec 2.0, you may now use several InSpec resources to audit properties of your cloud infrastructure - for example, an Amazon Web Services S3 bucket.
6
-
7
- <br>
8
-
9
- ## AWS Platform Support in InSpec 2.0
10
-
11
- ### Setting up AWS credentials for InSpec
12
-
13
- InSpec uses the standard AWS authentication mechanisms. Typically, you will create an IAM user specifically for auditing activities.
14
-
15
- * 1 Create an IAM user in the AWS console, with your choice of username. Check the box marked "Programmatic Access."
16
- * 2 On the Permissions screen, choose Direct Attach. Select the AWS-managed IAM Profile named "ReadOnlyAccess." If you wish to restrict the user further, you may do so; see individual InSpec resources to identify which permissions are required.
17
- * 3 After generating the key, record the Access Key ID and Secret Key.
18
-
19
- #### Using Environment Variables to provide credentials
20
-
21
- You may provide the credentials to InSpec by setting the following environment variables: `AWS_REGION`, `AWS_ACCESS_KEY_ID`, and `AWS_SECRET_KEY_ID`. You may also use `AWS_PROFILE`, or if you are using MFA, `AWS_SESSION_TOKEN`. See the [AWS Command Line Interface Docs](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) for details.
22
-
23
- Once you have your environment variables set, you can verify your credentials by running:
24
-
25
- ```bash
26
- you$ inspec detect -t aws://
27
-
28
- == Platform Details
29
- Name: aws
30
- Families: cloud, api
31
- Release: aws-sdk-v2.10.125
32
- ```
33
-
34
- #### Using the InSpec target option to provide credentials on AWS
35
-
36
- Look for a file in your home directory named `~/.aws/credentials`. If it does not exist, create it. Choose a name for your profile; here, we're using the name 'auditing'. Add your credentials as a new profile, in INI format:
37
-
38
- ```bash
39
- [auditing]
40
- aws_access_key_id = AKIA....
41
- aws_secret_access_key = 1234....abcd
42
- ```
43
-
44
- You may now run InSpec using the `--target` / `-t` option, using the format `-t aws://region/profile`. For example, to connect to the Ohio region using a profile named 'auditing', use `-t aws://us-east-2/auditing`.
45
-
46
- To verify your credentials,
47
-
48
- ```bash
49
- you$ inspec detect -t aws://
50
-
51
- == Platform Details
52
- Name: aws
53
- Families: cloud, api
54
- Release: aws-sdk-v2.10.125
55
- ```
56
-
57
- <br>
58
-
59
- ## Azure Platform Support in InSpec 2.0
60
-
61
- ### Setting up Azure credentials for InSpec
62
-
63
- To use InSpec Azure resources, you will need to create a Service Principal Name (SPN) for auditing an Azure subscription.
64
-
65
- This can be done on the command line or from the Azure Portal:
66
-
67
- * [Azure CLI](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal-cli)
68
- * [PowerShell](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal)
69
- * [Azure Portal](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal)
70
-
71
- The information from the SPN can be specified either in the file `~/.azure/credentials`, as environment variables, or by using InSpec target URIs.
72
-
73
- #### Setting up the Azure Credentials File
74
-
75
- By default InSpec is configured to look at ~/.azure/credentials, and it should contain:
76
-
77
- ```powershell
78
- [<SUBSCRIPTION_ID>]
79
- client_id = "<CLIENT_ID>"
80
- client_secret = "<CLIENT_SECRET>"
81
- tenant_id = "<TENANT_ID>"
82
- ```
83
-
84
- NOTE: In the Azure web portal, these values are labeled differently:
85
- * The client_id is referred to as the 'Application ID'
86
- * The client_secret is referred to as the 'Key (Password Type)'
87
- * The tenant_id is referred to as the 'Directory ID'
88
-
89
- With the credentials are in place you may now execute InSpec:
90
-
91
- ```bash
92
- inspec exec my-inspec-profile -t azure://
93
- ```
94
-
95
- #### Using Environment variables to provide credentials
96
-
97
- You may also set the Azure credentials via environment variables:
98
-
99
- * `AZURE_SUBSCRIPTION_ID`
100
- * `AZURE_CLIENT_ID`
101
- * `AZURE_CLIENT_SECRET`
102
- * `AZURE_TENANT_ID`
103
-
104
- For example:
105
-
106
- ```bash
107
- AZURE_SUBSCRIPTION_ID="2fbdbb02-df2e-11e6-bf01-fe55135034f3" \
108
- AZURE_CLIENT_ID="58dc4f6c-df2e-11e6-bf01-fe55135034f3" \
109
- AZURE_CLIENT_SECRET="Jibr4iwwaaZwBb6W" \
110
- AZURE_TENANT_ID="6ad89b58-df2e-11e6-bf01-fe55135034f3" inspec exec my-profile -t azure://
111
- ```
112
-
113
- #### Using the InSpec target option to provide credentials on Azure
114
-
115
- If you have created a `~/.azure/credentials` file as above, you may also use the InSpec command line `--target` / `-t` option to select a subscription ID. For example:
116
-
117
- ```bash
118
- inspec exec my-profile -t azure://2fbdbb02-df2e-11e6-bf01-fe55135034f3
1
+ # Using InSpec 2.0 on Cloud Platforms
2
+
3
+ We are pleased to announce that with this release of InSpec 2.0, we have expanded our platform support beyond individual machines and now include support for select AWS and Azure resources.
4
+
5
+ With InSpec 2.0, you may now use several InSpec resources to audit properties of your cloud infrastructure - for example, an Amazon Web Services S3 bucket.
6
+
7
+ <br>
8
+
9
+ ## AWS Platform Support in InSpec 2.0
10
+
11
+ ### Setting up AWS credentials for InSpec
12
+
13
+ InSpec uses the standard AWS authentication mechanisms. Typically, you will create an IAM user specifically for auditing activities.
14
+
15
+ * 1 Create an IAM user in the AWS console, with your choice of username. Check the box marked "Programmatic Access."
16
+ * 2 On the Permissions screen, choose Direct Attach. Select the AWS-managed IAM Profile named "ReadOnlyAccess." If you wish to restrict the user further, you may do so; see individual InSpec resources to identify which permissions are required.
17
+ * 3 After generating the key, record the Access Key ID and Secret Key.
18
+
19
+ #### Using Environment Variables to provide credentials
20
+
21
+ You may provide the credentials to InSpec by setting the following environment variables: `AWS_REGION`, `AWS_ACCESS_KEY_ID`, and `AWS_SECRET_KEY_ID`. You may also use `AWS_PROFILE`, or if you are using MFA, `AWS_SESSION_TOKEN`. See the [AWS Command Line Interface Docs](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) for details.
22
+
23
+ Once you have your environment variables set, you can verify your credentials by running:
24
+
25
+ ```bash
26
+ you$ inspec detect -t aws://
27
+
28
+ == Platform Details
29
+ Name: aws
30
+ Families: cloud, api
31
+ Release: aws-sdk-v2.10.125
32
+ ```
33
+
34
+ #### Using the InSpec target option to provide credentials on AWS
35
+
36
+ Look for a file in your home directory named `~/.aws/credentials`. If it does not exist, create it. Choose a name for your profile; here, we're using the name 'auditing'. Add your credentials as a new profile, in INI format:
37
+
38
+ ```bash
39
+ [auditing]
40
+ aws_access_key_id = AKIA....
41
+ aws_secret_access_key = 1234....abcd
42
+ ```
43
+
44
+ You may now run InSpec using the `--target` / `-t` option, using the format `-t aws://region/profile`. For example, to connect to the Ohio region using a profile named 'auditing', use `-t aws://us-east-2/auditing`.
45
+
46
+ To verify your credentials,
47
+
48
+ ```bash
49
+ you$ inspec detect -t aws://
50
+
51
+ == Platform Details
52
+ Name: aws
53
+ Families: cloud, api
54
+ Release: aws-sdk-v2.10.125
55
+ ```
56
+
57
+ <br>
58
+
59
+ ## Azure Platform Support in InSpec 2.0
60
+
61
+ ### Setting up Azure credentials for InSpec
62
+
63
+ To use InSpec Azure resources, you will need to create a Service Principal Name (SPN) for auditing an Azure subscription.
64
+
65
+ This can be done on the command line or from the Azure Portal:
66
+
67
+ * [Azure CLI](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal-cli)
68
+ * [PowerShell](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-authenticate-service-principal)
69
+ * [Azure Portal](https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-create-service-principal-portal)
70
+
71
+ The information from the SPN can be specified either in the file `~/.azure/credentials`, as environment variables, or by using InSpec target URIs.
72
+
73
+ #### Setting up the Azure Credentials File
74
+
75
+ By default InSpec is configured to look at ~/.azure/credentials, and it should contain:
76
+
77
+ ```powershell
78
+ [<SUBSCRIPTION_ID>]
79
+ client_id = "<CLIENT_ID>"
80
+ client_secret = "<CLIENT_SECRET>"
81
+ tenant_id = "<TENANT_ID>"
82
+ ```
83
+
84
+ NOTE: In the Azure web portal, these values are labeled differently:
85
+ * The client_id is referred to as the 'Application ID'
86
+ * The client_secret is referred to as the 'Key (Password Type)'
87
+ * The tenant_id is referred to as the 'Directory ID'
88
+
89
+ With the credentials are in place you may now execute InSpec:
90
+
91
+ ```bash
92
+ inspec exec my-inspec-profile -t azure://
93
+ ```
94
+
95
+ #### Using Environment variables to provide credentials
96
+
97
+ You may also set the Azure credentials via environment variables:
98
+
99
+ * `AZURE_SUBSCRIPTION_ID`
100
+ * `AZURE_CLIENT_ID`
101
+ * `AZURE_CLIENT_SECRET`
102
+ * `AZURE_TENANT_ID`
103
+
104
+ For example:
105
+
106
+ ```bash
107
+ AZURE_SUBSCRIPTION_ID="2fbdbb02-df2e-11e6-bf01-fe55135034f3" \
108
+ AZURE_CLIENT_ID="58dc4f6c-df2e-11e6-bf01-fe55135034f3" \
109
+ AZURE_CLIENT_SECRET="Jibr4iwwaaZwBb6W" \
110
+ AZURE_TENANT_ID="6ad89b58-df2e-11e6-bf01-fe55135034f3" inspec exec my-profile -t azure://
111
+ ```
112
+
113
+ #### Using the InSpec target option to provide credentials on Azure
114
+
115
+ If you have created a `~/.azure/credentials` file as above, you may also use the InSpec command line `--target` / `-t` option to select a subscription ID. For example:
116
+
117
+ ```bash
118
+ inspec exec my-profile -t azure://2fbdbb02-df2e-11e6-bf01-fe55135034f3
119
119
  ```
@@ -1,49 +1,49 @@
1
- ---
2
- title: About kitchen-inspec
3
- ---
4
-
5
- # kitchen-inspec
6
-
7
- Use InSpec as a Kitchen verifier with `kitchen-inspec`.
8
-
9
- Add the InSpec verifier to the `.kitchen.yml` file:
10
-
11
- verifier:
12
- name: inspec
13
-
14
- Use a compliance profile from the Chef Compliance server:
15
-
16
- suites:
17
- - name: compliance
18
- run_list:
19
- - recipe[ssh-hardening::default]
20
- verifier:
21
- inspec_tests:
22
- - compliance://base/ssh
23
-
24
- and then run the following command:
25
-
26
- $ inspec compliance login https://compliance.test --user admin --insecure --token ''
27
-
28
- where `--insecure` is required when using self-signed certificates.
29
-
30
- Use a compliance profile from the Chef Supermarket:
31
-
32
- suites:
33
- - name: supermarket
34
- run_list:
35
- - recipe[ssh-hardening::default]
36
- verifier:
37
- inspec_tests:
38
- - supermarket://dev-sec/ssh-baseline
39
-
40
- Use InSpec tests from the local file system:
41
-
42
- suites:
43
- - name: local
44
- run_list:
45
- - recipe[my_cookbook::default]
46
- verifier:
47
- inspec_tests:
48
- - test/integration/default
49
-
1
+ ---
2
+ title: About kitchen-inspec
3
+ ---
4
+
5
+ # kitchen-inspec
6
+
7
+ Use InSpec as a Kitchen verifier with `kitchen-inspec`.
8
+
9
+ Add the InSpec verifier to the `.kitchen.yml` file:
10
+
11
+ verifier:
12
+ name: inspec
13
+
14
+ Use a compliance profile from the Chef Compliance server:
15
+
16
+ suites:
17
+ - name: compliance
18
+ run_list:
19
+ - recipe[ssh-hardening::default]
20
+ verifier:
21
+ inspec_tests:
22
+ - compliance://base/ssh
23
+
24
+ and then run the following command:
25
+
26
+ $ inspec compliance login https://compliance.test --user admin --insecure --token ''
27
+
28
+ where `--insecure` is required when using self-signed certificates.
29
+
30
+ Use a compliance profile from the Chef Supermarket:
31
+
32
+ suites:
33
+ - name: supermarket
34
+ run_list:
35
+ - recipe[ssh-hardening::default]
36
+ verifier:
37
+ inspec_tests:
38
+ - supermarket://dev-sec/ssh-baseline
39
+
40
+ Use InSpec tests from the local file system:
41
+
42
+ suites:
43
+ - name: local
44
+ run_list:
45
+ - recipe[my_cookbook::default]
46
+ verifier:
47
+ inspec_tests:
48
+ - test/integration/default
49
+
data/docs/profiles.md CHANGED
@@ -1,370 +1,370 @@
1
- ---
2
- title: About InSpec Profiles
3
- ---
4
-
5
- # InSpec Profiles
6
-
7
- InSpec supports the creation of complex test and compliance profiles, which organize controls to support dependency management and code reuse. Each profile is a standalone structure with its own distribution and execution flow.
8
-
9
- # Profile Structure
10
-
11
- A profile should have the following structure::
12
-
13
- examples/profile
14
- ├── README.md
15
- ├── controls
16
- │ ├── example.rb
17
- │ └── control_etc.rb
18
- ├── libraries
19
- │ └── extension.rb
20
- |── files
21
- │ └── extras.conf
22
- └── inspec.yml
23
-
24
- where:
25
-
26
- * `inspec.yml` includes the profile description (required)
27
- * `controls` is the directory in which all tests are located (required)
28
- * `libraries` is the directory in which all InSpec resource extensions are located (optional)
29
- * `files` is the directory with additional files that a profile can access (optional)
30
- * `README.md` should be used to explain the profile, its scope, and usage
31
-
32
- See a complete example profile in the InSpec open source repository: https://github.com/chef/inspec/tree/master/examples/profile
33
-
34
- ## inspec.yml
35
-
36
- Each profile must have an `inspec.yml` file that defines the following information:
37
-
38
- * Use `name` to specify a unique name for the profile. Required.
39
- * Use `title` to specify a human-readable name for the profile.
40
- * Use `maintainer` to specify the profile maintainer.
41
- * Use `copyright` to specify the copyright holder.
42
- * Use `copyright_email` to specify support contact information for the profile, typically an email address.
43
- * Use `license` to specify the license for the profile.
44
- * Use `summary` to specify a one line summary for the profile.
45
- * Use `description` to specify a multiple line description of the profile.
46
- * Use `version` to specify the profile version.
47
- * Use `supports` to specify a list of supported platform targets.
48
- * Use `depends` to define a list of profiles on which this profile depends.
49
-
50
- `name` is required; all other profile settings are optional. For example:
51
-
52
- name: ssh
53
- title: Basic SSH
54
- maintainer: Chef Software, Inc.
55
- copyright: Chef Software, Inc.
56
- copyright_email: support@chef.io
57
- license: Proprietary, All rights reserved
58
- summary: Verify that SSH Server and SSH Client are configured securely
59
- version: 1.0.0
60
- supports:
61
- - os-family: linux
62
- depends:
63
- - name: profile
64
- path: ../path/to/profile
65
-
66
- ## Verify Profiles
67
-
68
- Use the `inspec check` command to verify the implementation of a profile:
69
-
70
- $ inspec check examples/profile
71
-
72
- # Platform Support
73
-
74
- Use the `supports` setting in the `inspec.yml` file to specify one (or more) platforms for which a profile is targeting. The list of supported platforms may contain simple names, names and versions, or detailed flags, and may be combined arbitrarily. For example, to target anything running Debian Linux:
75
-
76
- name: ssh
77
- supports:
78
- - os-name: debian
79
-
80
- and to target only Ubuntu version 14.04
81
-
82
- name: ssh
83
- supports:
84
- - os-name: ubuntu
85
- release: 14.04
86
-
87
- and to target the entire RedHat platform (including CentOS and Oracle Linux):
88
-
89
- name: ssh
90
- supports:
91
- - os-family: redhat
92
-
93
- and to target anything running on Amazon AWS:
94
-
95
- name: ssh
96
- supports:
97
- - platform: aws
98
-
99
- and to target all of these examples in a single `inspec.yml` file:
100
-
101
- name: ssh
102
- supports:
103
- - os-name: debian
104
- - os-name: ubuntu
105
- release: 14.04
106
- - os-family: redhat
107
- - platform: aws
108
-
109
-
110
- # Profile Dependencies
111
-
112
- An InSpec profile can bring in the controls and custom resources from another InSpec profile. Additionally, when inheriting the controls of another profile, a profile can skip or even modify those included controls.
113
-
114
- ## Defining the Dependencies
115
-
116
- Before a profile can use controls from another profile, the to-be-included profile needs to be specified in the including profile’s `inspec.yml` file in the `depends` section. For each profile to be included, a location for the profile from where to be fetched and a name for the profile should be included. For example:
117
-
118
- depends:
119
- - name: linux-baseline
120
- url: https://github.com/dev-sec/linux-baseline/archive/master.tar.gz
121
- - name: ssh-baseline
122
- url: https://github.com/dev-sec/ssh-baseline/archive/master.tar.gz
123
-
124
- InSpec supports a number of dependency sources.
125
-
126
- ### path
127
-
128
- The `path` setting defines a profile that is located on disk. This setting is typically used during development of profiles and when debugging profiles.
129
-
130
- depends:
131
- - name: my-profile
132
- path: /absolute/path
133
- - name: another
134
- path: ../relative/path
135
-
136
- ### url
137
-
138
- The `url` setting specifies a profile that is located at an HTTP- or HTTPS-based URL. The profile must be accessible via a HTTP GET operation and must be a valid profile archive (zip, tar, or tar.gz format).
139
-
140
- depends:
141
- - name: my-profile
142
- url: https://my.domain/path/to/profile.tgz
143
- - name: profile-via-git
144
- url: https://github.com/myusername/myprofile-repo/archive/master.tar.gz
145
-
146
- ### git
147
-
148
- A `git` setting specifies a profile that is located in a git repository, with optional settings for branch, tag, commit, and version. The source location is translated into a URL upon resolution. This type of dependency supports version constraints via semantic versioning as git tags.
149
-
150
- For example:
151
-
152
- depends:
153
- - name: git-profile
154
- git: http://url/to/repo
155
- branch: desired_branch
156
- tag: desired_version
157
- commit: pinned_commit
158
- version: semver_via_tags
159
-
160
- ### supermarket
161
-
162
- A `supermarket` setting specifies a profile that is located in a cookbook hosted on Chef Supermarket. The source location is translated into a URL upon resolution.
163
-
164
- For example:
165
-
166
- depends:
167
- - name: supermarket-profile
168
- supermarket: supermarket-username/supermarket-profile
169
-
170
- Available Supermarket profiles can be listed with `inspec supermarket profiles`.
171
-
172
- ### compliance
173
-
174
- A `compliance` setting specifies a profile that is located on the Chef Automate or Chef Compliance server.
175
-
176
- For example:
177
-
178
- depends:
179
- - name: linux
180
- compliance: base/linux
181
-
182
- ## Vendoring Dependencies
183
-
184
- When you execute a local profile, the `inspec.yml` file will be read in order to source any profile dependencies. It will then cache the dependencies locally and generate an `inspec.lock` file.
185
-
186
- If you add or update dependencies in `inspec.yml`, dependencies may be re-vendored and the lockfile updated with `inspec vendor --overwrite`
187
-
188
- ## Using Controls from an Included Profile
189
-
190
- Once defined in the `inspec.yml`, controls from the included profiles can be used! Let’s look at some examples.
191
-
192
- ### Including All Controls from a Profile
193
-
194
- With the `include_controls` command in a profile, all controls from the named profile will be executed every time the including profile is executed.
195
-
196
- ![Include Controls](/images/profile_inheritance/include_controls.png)
197
-
198
- In the example above, every time `my-app-profile` is executed, all the controls from `my-baseline` are also executed. Therefore, the following controls would be executed:
199
-
200
- * myapp-1
201
- * myapp-2
202
- * myapp-3
203
- * baseline-1
204
- * baseline-2
205
-
206
- This is a great reminder that having a good naming convention for your controls is helpful to avoid confusion when
207
- including controls from other profiles!
208
-
209
- ### Skipping a Control from a Profile
210
-
211
- What if one of the controls from the included profile does not apply to your environment? Luckily, it is not necessary to maintain a slightly-modified copy of the included profile just to delete a control. The `skip_control` command tells InSpec to not run a particular control.
212
-
213
- ![Include Controls with Skip](/images/profile_inheritance/include_controls_with_skip.png)
214
-
215
- In the above example, all controls from `my-app-profile` and `my-baseline` profile will be executed every time `my-app-profile` is executed **except** for control `baseline-2` from the `my-baseline` profile.
216
-
217
- ### Modifying a Control
218
-
219
- Let's say a particular control from an included profile should still be run, but the impact isn't appropriate? Perhaps the test should still run, but if it fails, it should be treated as low severity instead of high severity?
220
-
221
- When a control is included, it can also be modified!
222
-
223
- ![Include Controls with Modification](/images/profile_inheritance/include_controls_with_mod.png)
224
-
225
- In the above example, all controls from `my-baseline` are executed along with all the controls from the including profile, `my-app-profile`. However, should control `baseline-1` fail, it will be raised with an impact of `0.5` instead of the originally-intended impact of `1.0`.
226
-
227
- ### Selectively Including Controls from a Profile
228
-
229
- If there are only a handful of controls that should be executed from an included profile, it's not necessarily to skip all the unneeded controls, or worse, copy/paste those controls bit-for-bit into your profile. Instead, use the `require_controls` command.
230
-
231
- ![Require Controls](/images/profile_inheritance/require_controls.png)
232
-
233
- Whenever `my-app-profile` is executed, in addition to its own controls, it will run only the controls specified in the `require_controls` block. In the case, the following controls would be executed:
234
-
235
- * myapp-1
236
- * myapp-2
237
- * myapp-3
238
- * baseline-2
239
- * baseline-4
240
-
241
- Controls `baseline-1`, `baseline-3`, and `baseline-5` would not be run, just as if they were manually skipped. This method of including specific controls ensures only the controls specified are executed; if new controls are added to a later version of `my-baseline`, they would not be run.
242
-
243
- And, just the way its possible to modify controls when using `include_controls`, controls can be modified as well.
244
-
245
- ![Require Controls with Modification](/images/profile_inheritance/require_controls_with_mod.png)
246
-
247
- As with the prior example, only `baseline-2` and `baseline-4` are executed, but if `baseline-2` fails, it will report with an impact of `0.5` instead of the originally-intended `1.0` impact.
248
-
249
- ## Using Resources from an Included Profile
250
-
251
- By default, all of the custom resources from a listed dependency are available
252
- for use in your profile. If two of your dependencies provide a resource with
253
- the same name, you can use the `require_resource` DSL function to
254
- disambiguate the two:
255
-
256
- require_resource(profile: 'my_dep', resource: 'my_res',
257
- as: 'my_res2')
258
-
259
- This will allow you to reference the resource `my_res` from the
260
- profile `my_dep` using the name `my_res2`.
261
-
262
- # Profile Attributes
263
-
264
- Attributes may be used in profiles to define secrets, such as user names and passwords, that should not otherwise be stored in plain-text in a cookbook. First specify a variable in the control for each secret, then add the secret to a Yaml file located on the local machine, and then run `inspec exec` and specify the path to that Yaml file using the `--attrs` attribute.
265
-
266
- For example, a control:
267
-
268
- # define these attributes on the top-level of your file and re-use them across all tests!
269
- val_user = attribute('user', default: 'alice', description: 'An identification for the user')
270
- val_password = attribute('password', description: 'A value for the password')
271
-
272
- control 'system-users' do
273
- impact 0.8
274
- desc '
275
- This test assures that the user "Bob" has a user installed on the system, along with a
276
- specified password.
277
- '
278
-
279
- describe val_user do
280
- it { should eq 'bob' }
281
- end
282
-
283
- describe val_password do
284
- it { should eq 'secret' }
285
- end
286
- end
287
-
288
- And a Yaml file named `profile-attribute.yml`:
289
-
290
- user: bob
291
- password: secret
292
-
293
- The following command runs the tests and applies the secrets specified in `profile-attribute.yml`:
294
-
295
- $ inspec exec examples/profile-attribute --attrs examples/profile-attribute.yml
296
-
297
- See the full example in the InSpec open source repository: https://github.com/chef/inspec/tree/master/examples/profile-attribute
298
-
299
- # Profile files
300
-
301
- An InSpec profile may contain additional files that can be accessed during tests. This covers use-cases where e.g. a list of ports is provided to be tested.
302
-
303
- To access these files, they must be stored in the `files` directory at the root of a profile. They are accessed by their name relative to this folder with `inspec.profile.file(...)`.
304
-
305
- Here is an example for reading and testing a list of ports. The folder structure is:
306
-
307
- examples/profile
308
- ├── controls
309
- │ ├── example.rb
310
- |── files
311
- │ └── services.yml
312
- └── inspec.yml
313
-
314
- With `services.yml` containing:
315
-
316
- - service_name: httpd-alpha
317
- port: 80
318
- - service_name: httpd-beta
319
- port: 8080
320
-
321
- The tests in `example.rb` can now access this file:
322
-
323
- my_services = yaml(content: inspec.profile.file('services.yml')).params
324
-
325
- my_services.each do |s|
326
- describe service(s['service_name']) do
327
- it { should be_running }
328
- end
329
-
330
- describe port(s['port']) do
331
- it { should be_listening }
332
- end
333
- end
334
-
335
- # "should" vs. "expect" syntax
336
-
337
- Users familiar with the RSpec testing framework may know that there are two ways to write test statements: `should` and `expect`. The RSpec community decided that `expect` is the preferred syntax. However, InSpec recommends the `should` syntax as it tends to read more easily to those users who are not as technical.
338
-
339
- InSpec will continue to support both methods of writing tests. Consider this `file` test:
340
-
341
- describe file('/tmp/test.txt') do
342
- it { should be_file }
343
- end
344
-
345
- This can be re-written with `expect` syntax
346
-
347
- describe file('/tmp/test.txt') do
348
- it 'should be a file' do
349
- expect(subject).to(be_file)
350
- end
351
- end
352
-
353
- The output of both of the above examples looks like this:
354
-
355
- File /tmp/test.txt
356
- ✔ should be a file
357
-
358
- In addition, you can make use of the `subject` keyword to further control your output if you choose:
359
-
360
- describe 'test file' do
361
- subject { file('/tmp/test.txt') }
362
- it 'should be a file' do
363
- expect(subject).to(be_file)
364
- end
365
- end
366
-
367
- ... which will render the following output:
368
-
369
- test file
370
- ✔ should be a file
1
+ ---
2
+ title: About InSpec Profiles
3
+ ---
4
+
5
+ # InSpec Profiles
6
+
7
+ InSpec supports the creation of complex test and compliance profiles, which organize controls to support dependency management and code reuse. Each profile is a standalone structure with its own distribution and execution flow.
8
+
9
+ # Profile Structure
10
+
11
+ A profile should have the following structure::
12
+
13
+ examples/profile
14
+ ├── README.md
15
+ ├── controls
16
+ │ ├── example.rb
17
+ │ └── control_etc.rb
18
+ ├── libraries
19
+ │ └── extension.rb
20
+ |── files
21
+ │ └── extras.conf
22
+ └── inspec.yml
23
+
24
+ where:
25
+
26
+ * `inspec.yml` includes the profile description (required)
27
+ * `controls` is the directory in which all tests are located (required)
28
+ * `libraries` is the directory in which all InSpec resource extensions are located (optional)
29
+ * `files` is the directory with additional files that a profile can access (optional)
30
+ * `README.md` should be used to explain the profile, its scope, and usage
31
+
32
+ See a complete example profile in the InSpec open source repository: https://github.com/chef/inspec/tree/master/examples/profile
33
+
34
+ ## inspec.yml
35
+
36
+ Each profile must have an `inspec.yml` file that defines the following information:
37
+
38
+ * Use `name` to specify a unique name for the profile. Required.
39
+ * Use `title` to specify a human-readable name for the profile.
40
+ * Use `maintainer` to specify the profile maintainer.
41
+ * Use `copyright` to specify the copyright holder.
42
+ * Use `copyright_email` to specify support contact information for the profile, typically an email address.
43
+ * Use `license` to specify the license for the profile.
44
+ * Use `summary` to specify a one line summary for the profile.
45
+ * Use `description` to specify a multiple line description of the profile.
46
+ * Use `version` to specify the profile version.
47
+ * Use `supports` to specify a list of supported platform targets.
48
+ * Use `depends` to define a list of profiles on which this profile depends.
49
+
50
+ `name` is required; all other profile settings are optional. For example:
51
+
52
+ name: ssh
53
+ title: Basic SSH
54
+ maintainer: Chef Software, Inc.
55
+ copyright: Chef Software, Inc.
56
+ copyright_email: support@chef.io
57
+ license: Proprietary, All rights reserved
58
+ summary: Verify that SSH Server and SSH Client are configured securely
59
+ version: 1.0.0
60
+ supports:
61
+ - os-family: linux
62
+ depends:
63
+ - name: profile
64
+ path: ../path/to/profile
65
+
66
+ ## Verify Profiles
67
+
68
+ Use the `inspec check` command to verify the implementation of a profile:
69
+
70
+ $ inspec check examples/profile
71
+
72
+ # Platform Support
73
+
74
+ Use the `supports` setting in the `inspec.yml` file to specify one (or more) platforms for which a profile is targeting. The list of supported platforms may contain simple names, names and versions, or detailed flags, and may be combined arbitrarily. For example, to target anything running Debian Linux:
75
+
76
+ name: ssh
77
+ supports:
78
+ - os-name: debian
79
+
80
+ and to target only Ubuntu version 14.04
81
+
82
+ name: ssh
83
+ supports:
84
+ - os-name: ubuntu
85
+ release: 14.04
86
+
87
+ and to target the entire RedHat platform (including CentOS and Oracle Linux):
88
+
89
+ name: ssh
90
+ supports:
91
+ - os-family: redhat
92
+
93
+ and to target anything running on Amazon AWS:
94
+
95
+ name: ssh
96
+ supports:
97
+ - platform: aws
98
+
99
+ and to target all of these examples in a single `inspec.yml` file:
100
+
101
+ name: ssh
102
+ supports:
103
+ - os-name: debian
104
+ - os-name: ubuntu
105
+ release: 14.04
106
+ - os-family: redhat
107
+ - platform: aws
108
+
109
+
110
+ # Profile Dependencies
111
+
112
+ An InSpec profile can bring in the controls and custom resources from another InSpec profile. Additionally, when inheriting the controls of another profile, a profile can skip or even modify those included controls.
113
+
114
+ ## Defining the Dependencies
115
+
116
+ Before a profile can use controls from another profile, the to-be-included profile needs to be specified in the including profile’s `inspec.yml` file in the `depends` section. For each profile to be included, a location for the profile from where to be fetched and a name for the profile should be included. For example:
117
+
118
+ depends:
119
+ - name: linux-baseline
120
+ url: https://github.com/dev-sec/linux-baseline/archive/master.tar.gz
121
+ - name: ssh-baseline
122
+ url: https://github.com/dev-sec/ssh-baseline/archive/master.tar.gz
123
+
124
+ InSpec supports a number of dependency sources.
125
+
126
+ ### path
127
+
128
+ The `path` setting defines a profile that is located on disk. This setting is typically used during development of profiles and when debugging profiles.
129
+
130
+ depends:
131
+ - name: my-profile
132
+ path: /absolute/path
133
+ - name: another
134
+ path: ../relative/path
135
+
136
+ ### url
137
+
138
+ The `url` setting specifies a profile that is located at an HTTP- or HTTPS-based URL. The profile must be accessible via a HTTP GET operation and must be a valid profile archive (zip, tar, or tar.gz format).
139
+
140
+ depends:
141
+ - name: my-profile
142
+ url: https://my.domain/path/to/profile.tgz
143
+ - name: profile-via-git
144
+ url: https://github.com/myusername/myprofile-repo/archive/master.tar.gz
145
+
146
+ ### git
147
+
148
+ A `git` setting specifies a profile that is located in a git repository, with optional settings for branch, tag, commit, and version. The source location is translated into a URL upon resolution. This type of dependency supports version constraints via semantic versioning as git tags.
149
+
150
+ For example:
151
+
152
+ depends:
153
+ - name: git-profile
154
+ git: http://url/to/repo
155
+ branch: desired_branch
156
+ tag: desired_version
157
+ commit: pinned_commit
158
+ version: semver_via_tags
159
+
160
+ ### supermarket
161
+
162
+ A `supermarket` setting specifies a profile that is located in a cookbook hosted on Chef Supermarket. The source location is translated into a URL upon resolution.
163
+
164
+ For example:
165
+
166
+ depends:
167
+ - name: supermarket-profile
168
+ supermarket: supermarket-username/supermarket-profile
169
+
170
+ Available Supermarket profiles can be listed with `inspec supermarket profiles`.
171
+
172
+ ### compliance
173
+
174
+ A `compliance` setting specifies a profile that is located on the Chef Automate or Chef Compliance server.
175
+
176
+ For example:
177
+
178
+ depends:
179
+ - name: linux
180
+ compliance: base/linux
181
+
182
+ ## Vendoring Dependencies
183
+
184
+ When you execute a local profile, the `inspec.yml` file will be read in order to source any profile dependencies. It will then cache the dependencies locally and generate an `inspec.lock` file.
185
+
186
+ If you add or update dependencies in `inspec.yml`, dependencies may be re-vendored and the lockfile updated with `inspec vendor --overwrite`
187
+
188
+ ## Using Controls from an Included Profile
189
+
190
+ Once defined in the `inspec.yml`, controls from the included profiles can be used! Let’s look at some examples.
191
+
192
+ ### Including All Controls from a Profile
193
+
194
+ With the `include_controls` command in a profile, all controls from the named profile will be executed every time the including profile is executed.
195
+
196
+ ![Include Controls](/images/profile_inheritance/include_controls.png)
197
+
198
+ In the example above, every time `my-app-profile` is executed, all the controls from `my-baseline` are also executed. Therefore, the following controls would be executed:
199
+
200
+ * myapp-1
201
+ * myapp-2
202
+ * myapp-3
203
+ * baseline-1
204
+ * baseline-2
205
+
206
+ This is a great reminder that having a good naming convention for your controls is helpful to avoid confusion when
207
+ including controls from other profiles!
208
+
209
+ ### Skipping a Control from a Profile
210
+
211
+ What if one of the controls from the included profile does not apply to your environment? Luckily, it is not necessary to maintain a slightly-modified copy of the included profile just to delete a control. The `skip_control` command tells InSpec to not run a particular control.
212
+
213
+ ![Include Controls with Skip](/images/profile_inheritance/include_controls_with_skip.png)
214
+
215
+ In the above example, all controls from `my-app-profile` and `my-baseline` profile will be executed every time `my-app-profile` is executed **except** for control `baseline-2` from the `my-baseline` profile.
216
+
217
+ ### Modifying a Control
218
+
219
+ Let's say a particular control from an included profile should still be run, but the impact isn't appropriate? Perhaps the test should still run, but if it fails, it should be treated as low severity instead of high severity?
220
+
221
+ When a control is included, it can also be modified!
222
+
223
+ ![Include Controls with Modification](/images/profile_inheritance/include_controls_with_mod.png)
224
+
225
+ In the above example, all controls from `my-baseline` are executed along with all the controls from the including profile, `my-app-profile`. However, should control `baseline-1` fail, it will be raised with an impact of `0.5` instead of the originally-intended impact of `1.0`.
226
+
227
+ ### Selectively Including Controls from a Profile
228
+
229
+ If there are only a handful of controls that should be executed from an included profile, it's not necessarily to skip all the unneeded controls, or worse, copy/paste those controls bit-for-bit into your profile. Instead, use the `require_controls` command.
230
+
231
+ ![Require Controls](/images/profile_inheritance/require_controls.png)
232
+
233
+ Whenever `my-app-profile` is executed, in addition to its own controls, it will run only the controls specified in the `require_controls` block. In the case, the following controls would be executed:
234
+
235
+ * myapp-1
236
+ * myapp-2
237
+ * myapp-3
238
+ * baseline-2
239
+ * baseline-4
240
+
241
+ Controls `baseline-1`, `baseline-3`, and `baseline-5` would not be run, just as if they were manually skipped. This method of including specific controls ensures only the controls specified are executed; if new controls are added to a later version of `my-baseline`, they would not be run.
242
+
243
+ And, just the way its possible to modify controls when using `include_controls`, controls can be modified as well.
244
+
245
+ ![Require Controls with Modification](/images/profile_inheritance/require_controls_with_mod.png)
246
+
247
+ As with the prior example, only `baseline-2` and `baseline-4` are executed, but if `baseline-2` fails, it will report with an impact of `0.5` instead of the originally-intended `1.0` impact.
248
+
249
+ ## Using Resources from an Included Profile
250
+
251
+ By default, all of the custom resources from a listed dependency are available
252
+ for use in your profile. If two of your dependencies provide a resource with
253
+ the same name, you can use the `require_resource` DSL function to
254
+ disambiguate the two:
255
+
256
+ require_resource(profile: 'my_dep', resource: 'my_res',
257
+ as: 'my_res2')
258
+
259
+ This will allow you to reference the resource `my_res` from the
260
+ profile `my_dep` using the name `my_res2`.
261
+
262
+ # Profile Attributes
263
+
264
+ Attributes may be used in profiles to define secrets, such as user names and passwords, that should not otherwise be stored in plain-text in a cookbook. First specify a variable in the control for each secret, then add the secret to a Yaml file located on the local machine, and then run `inspec exec` and specify the path to that Yaml file using the `--attrs` attribute.
265
+
266
+ For example, a control:
267
+
268
+ # define these attributes on the top-level of your file and re-use them across all tests!
269
+ val_user = attribute('user', default: 'alice', description: 'An identification for the user')
270
+ val_password = attribute('password', description: 'A value for the password')
271
+
272
+ control 'system-users' do
273
+ impact 0.8
274
+ desc '
275
+ This test assures that the user "Bob" has a user installed on the system, along with a
276
+ specified password.
277
+ '
278
+
279
+ describe val_user do
280
+ it { should eq 'bob' }
281
+ end
282
+
283
+ describe val_password do
284
+ it { should eq 'secret' }
285
+ end
286
+ end
287
+
288
+ And a Yaml file named `profile-attribute.yml`:
289
+
290
+ user: bob
291
+ password: secret
292
+
293
+ The following command runs the tests and applies the secrets specified in `profile-attribute.yml`:
294
+
295
+ $ inspec exec examples/profile-attribute --attrs examples/profile-attribute.yml
296
+
297
+ See the full example in the InSpec open source repository: https://github.com/chef/inspec/tree/master/examples/profile-attribute
298
+
299
+ # Profile files
300
+
301
+ An InSpec profile may contain additional files that can be accessed during tests. This covers use-cases where e.g. a list of ports is provided to be tested.
302
+
303
+ To access these files, they must be stored in the `files` directory at the root of a profile. They are accessed by their name relative to this folder with `inspec.profile.file(...)`.
304
+
305
+ Here is an example for reading and testing a list of ports. The folder structure is:
306
+
307
+ examples/profile
308
+ ├── controls
309
+ │ ├── example.rb
310
+ |── files
311
+ │ └── services.yml
312
+ └── inspec.yml
313
+
314
+ With `services.yml` containing:
315
+
316
+ - service_name: httpd-alpha
317
+ port: 80
318
+ - service_name: httpd-beta
319
+ port: 8080
320
+
321
+ The tests in `example.rb` can now access this file:
322
+
323
+ my_services = yaml(content: inspec.profile.file('services.yml')).params
324
+
325
+ my_services.each do |s|
326
+ describe service(s['service_name']) do
327
+ it { should be_running }
328
+ end
329
+
330
+ describe port(s['port']) do
331
+ it { should be_listening }
332
+ end
333
+ end
334
+
335
+ # "should" vs. "expect" syntax
336
+
337
+ Users familiar with the RSpec testing framework may know that there are two ways to write test statements: `should` and `expect`. The RSpec community decided that `expect` is the preferred syntax. However, InSpec recommends the `should` syntax as it tends to read more easily to those users who are not as technical.
338
+
339
+ InSpec will continue to support both methods of writing tests. Consider this `file` test:
340
+
341
+ describe file('/tmp/test.txt') do
342
+ it { should be_file }
343
+ end
344
+
345
+ This can be re-written with `expect` syntax
346
+
347
+ describe file('/tmp/test.txt') do
348
+ it 'should be a file' do
349
+ expect(subject).to(be_file)
350
+ end
351
+ end
352
+
353
+ The output of both of the above examples looks like this:
354
+
355
+ File /tmp/test.txt
356
+ ✔ should be a file
357
+
358
+ In addition, you can make use of the `subject` keyword to further control your output if you choose:
359
+
360
+ describe 'test file' do
361
+ subject { file('/tmp/test.txt') }
362
+ it 'should be a file' do
363
+ expect(subject).to(be_file)
364
+ end
365
+ end
366
+
367
+ ... which will render the following output:
368
+
369
+ test file
370
+ ✔ should be a file