inspec 2.1.30 → 2.1.43

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (503) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +0 -0
  3. data/CHANGELOG.md +39 -18
  4. data/Gemfile +0 -0
  5. data/LICENSE +0 -0
  6. data/MAINTAINERS.md +0 -0
  7. data/MAINTAINERS.toml +0 -0
  8. data/README.md +2 -2
  9. data/Rakefile +4 -2
  10. data/docs/.gitignore +0 -0
  11. data/docs/README.md +0 -0
  12. data/docs/dsl_inspec.md +0 -0
  13. data/docs/dsl_resource.md +0 -0
  14. data/docs/glossary.md +0 -0
  15. data/docs/habitat.md +0 -0
  16. data/docs/inspec_and_friends.md +0 -0
  17. data/docs/matchers.md +0 -0
  18. data/docs/migration.md +0 -0
  19. data/docs/platforms.md +0 -0
  20. data/docs/plugin_kitchen_inspec.md +0 -0
  21. data/docs/profiles.md +2 -0
  22. data/docs/reporters.md +0 -0
  23. data/docs/resources/aide_conf.md.erb +0 -0
  24. data/docs/resources/apache.md.erb +0 -0
  25. data/docs/resources/apache_conf.md.erb +0 -0
  26. data/docs/resources/apt.md.erb +0 -0
  27. data/docs/resources/audit_policy.md.erb +0 -0
  28. data/docs/resources/auditd.md.erb +0 -0
  29. data/docs/resources/auditd_conf.md.erb +0 -0
  30. data/docs/resources/aws_cloudtrail_trail.md.erb +9 -0
  31. data/docs/resources/aws_cloudtrail_trails.md.erb +0 -0
  32. data/docs/resources/aws_cloudwatch_alarm.md.erb +1 -1
  33. data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +0 -0
  34. data/docs/resources/aws_config_delivery_channel.md +0 -0
  35. data/docs/resources/aws_config_recorder.md.erb +0 -0
  36. data/docs/resources/aws_ec2_instance.md.erb +0 -0
  37. data/docs/resources/aws_iam_access_key.md.erb +0 -0
  38. data/docs/resources/aws_iam_access_keys.md.erb +0 -0
  39. data/docs/resources/aws_iam_group.md.erb +12 -0
  40. data/docs/resources/aws_iam_groups.md.erb +0 -0
  41. data/docs/resources/aws_iam_password_policy.md.erb +0 -0
  42. data/docs/resources/aws_iam_policies.md.erb +0 -0
  43. data/docs/resources/aws_iam_policy.md.erb +99 -4
  44. data/docs/resources/aws_iam_role.md.erb +0 -0
  45. data/docs/resources/aws_iam_root_user.md.erb +2 -2
  46. data/docs/resources/aws_iam_user.md.erb +0 -0
  47. data/docs/resources/aws_iam_users.md.erb +0 -0
  48. data/docs/resources/aws_kms_key.md.erb +0 -0
  49. data/docs/resources/aws_kms_keys.md.erb +0 -0
  50. data/docs/resources/aws_rds_instance.md.erb +0 -0
  51. data/docs/resources/aws_route_table.md.erb +0 -0
  52. data/docs/resources/aws_route_tables.md.erb +0 -0
  53. data/docs/resources/aws_s3_bucket.md.erb +0 -0
  54. data/docs/resources/aws_s3_bucket_object.md.erb +0 -0
  55. data/docs/resources/aws_s3_buckets.md.erb +0 -0
  56. data/docs/resources/aws_security_group.md.erb +160 -21
  57. data/docs/resources/aws_security_groups.md.erb +0 -0
  58. data/docs/resources/aws_sns_subscription.md.erb +0 -0
  59. data/docs/resources/aws_sns_topic.md.erb +0 -0
  60. data/docs/resources/aws_sns_topics.md.erb +0 -0
  61. data/docs/resources/aws_subnet.md.erb +0 -0
  62. data/docs/resources/aws_subnets.md.erb +0 -0
  63. data/docs/resources/aws_vpc.md.erb +0 -0
  64. data/docs/resources/aws_vpcs.md.erb +73 -2
  65. data/docs/resources/azure_generic_resource.md.erb +0 -0
  66. data/docs/resources/azure_resource_group.md.erb +0 -0
  67. data/docs/resources/azure_virtual_machine.md.erb +0 -0
  68. data/docs/resources/azure_virtual_machine_data_disk.md.erb +0 -0
  69. data/docs/resources/bash.md.erb +0 -0
  70. data/docs/resources/bond.md.erb +0 -0
  71. data/docs/resources/bridge.md.erb +0 -0
  72. data/docs/resources/bsd_service.md.erb +0 -0
  73. data/docs/resources/chocolatey_package.md.erb +0 -0
  74. data/docs/resources/command.md.erb +0 -0
  75. data/docs/resources/cpan.md.erb +0 -0
  76. data/docs/resources/cran.md.erb +0 -0
  77. data/docs/resources/crontab.md.erb +0 -0
  78. data/docs/resources/csv.md.erb +0 -0
  79. data/docs/resources/dh_params.md.erb +0 -0
  80. data/docs/resources/directory.md.erb +0 -0
  81. data/docs/resources/docker.md.erb +0 -0
  82. data/docs/resources/docker_container.md.erb +0 -0
  83. data/docs/resources/docker_image.md.erb +0 -0
  84. data/docs/resources/docker_service.md.erb +0 -0
  85. data/docs/resources/elasticsearch.md.erb +0 -0
  86. data/docs/resources/etc_fstab.md.erb +0 -0
  87. data/docs/resources/etc_group.md.erb +0 -0
  88. data/docs/resources/etc_hosts.md.erb +0 -0
  89. data/docs/resources/etc_hosts_allow.md.erb +0 -0
  90. data/docs/resources/etc_hosts_deny.md.erb +0 -0
  91. data/docs/resources/file.md.erb +0 -0
  92. data/docs/resources/filesystem.md.erb +1 -1
  93. data/docs/resources/firewalld.md.erb +0 -0
  94. data/docs/resources/gem.md.erb +0 -0
  95. data/docs/resources/group.md.erb +0 -0
  96. data/docs/resources/grub_conf.md.erb +0 -0
  97. data/docs/resources/host.md.erb +0 -0
  98. data/docs/resources/http.md.erb +0 -0
  99. data/docs/resources/iis_app.md.erb +0 -0
  100. data/docs/resources/iis_site.md.erb +0 -0
  101. data/docs/resources/inetd_conf.md.erb +0 -0
  102. data/docs/resources/ini.md.erb +0 -0
  103. data/docs/resources/interface.md.erb +0 -0
  104. data/docs/resources/iptables.md.erb +0 -0
  105. data/docs/resources/json.md.erb +0 -0
  106. data/docs/resources/kernel_module.md.erb +0 -0
  107. data/docs/resources/kernel_parameter.md.erb +0 -0
  108. data/docs/resources/key_rsa.md.erb +0 -0
  109. data/docs/resources/launchd_service.md.erb +0 -0
  110. data/docs/resources/limits_conf.md.erb +0 -0
  111. data/docs/resources/login_defs.md.erb +0 -0
  112. data/docs/resources/mount.md.erb +0 -0
  113. data/docs/resources/mssql_session.md.erb +0 -0
  114. data/docs/resources/mysql_conf.md.erb +0 -0
  115. data/docs/resources/mysql_session.md.erb +0 -0
  116. data/docs/resources/nginx.md.erb +0 -0
  117. data/docs/resources/nginx_conf.md.erb +0 -0
  118. data/docs/resources/npm.md.erb +0 -0
  119. data/docs/resources/ntp_conf.md.erb +0 -0
  120. data/docs/resources/oneget.md.erb +0 -0
  121. data/docs/resources/oracledb_session.md.erb +0 -0
  122. data/docs/resources/os.md.erb +0 -0
  123. data/docs/resources/os_env.md.erb +0 -0
  124. data/docs/resources/package.md.erb +4 -4
  125. data/docs/resources/packages.md.erb +0 -0
  126. data/docs/resources/parse_config.md.erb +0 -0
  127. data/docs/resources/parse_config_file.md.erb +0 -0
  128. data/docs/resources/passwd.md.erb +0 -0
  129. data/docs/resources/pip.md.erb +0 -0
  130. data/docs/resources/port.md.erb +0 -0
  131. data/docs/resources/postgres_conf.md.erb +0 -0
  132. data/docs/resources/postgres_hba_conf.md.erb +0 -0
  133. data/docs/resources/postgres_ident_conf.md.erb +0 -0
  134. data/docs/resources/postgres_session.md.erb +0 -0
  135. data/docs/resources/powershell.md.erb +0 -0
  136. data/docs/resources/processes.md.erb +0 -0
  137. data/docs/resources/rabbitmq_config.md.erb +0 -0
  138. data/docs/resources/registry_key.md.erb +0 -0
  139. data/docs/resources/runit_service.md.erb +0 -0
  140. data/docs/resources/security_policy.md.erb +0 -0
  141. data/docs/resources/service.md.erb +0 -0
  142. data/docs/resources/shadow.md.erb +0 -0
  143. data/docs/resources/ssh_config.md.erb +0 -0
  144. data/docs/resources/sshd_config.md.erb +0 -0
  145. data/docs/resources/ssl.md.erb +0 -0
  146. data/docs/resources/sys_info.md.erb +0 -0
  147. data/docs/resources/systemd_service.md.erb +0 -0
  148. data/docs/resources/sysv_service.md.erb +0 -0
  149. data/docs/resources/upstart_service.md.erb +0 -0
  150. data/docs/resources/user.md.erb +0 -0
  151. data/docs/resources/users.md.erb +0 -0
  152. data/docs/resources/vbscript.md.erb +0 -0
  153. data/docs/resources/virtualization.md.erb +0 -0
  154. data/docs/resources/windows_feature.md.erb +0 -0
  155. data/docs/resources/windows_hotfix.md.erb +0 -0
  156. data/docs/resources/windows_task.md.erb +0 -0
  157. data/docs/resources/wmi.md.erb +0 -0
  158. data/docs/resources/x509_certificate.md.erb +0 -0
  159. data/docs/resources/xinetd_conf.md.erb +0 -0
  160. data/docs/resources/xml.md.erb +0 -0
  161. data/docs/resources/yaml.md.erb +0 -0
  162. data/docs/resources/yum.md.erb +0 -0
  163. data/docs/resources/zfs_dataset.md.erb +0 -0
  164. data/docs/resources/zfs_pool.md.erb +0 -0
  165. data/docs/ruby_usage.md +0 -0
  166. data/docs/shared/matcher_be.md.erb +0 -0
  167. data/docs/shared/matcher_cmp.md.erb +0 -0
  168. data/docs/shared/matcher_eq.md.erb +0 -0
  169. data/docs/shared/matcher_include.md.erb +0 -0
  170. data/docs/shared/matcher_match.md.erb +0 -0
  171. data/docs/shell.md +0 -0
  172. data/examples/README.md +0 -0
  173. data/examples/inheritance/README.md +0 -0
  174. data/examples/inheritance/controls/example.rb +0 -0
  175. data/examples/inheritance/inspec.yml +0 -0
  176. data/examples/kitchen-ansible/.kitchen.yml +0 -0
  177. data/examples/kitchen-ansible/Gemfile +0 -0
  178. data/examples/kitchen-ansible/README.md +0 -0
  179. data/examples/kitchen-ansible/files/nginx.repo +0 -0
  180. data/examples/kitchen-ansible/tasks/main.yml +0 -0
  181. data/examples/kitchen-ansible/test/integration/default/default.yml +0 -0
  182. data/examples/kitchen-ansible/test/integration/default/web_spec.rb +0 -0
  183. data/examples/kitchen-chef/.kitchen.yml +0 -0
  184. data/examples/kitchen-chef/Berksfile +0 -0
  185. data/examples/kitchen-chef/Gemfile +0 -0
  186. data/examples/kitchen-chef/README.md +0 -0
  187. data/examples/kitchen-chef/metadata.rb +0 -0
  188. data/examples/kitchen-chef/recipes/default.rb +0 -0
  189. data/examples/kitchen-chef/recipes/nginx.rb +0 -0
  190. data/examples/kitchen-chef/test/integration/default/web_spec.rb +0 -0
  191. data/examples/kitchen-puppet/.kitchen.yml +0 -0
  192. data/examples/kitchen-puppet/Gemfile +0 -0
  193. data/examples/kitchen-puppet/Puppetfile +0 -0
  194. data/examples/kitchen-puppet/README.md +0 -0
  195. data/examples/kitchen-puppet/manifests/site.pp +0 -0
  196. data/examples/kitchen-puppet/metadata.json +0 -0
  197. data/examples/kitchen-puppet/test/integration/default/web_spec.rb +0 -0
  198. data/examples/meta-profile/README.md +0 -0
  199. data/examples/meta-profile/controls/example.rb +0 -0
  200. data/examples/meta-profile/inspec.yml +0 -0
  201. data/examples/profile-attribute.yml +0 -0
  202. data/examples/profile-attribute/README.md +0 -0
  203. data/examples/profile-attribute/controls/example.rb +0 -0
  204. data/examples/profile-attribute/inspec.yml +0 -0
  205. data/examples/profile-aws/controls/iam_password_policy_expiration.rb +0 -0
  206. data/examples/profile-aws/controls/iam_password_policy_max_age.rb +0 -0
  207. data/examples/profile-aws/controls/iam_root_user_mfa.rb +0 -0
  208. data/examples/profile-aws/controls/iam_users_access_key_age.rb +0 -0
  209. data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +0 -0
  210. data/examples/profile-aws/inspec.yml +0 -0
  211. data/examples/profile-azure/controls/azure_resource_group_example.rb +0 -0
  212. data/examples/profile-azure/controls/azure_vm_example.rb +0 -0
  213. data/examples/profile-azure/inspec.yml +0 -0
  214. data/examples/profile-sensitive/README.md +0 -0
  215. data/examples/profile-sensitive/controls/sensitive-failures.rb +0 -0
  216. data/examples/profile-sensitive/controls/sensitive.rb +0 -0
  217. data/examples/profile-sensitive/inspec.yml +0 -0
  218. data/examples/profile/README.md +0 -0
  219. data/examples/profile/controls/example.rb +0 -0
  220. data/examples/profile/controls/gordon.rb +0 -0
  221. data/examples/profile/controls/meta.rb +0 -0
  222. data/examples/profile/inspec.yml +0 -0
  223. data/examples/profile/libraries/gordon_config.rb +0 -0
  224. data/inspec.gemspec +1 -1
  225. data/lib/bundles/README.md +0 -0
  226. data/lib/bundles/inspec-artifact.rb +0 -0
  227. data/lib/bundles/inspec-artifact/README.md +0 -0
  228. data/lib/bundles/inspec-artifact/cli.rb +0 -0
  229. data/lib/bundles/inspec-compliance.rb +0 -0
  230. data/lib/bundles/inspec-compliance/.kitchen.yml +0 -0
  231. data/lib/bundles/inspec-compliance/README.md +0 -0
  232. data/lib/bundles/inspec-compliance/api/login.rb +0 -0
  233. data/lib/bundles/inspec-compliance/bootstrap.sh +0 -0
  234. data/lib/bundles/inspec-compliance/cli.rb +0 -0
  235. data/lib/bundles/inspec-compliance/configuration.rb +0 -0
  236. data/lib/bundles/inspec-compliance/http.rb +0 -0
  237. data/lib/bundles/inspec-compliance/images/cc-token.png +0 -0
  238. data/lib/bundles/inspec-compliance/support.rb +0 -0
  239. data/lib/bundles/inspec-compliance/target.rb +0 -0
  240. data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +0 -0
  241. data/lib/bundles/inspec-habitat.rb +0 -0
  242. data/lib/bundles/inspec-habitat/cli.rb +0 -0
  243. data/lib/bundles/inspec-habitat/log.rb +0 -0
  244. data/lib/bundles/inspec-habitat/profile.rb +0 -0
  245. data/lib/bundles/inspec-init.rb +0 -0
  246. data/lib/bundles/inspec-init/README.md +0 -0
  247. data/lib/bundles/inspec-init/cli.rb +0 -0
  248. data/lib/bundles/inspec-init/templates/profile/README.md +0 -0
  249. data/lib/bundles/inspec-init/templates/profile/controls/example.rb +0 -0
  250. data/lib/bundles/inspec-init/templates/profile/inspec.yml +0 -0
  251. data/lib/bundles/inspec-init/templates/profile/libraries/.gitkeep +0 -0
  252. data/lib/bundles/inspec-supermarket.rb +0 -0
  253. data/lib/bundles/inspec-supermarket/README.md +0 -0
  254. data/lib/bundles/inspec-supermarket/api.rb +0 -0
  255. data/lib/bundles/inspec-supermarket/cli.rb +0 -0
  256. data/lib/bundles/inspec-supermarket/target.rb +0 -0
  257. data/lib/fetchers/git.rb +0 -0
  258. data/lib/fetchers/local.rb +0 -0
  259. data/lib/fetchers/mock.rb +0 -0
  260. data/lib/fetchers/url.rb +0 -0
  261. data/lib/inspec.rb +0 -0
  262. data/lib/inspec/archive/tar.rb +0 -0
  263. data/lib/inspec/archive/zip.rb +0 -0
  264. data/lib/inspec/backend.rb +0 -0
  265. data/lib/inspec/base_cli.rb +2 -0
  266. data/lib/inspec/cached_fetcher.rb +0 -0
  267. data/lib/inspec/cli.rb +0 -0
  268. data/lib/inspec/completions/bash.sh.erb +0 -0
  269. data/lib/inspec/completions/fish.sh.erb +0 -0
  270. data/lib/inspec/completions/zsh.sh.erb +0 -0
  271. data/lib/inspec/control_eval_context.rb +0 -0
  272. data/lib/inspec/dependencies/cache.rb +0 -0
  273. data/lib/inspec/dependencies/dependency_set.rb +0 -0
  274. data/lib/inspec/dependencies/lockfile.rb +0 -0
  275. data/lib/inspec/dependencies/requirement.rb +0 -0
  276. data/lib/inspec/dependencies/resolver.rb +0 -0
  277. data/lib/inspec/describe.rb +0 -0
  278. data/lib/inspec/dsl.rb +0 -0
  279. data/lib/inspec/dsl_shared.rb +0 -0
  280. data/lib/inspec/env_printer.rb +0 -0
  281. data/lib/inspec/errors.rb +0 -0
  282. data/lib/inspec/exceptions.rb +0 -0
  283. data/lib/inspec/expect.rb +0 -0
  284. data/lib/inspec/fetcher.rb +0 -0
  285. data/lib/inspec/file_provider.rb +0 -0
  286. data/lib/inspec/formatters.rb +0 -0
  287. data/lib/inspec/formatters/base.rb +0 -0
  288. data/lib/inspec/formatters/json_rspec.rb +0 -0
  289. data/lib/inspec/formatters/show_progress.rb +0 -0
  290. data/lib/inspec/library_eval_context.rb +0 -0
  291. data/lib/inspec/log.rb +0 -0
  292. data/lib/inspec/metadata.rb +0 -0
  293. data/lib/inspec/method_source.rb +0 -0
  294. data/lib/inspec/objects.rb +0 -0
  295. data/lib/inspec/objects/attribute.rb +11 -1
  296. data/lib/inspec/objects/control.rb +0 -0
  297. data/lib/inspec/objects/describe.rb +0 -0
  298. data/lib/inspec/objects/each_loop.rb +0 -0
  299. data/lib/inspec/objects/list.rb +0 -0
  300. data/lib/inspec/objects/or_test.rb +0 -0
  301. data/lib/inspec/objects/ruby_helper.rb +0 -0
  302. data/lib/inspec/objects/tag.rb +0 -0
  303. data/lib/inspec/objects/test.rb +0 -0
  304. data/lib/inspec/objects/value.rb +0 -0
  305. data/lib/inspec/plugins.rb +0 -0
  306. data/lib/inspec/plugins/cli.rb +0 -0
  307. data/lib/inspec/plugins/fetcher.rb +0 -0
  308. data/lib/inspec/plugins/resource.rb +0 -0
  309. data/lib/inspec/plugins/secret.rb +0 -0
  310. data/lib/inspec/plugins/source_reader.rb +0 -0
  311. data/lib/inspec/polyfill.rb +0 -0
  312. data/lib/inspec/profile.rb +0 -0
  313. data/lib/inspec/profile_context.rb +0 -0
  314. data/lib/inspec/profile_vendor.rb +0 -0
  315. data/lib/inspec/reporters.rb +0 -0
  316. data/lib/inspec/reporters/automate.rb +0 -0
  317. data/lib/inspec/reporters/base.rb +0 -0
  318. data/lib/inspec/reporters/cli.rb +0 -0
  319. data/lib/inspec/reporters/json.rb +0 -0
  320. data/lib/inspec/reporters/json_min.rb +0 -0
  321. data/lib/inspec/reporters/junit.rb +1 -0
  322. data/lib/inspec/require_loader.rb +0 -0
  323. data/lib/inspec/resource.rb +0 -0
  324. data/lib/inspec/rule.rb +0 -0
  325. data/lib/inspec/runner.rb +0 -0
  326. data/lib/inspec/runner_mock.rb +0 -0
  327. data/lib/inspec/runner_rspec.rb +0 -0
  328. data/lib/inspec/runtime_profile.rb +0 -0
  329. data/lib/inspec/schema.rb +0 -0
  330. data/lib/inspec/secrets.rb +0 -0
  331. data/lib/inspec/secrets/yaml.rb +0 -0
  332. data/lib/inspec/shell.rb +0 -0
  333. data/lib/inspec/shell_detector.rb +0 -0
  334. data/lib/inspec/source_reader.rb +0 -0
  335. data/lib/inspec/version.rb +1 -1
  336. data/lib/matchers/matchers.rb +0 -0
  337. data/lib/resource_support/aws.rb +0 -0
  338. data/lib/resource_support/aws/aws_backend_base.rb +0 -0
  339. data/lib/resource_support/aws/aws_backend_factory_mixin.rb +0 -0
  340. data/lib/resource_support/aws/aws_plural_resource_mixin.rb +0 -0
  341. data/lib/resource_support/aws/aws_resource_mixin.rb +0 -0
  342. data/lib/resource_support/aws/aws_singular_resource_mixin.rb +0 -0
  343. data/lib/resources/aide_conf.rb +0 -0
  344. data/lib/resources/apache.rb +0 -0
  345. data/lib/resources/apache_conf.rb +0 -0
  346. data/lib/resources/apt.rb +0 -0
  347. data/lib/resources/audit_policy.rb +0 -0
  348. data/lib/resources/auditd.rb +0 -0
  349. data/lib/resources/auditd_conf.rb +0 -0
  350. data/lib/resources/aws/aws_cloudtrail_trail.rb +16 -0
  351. data/lib/resources/aws/aws_cloudtrail_trails.rb +0 -0
  352. data/lib/resources/aws/aws_cloudwatch_alarm.rb +1 -1
  353. data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +0 -0
  354. data/lib/resources/aws/aws_config_delivery_channel.rb +0 -0
  355. data/lib/resources/aws/aws_config_recorder.rb +0 -0
  356. data/lib/resources/aws/aws_ec2_instance.rb +0 -0
  357. data/lib/resources/aws/aws_iam_access_key.rb +0 -0
  358. data/lib/resources/aws/aws_iam_access_keys.rb +0 -0
  359. data/lib/resources/aws/aws_iam_group.rb +4 -2
  360. data/lib/resources/aws/aws_iam_groups.rb +0 -0
  361. data/lib/resources/aws/aws_iam_password_policy.rb +0 -0
  362. data/lib/resources/aws/aws_iam_policies.rb +0 -0
  363. data/lib/resources/aws/aws_iam_policy.rb +148 -0
  364. data/lib/resources/aws/aws_iam_role.rb +0 -0
  365. data/lib/resources/aws/aws_iam_root_user.rb +0 -0
  366. data/lib/resources/aws/aws_iam_user.rb +0 -0
  367. data/lib/resources/aws/aws_iam_users.rb +0 -0
  368. data/lib/resources/aws/aws_kms_key.rb +0 -0
  369. data/lib/resources/aws/aws_kms_keys.rb +0 -0
  370. data/lib/resources/aws/aws_rds_instance.rb +0 -0
  371. data/lib/resources/aws/aws_route_table.rb +0 -0
  372. data/lib/resources/aws/aws_route_tables.rb +0 -0
  373. data/lib/resources/aws/aws_s3_bucket.rb +0 -0
  374. data/lib/resources/aws/aws_s3_bucket_object.rb +0 -0
  375. data/lib/resources/aws/aws_s3_buckets.rb +0 -0
  376. data/lib/resources/aws/aws_security_group.rb +163 -7
  377. data/lib/resources/aws/aws_security_groups.rb +0 -0
  378. data/lib/resources/aws/aws_sns_subscription.rb +0 -0
  379. data/lib/resources/aws/aws_sns_topic.rb +0 -0
  380. data/lib/resources/aws/aws_sns_topics.rb +0 -0
  381. data/lib/resources/aws/aws_subnet.rb +0 -0
  382. data/lib/resources/aws/aws_subnets.rb +0 -0
  383. data/lib/resources/aws/aws_vpc.rb +12 -8
  384. data/lib/resources/aws/aws_vpcs.rb +8 -1
  385. data/lib/resources/azure/azure_backend.rb +0 -0
  386. data/lib/resources/azure/azure_generic_resource.rb +0 -0
  387. data/lib/resources/azure/azure_resource_group.rb +0 -0
  388. data/lib/resources/azure/azure_virtual_machine.rb +0 -0
  389. data/lib/resources/azure/azure_virtual_machine_data_disk.rb +0 -0
  390. data/lib/resources/bash.rb +0 -0
  391. data/lib/resources/bond.rb +0 -0
  392. data/lib/resources/bridge.rb +0 -0
  393. data/lib/resources/chocolatey_package.rb +0 -0
  394. data/lib/resources/command.rb +0 -0
  395. data/lib/resources/cpan.rb +0 -0
  396. data/lib/resources/cran.rb +0 -0
  397. data/lib/resources/crontab.rb +0 -0
  398. data/lib/resources/csv.rb +0 -0
  399. data/lib/resources/dh_params.rb +0 -0
  400. data/lib/resources/directory.rb +0 -0
  401. data/lib/resources/docker.rb +0 -0
  402. data/lib/resources/docker_container.rb +0 -0
  403. data/lib/resources/docker_image.rb +0 -0
  404. data/lib/resources/docker_object.rb +0 -0
  405. data/lib/resources/docker_service.rb +0 -0
  406. data/lib/resources/elasticsearch.rb +0 -0
  407. data/lib/resources/etc_fstab.rb +0 -0
  408. data/lib/resources/etc_group.rb +0 -0
  409. data/lib/resources/etc_hosts.rb +0 -0
  410. data/lib/resources/etc_hosts_allow_deny.rb +0 -0
  411. data/lib/resources/file.rb +0 -0
  412. data/lib/resources/filesystem.rb +0 -0
  413. data/lib/resources/firewalld.rb +0 -0
  414. data/lib/resources/gem.rb +0 -0
  415. data/lib/resources/groups.rb +0 -0
  416. data/lib/resources/grub_conf.rb +0 -0
  417. data/lib/resources/host.rb +0 -0
  418. data/lib/resources/http.rb +0 -0
  419. data/lib/resources/iis_app.rb +0 -0
  420. data/lib/resources/iis_site.rb +0 -0
  421. data/lib/resources/inetd_conf.rb +0 -0
  422. data/lib/resources/ini.rb +0 -0
  423. data/lib/resources/interface.rb +0 -0
  424. data/lib/resources/iptables.rb +0 -0
  425. data/lib/resources/json.rb +0 -0
  426. data/lib/resources/kernel_module.rb +0 -0
  427. data/lib/resources/kernel_parameter.rb +0 -0
  428. data/lib/resources/key_rsa.rb +3 -1
  429. data/lib/resources/limits_conf.rb +0 -0
  430. data/lib/resources/login_def.rb +0 -0
  431. data/lib/resources/mount.rb +0 -0
  432. data/lib/resources/mssql_session.rb +0 -0
  433. data/lib/resources/mysql.rb +0 -0
  434. data/lib/resources/mysql_conf.rb +0 -0
  435. data/lib/resources/mysql_session.rb +0 -0
  436. data/lib/resources/nginx.rb +0 -0
  437. data/lib/resources/nginx_conf.rb +0 -0
  438. data/lib/resources/npm.rb +0 -0
  439. data/lib/resources/ntp_conf.rb +0 -0
  440. data/lib/resources/oneget.rb +0 -0
  441. data/lib/resources/oracledb_session.rb +0 -0
  442. data/lib/resources/os.rb +0 -0
  443. data/lib/resources/os_env.rb +0 -0
  444. data/lib/resources/package.rb +0 -0
  445. data/lib/resources/packages.rb +0 -0
  446. data/lib/resources/parse_config.rb +0 -0
  447. data/lib/resources/passwd.rb +0 -0
  448. data/lib/resources/pip.rb +0 -0
  449. data/lib/resources/platform.rb +0 -0
  450. data/lib/resources/port.rb +0 -0
  451. data/lib/resources/postgres.rb +0 -0
  452. data/lib/resources/postgres_conf.rb +0 -0
  453. data/lib/resources/postgres_hba_conf.rb +0 -0
  454. data/lib/resources/postgres_ident_conf.rb +0 -0
  455. data/lib/resources/postgres_session.rb +0 -0
  456. data/lib/resources/powershell.rb +1 -0
  457. data/lib/resources/processes.rb +0 -0
  458. data/lib/resources/rabbitmq_conf.rb +0 -0
  459. data/lib/resources/registry_key.rb +0 -0
  460. data/lib/resources/security_policy.rb +0 -0
  461. data/lib/resources/service.rb +0 -0
  462. data/lib/resources/shadow.rb +20 -10
  463. data/lib/resources/ssh_conf.rb +0 -0
  464. data/lib/resources/ssl.rb +0 -0
  465. data/lib/resources/sys_info.rb +0 -0
  466. data/lib/resources/toml.rb +0 -0
  467. data/lib/resources/users.rb +0 -0
  468. data/lib/resources/vbscript.rb +0 -0
  469. data/lib/resources/virtualization.rb +0 -0
  470. data/lib/resources/windows_feature.rb +0 -0
  471. data/lib/resources/windows_hotfix.rb +0 -0
  472. data/lib/resources/windows_task.rb +0 -0
  473. data/lib/resources/wmi.rb +0 -0
  474. data/lib/resources/x509_certificate.rb +0 -0
  475. data/lib/resources/xinetd.rb +0 -0
  476. data/lib/resources/xml.rb +0 -0
  477. data/lib/resources/yaml.rb +0 -0
  478. data/lib/resources/yum.rb +0 -0
  479. data/lib/resources/zfs_dataset.rb +0 -0
  480. data/lib/resources/zfs_pool.rb +0 -0
  481. data/lib/source_readers/flat.rb +0 -0
  482. data/lib/source_readers/inspec.rb +0 -0
  483. data/lib/utils/command_wrapper.rb +0 -0
  484. data/lib/utils/convert.rb +0 -0
  485. data/lib/utils/database_helpers.rb +0 -0
  486. data/lib/utils/erlang_parser.rb +0 -0
  487. data/lib/utils/file_reader.rb +0 -0
  488. data/lib/utils/filter.rb +0 -0
  489. data/lib/utils/filter_array.rb +0 -0
  490. data/lib/utils/find_files.rb +0 -0
  491. data/lib/utils/hash.rb +0 -0
  492. data/lib/utils/json_log.rb +0 -0
  493. data/lib/utils/latest_version.rb +0 -0
  494. data/lib/utils/modulator.rb +0 -0
  495. data/lib/utils/nginx_parser.rb +0 -0
  496. data/lib/utils/object_traversal.rb +0 -0
  497. data/lib/utils/parser.rb +0 -0
  498. data/lib/utils/pkey_reader.rb +15 -0
  499. data/lib/utils/plugin_registry.rb +0 -0
  500. data/lib/utils/simpleconfig.rb +0 -0
  501. data/lib/utils/spdx.rb +0 -0
  502. data/lib/utils/spdx.txt +0 -0
  503. metadata +5 -4
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,22 +1,174 @@
1
+ require 'set'
2
+ require 'ipaddr'
3
+
1
4
  class AwsSecurityGroup < Inspec.resource(1)
2
5
  name 'aws_security_group'
3
6
  desc 'Verifies settings for an individual AWS Security Group.'
4
- example '
5
- describe aws_security_group("sg-12345678") do
6
- it { should exist }
7
- end
8
- '
7
+ example "
8
+ describe aws_security_group('sg-12345678') do
9
+ it { should exist }
10
+ end
11
+ "
9
12
  supports platform: 'aws'
10
13
 
11
14
  include AwsSingularResourceMixin
12
- attr_reader :description, :group_id, :group_name, :vpc_id
15
+ attr_reader :description, :group_id, :group_name, :vpc_id, :inbound_rules, :outbound_rules
13
16
 
14
17
  def to_s
15
18
  "EC2 Security Group #{@group_id}"
16
19
  end
17
20
 
21
+ def allow_in?(criteria = {})
22
+ allow(inbound_rules, criteria)
23
+ end
24
+ RSpec::Matchers.alias_matcher :allow_in, :be_allow_in
25
+
26
+ def allow_out?(criteria = {})
27
+ allow(outbound_rules, criteria)
28
+ end
29
+ RSpec::Matchers.alias_matcher :allow_out, :be_allow_out
30
+
31
+ def allow_in_only?(criteria = {})
32
+ allow_only(inbound_rules, criteria)
33
+ end
34
+ RSpec::Matchers.alias_matcher :allow_in_only, :be_allow_in_only
35
+
36
+ def allow_out_only?(criteria = {})
37
+ allow_only(outbound_rules, criteria)
38
+ end
39
+ RSpec::Matchers.alias_matcher :allow_out_only, :be_allow_out_only
40
+
18
41
  private
19
42
 
43
+ def allow_only(rules, criteria)
44
+ # allow_{in_out}_only require either a single-rule group, or you
45
+ # to select a rule using position.
46
+ return false unless rules.count == 1 || criteria.key?(:position)
47
+ criteria[:exact] = true
48
+ allow(rules, criteria)
49
+ end
50
+
51
+ def allow(rules, criteria)
52
+ criteria = allow__check_criteria(criteria)
53
+ rules = allow__focus_on_position(rules, criteria)
54
+
55
+ rules.any? do |rule|
56
+ matched = true
57
+ matched &&= allow__match_port(rule, criteria)
58
+ matched &&= allow__match_protocol(rule, criteria)
59
+ matched &&= allow__match_ipv4_range(rule, criteria)
60
+ matched
61
+ end
62
+ end
63
+
64
+ def allow__check_criteria(raw_criteria)
65
+ allowed_criteria = [
66
+ :from_port,
67
+ :ipv4_range,
68
+ :port,
69
+ :position,
70
+ :protocol,
71
+ :to_port,
72
+ :exact, # Internal
73
+ ]
74
+ recognized_criteria = {}
75
+ allowed_criteria.each do |expected_criterion|
76
+ if raw_criteria.key?(expected_criterion)
77
+ recognized_criteria[expected_criterion] = raw_criteria.delete(expected_criterion)
78
+ end
79
+ end
80
+
81
+ # Any leftovers are unwelcome
82
+ unless raw_criteria.empty?
83
+ raise ArgumentError, "Unrecognized security group rule 'allow' criteria '#{raw_criteria.keys.join(',')}'. Expected criteria: #{allowed_criteria.join(', ')}"
84
+ end
85
+
86
+ recognized_criteria
87
+ end
88
+
89
+ def allow__focus_on_position(rules, criteria)
90
+ return rules unless criteria.key?(:position)
91
+
92
+ idx = criteria.delete(:position)
93
+
94
+ # Normalize to a zero-based numeric index
95
+ case # rubocop: disable Style/EmptyCaseCondition
96
+ when idx.is_a?(Symbol) && idx == :first
97
+ idx = 0
98
+ when idx.is_a?(Symbol) && idx == :last
99
+ idx = rules.count - 1
100
+ when idx.is_a?(String)
101
+ idx = idx.to_i - 1 # We document this as 1-based, so adjust to be zero-based.
102
+ when idx.is_a?(Numeric)
103
+ idx -= 1 # We document this as 1-based, so adjust to be zero-based.
104
+ else
105
+ raise ArgumentError, "aws_security_group 'allow' 'position' criteria must be an integer or the symbols :first or :last"
106
+ end
107
+
108
+ unless idx < rules.count
109
+ raise ArgumentError, "aws_security_group 'allow' 'position' criteria #{idx+1} is out of range - there are only #{rules.count} rules for security group #{group_id}."
110
+ end
111
+
112
+ [rules[idx]]
113
+ end
114
+
115
+ def allow__match_port(rule, criteria) # rubocop: disable Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity, Metrics/AbcSize
116
+ if criteria[:exact] || criteria[:from_port] || criteria[:to_port]
117
+ # Exact match mode
118
+ # :port is shorthand for a single-valued port range.
119
+ criteria[:to_port] = criteria[:from_port] = criteria[:port] if criteria[:port]
120
+ to = criteria[:to_port]
121
+ from = criteria[:from_port]
122
+ # It's a match if neither criteria was specified
123
+ return true if to.nil? && from.nil?
124
+ # Normalize to integers
125
+ to = to.to_i unless to.nil?
126
+ from = from.to_i unless from.nil?
127
+ # It's a match if either was specified and the other was not
128
+ return true if rule[:to_port] == to && from.nil?
129
+ return true if rule[:from_port] == from && to.nil?
130
+ # Finally, both must match.
131
+ rule[:to_port] == to && rule[:from_port] == from
132
+ elsif !criteria[:port]
133
+ # port not specified, match anything
134
+ true
135
+ else
136
+ # Range membership mode
137
+ rule_from = rule[:from_port] || 0
138
+ rule_to = rule[:to_port] || 65535
139
+ (rule_from..rule_to).cover?(criteria[:port].to_i)
140
+ end
141
+ end
142
+
143
+ def allow__match_protocol(rule, criteria)
144
+ return true unless criteria.key?(:protocol)
145
+ prot = criteria[:protocol]
146
+ # We provide a "fluency alias" for -1 (any).
147
+ prot = '-1' if prot == 'any'
148
+
149
+ rule[:ip_protocol] == prot
150
+ end
151
+
152
+ def allow__match_ipv4_range(rule, criteria)
153
+ return true unless criteria.key?(:ipv4_range)
154
+ query = criteria[:ipv4_range]
155
+ query = [query] unless query.is_a?(Array)
156
+ ranges = rule[:ip_ranges].map { |rng| rng[:cidr_ip] }
157
+ if criteria[:exact]
158
+ Set.new(query) == Set.new(ranges)
159
+ else
160
+ # CIDR subset mode
161
+ # "Each of the provided IP ranges must be a member of one of the rule's listed IP ranges"
162
+ query.all? do |candidate|
163
+ candidate = IPAddr.new(candidate)
164
+ ranges.any? do |range|
165
+ range = IPAddr.new(range)
166
+ range.include?(candidate)
167
+ end
168
+ end
169
+ end
170
+ end
171
+
20
172
  def validate_params(raw_params)
21
173
  recognized_params = check_resource_param_names(
22
174
  raw_params: raw_params,
@@ -44,7 +196,7 @@ class AwsSecurityGroup < Inspec.resource(1)
44
196
  validated_params
45
197
  end
46
198
 
47
- def fetch_from_api
199
+ def fetch_from_api # rubocop: disable Metrics/AbcSize
48
200
  backend = BackendFactory.create(inspec_runner)
49
201
 
50
202
  # Transform into filter format expected by AWS
@@ -70,6 +222,8 @@ class AwsSecurityGroup < Inspec.resource(1)
70
222
 
71
223
  if dsg_response.security_groups.empty?
72
224
  @exists = false
225
+ @inbound_rules = []
226
+ @outbound_rules = []
73
227
  return
74
228
  end
75
229
 
@@ -78,6 +232,8 @@ class AwsSecurityGroup < Inspec.resource(1)
78
232
  @group_id = dsg_response.security_groups[0].group_id
79
233
  @group_name = dsg_response.security_groups[0].group_name
80
234
  @vpc_id = dsg_response.security_groups[0].vpc_id
235
+ @inbound_rules = dsg_response.security_groups[0].ip_permissions.map(&:to_h)
236
+ @outbound_rules = dsg_response.security_groups[0].ip_permissions_egress.map(&:to_h)
81
237
  end
82
238
 
83
239
  class Backend
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -15,11 +15,8 @@ class AwsVpc < Inspec.resource(1)
15
15
  "VPC #{vpc_id}"
16
16
  end
17
17
 
18
- [:cidr_block, :dhcp_options_id, :state, :vpc_id, :instance_tenancy, :is_default].each do |property|
19
- define_method(property) do
20
- @vpc[property]
21
- end
22
- end
18
+ attr_reader :cidr_block, :dhcp_options_id, :instance_tenancy, :is_default,\
19
+ :state, :vpc_id
23
20
 
24
21
  alias default? is_default
25
22
 
@@ -51,9 +48,16 @@ class AwsVpc < Inspec.resource(1)
51
48
 
52
49
  resp = backend.describe_vpcs({ filters: [filter] })
53
50
 
54
- @vpc = resp.vpcs[0].to_h
55
- @vpc_id = @vpc[:vpc_id]
56
- @exists = !@vpc.empty?
51
+ vpc = resp.vpcs[0].to_h
52
+ @exists = !vpc.empty?
53
+ return unless @exists
54
+
55
+ @cidr_block = vpc[:cidr_block]
56
+ @dhcp_options_id = vpc[:dhcp_options_id]
57
+ @instance_tenancy = vpc[:instance_tenancy]
58
+ @is_default = vpc[:is_default]
59
+ @state = vpc[:state]
60
+ @vpc_id = vpc[:vpc_id]
57
61
  end
58
62
 
59
63
  class Backend
@@ -13,7 +13,13 @@ class AwsVpcs < Inspec.resource(1)
13
13
  # Underlying FilterTable implementation.
14
14
  filter = FilterTable.create
15
15
  filter.add_accessor(:entries)
16
+ .add_accessor(:where)
16
17
  .add(:exists?) { |x| !x.entries.empty? }
18
+ .add(:cidr_blocks, field: :cidr_block)
19
+ .add(:vpc_ids, field: :vpc_id)
20
+ # We need a dummy here, so FilterTable will define and populate the dhcp_options_id field
21
+ filter.add(:dummy, field: :dhcp_options_id)
22
+ .add(:dhcp_options_ids) { |obj| obj.entries.map(&:dhcp_options_id).uniq }
17
23
  filter.connect(self, :table)
18
24
 
19
25
  def validate_params(raw_params)
@@ -29,7 +35,8 @@ class AwsVpcs < Inspec.resource(1)
29
35
  end
30
36
 
31
37
  def fetch_from_api
32
- @table = BackendFactory.create(inspec_runner).describe_vpcs.to_h[:vpcs]
38
+ describe_vpcs_response = BackendFactory.create(inspec_runner).describe_vpcs
39
+ @table = describe_vpcs_response.to_h[:vpcs].map(&:to_h)
33
40
  end
34
41
 
35
42
  class Backend
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/resources/csv.rb CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/resources/gem.rb CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/resources/ini.rb CHANGED
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -3,6 +3,7 @@
3
3
  require 'openssl'
4
4
  require 'hashie/mash'
5
5
  require 'utils/file_reader'
6
+ require 'utils/pkey_reader'
6
7
 
7
8
  module Inspec::Resources
8
9
  class RsaKey < Inspec.resource(1)
@@ -22,11 +23,12 @@ module Inspec::Resources
22
23
  "
23
24
 
24
25
  include FileReader
26
+ include PkeyReader
25
27
 
26
28
  def initialize(keypath, passphrase = nil)
27
29
  @key_path = keypath
28
30
  @passphrase = passphrase
29
- @key = OpenSSL::PKey.read(read_file_content(@key_path, allow_empty: true), @passphrase)
31
+ @key = read_pkey(read_file_content(@key_path, allow_empty: true), @passphrase)
30
32
  end
31
33
 
32
34
  def public?
File without changes
File without changes
File without changes
File without changes