inspec 2.1.0 → 2.1.10
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.
- checksums.yaml +4 -4
- data/.rubocop.yml +101 -101
- data/CHANGELOG.md +3024 -3004
- data/Gemfile +55 -55
- data/LICENSE +14 -14
- data/MAINTAINERS.md +33 -33
- data/MAINTAINERS.toml +52 -52
- data/README.md +447 -446
- data/Rakefile +322 -322
- data/bin/inspec +12 -12
- data/docs/.gitignore +2 -2
- data/docs/README.md +40 -40
- data/docs/dsl_inspec.md +258 -258
- data/docs/dsl_resource.md +100 -93
- data/docs/glossary.md +99 -99
- data/docs/habitat.md +191 -191
- data/docs/inspec_and_friends.md +114 -114
- data/docs/matchers.md +169 -169
- data/docs/migration.md +293 -293
- data/docs/platforms.md +118 -118
- data/docs/plugin_kitchen_inspec.md +50 -50
- data/docs/profiles.md +376 -376
- data/docs/reporters.md +105 -105
- data/docs/resources/aide_conf.md.erb +75 -75
- data/docs/resources/apache.md.erb +67 -67
- data/docs/resources/apache_conf.md.erb +68 -68
- data/docs/resources/apt.md.erb +71 -71
- data/docs/resources/audit_policy.md.erb +47 -47
- data/docs/resources/auditd.md.erb +79 -79
- data/docs/resources/auditd_conf.md.erb +68 -68
- data/docs/resources/aws_cloudtrail_trail.md.erb +140 -140
- data/docs/resources/aws_cloudtrail_trails.md.erb +81 -81
- data/docs/resources/aws_cloudwatch_alarm.md.erb +86 -86
- data/docs/resources/aws_cloudwatch_log_metric_filter.md.erb +151 -151
- data/docs/resources/aws_config_recorder.md.erb +71 -71
- data/docs/resources/aws_ec2_instance.md.erb +106 -106
- data/docs/resources/aws_iam_access_key.md.erb +123 -123
- data/docs/resources/aws_iam_access_keys.md.erb +198 -198
- data/docs/resources/aws_iam_group.md.erb +46 -46
- data/docs/resources/aws_iam_groups.md.erb +43 -43
- data/docs/resources/aws_iam_password_policy.md.erb +76 -76
- data/docs/resources/aws_iam_policies.md.erb +82 -82
- data/docs/resources/aws_iam_policy.md.erb +144 -144
- data/docs/resources/aws_iam_role.md.erb +63 -63
- data/docs/resources/aws_iam_root_user.md.erb +58 -58
- data/docs/resources/aws_iam_user.md.erb +64 -64
- data/docs/resources/aws_iam_users.md.erb +89 -89
- data/docs/resources/aws_kms_keys.md.erb +84 -84
- data/docs/resources/aws_route_table.md.erb +47 -47
- data/docs/resources/aws_s3_bucket.md.erb +134 -134
- data/docs/resources/aws_s3_bucket_object.md.erb +83 -0
- data/docs/resources/aws_security_group.md.erb +151 -151
- data/docs/resources/aws_security_groups.md.erb +91 -91
- data/docs/resources/aws_sns_subscription.md.erb +125 -0
- data/docs/resources/aws_sns_topic.md.erb +63 -63
- data/docs/resources/aws_sns_topics.md.erb +52 -0
- data/docs/resources/aws_subnet.md.erb +134 -134
- data/docs/resources/aws_subnets.md.erb +126 -126
- data/docs/resources/aws_vpc.md.erb +120 -120
- data/docs/resources/aws_vpcs.md.erb +48 -48
- data/docs/resources/azure_generic_resource.md.erb +171 -171
- data/docs/resources/azure_resource_group.md.erb +284 -284
- data/docs/resources/azure_virtual_machine.md.erb +347 -347
- data/docs/resources/azure_virtual_machine_data_disk.md.erb +224 -224
- data/docs/resources/bash.md.erb +75 -75
- data/docs/resources/bond.md.erb +90 -90
- data/docs/resources/bridge.md.erb +57 -57
- data/docs/resources/bsd_service.md.erb +67 -67
- data/docs/resources/command.md.erb +138 -138
- data/docs/resources/cpan.md.erb +79 -79
- data/docs/resources/cran.md.erb +64 -64
- data/docs/resources/crontab.md.erb +89 -89
- data/docs/resources/csv.md.erb +54 -54
- data/docs/resources/dh_params.md.erb +205 -205
- data/docs/resources/directory.md.erb +30 -30
- data/docs/resources/docker.md.erb +219 -219
- data/docs/resources/docker_container.md.erb +103 -103
- data/docs/resources/docker_image.md.erb +94 -94
- data/docs/resources/docker_service.md.erb +114 -114
- data/docs/resources/elasticsearch.md.erb +242 -242
- data/docs/resources/etc_fstab.md.erb +125 -125
- data/docs/resources/etc_group.md.erb +75 -75
- data/docs/resources/etc_hosts.md.erb +78 -78
- data/docs/resources/etc_hosts_allow.md.erb +74 -74
- data/docs/resources/etc_hosts_deny.md.erb +74 -74
- data/docs/resources/file.md.erb +526 -526
- data/docs/resources/filesystem.md.erb +41 -41
- data/docs/resources/firewalld.md.erb +107 -107
- data/docs/resources/gem.md.erb +79 -79
- data/docs/resources/group.md.erb +61 -61
- data/docs/resources/grub_conf.md.erb +101 -101
- data/docs/resources/host.md.erb +86 -86
- data/docs/resources/http.md.erb +196 -196
- data/docs/resources/iis_app.md.erb +122 -122
- data/docs/resources/iis_site.md.erb +135 -135
- data/docs/resources/inetd_conf.md.erb +94 -94
- data/docs/resources/ini.md.erb +76 -76
- data/docs/resources/interface.md.erb +58 -58
- data/docs/resources/iptables.md.erb +64 -64
- data/docs/resources/json.md.erb +63 -63
- data/docs/resources/kernel_module.md.erb +120 -120
- data/docs/resources/kernel_parameter.md.erb +53 -53
- data/docs/resources/key_rsa.md.erb +85 -85
- data/docs/resources/launchd_service.md.erb +57 -57
- data/docs/resources/limits_conf.md.erb +75 -75
- data/docs/resources/{login_def.md.erb → login_defs.md.erb} +71 -71
- data/docs/resources/mount.md.erb +69 -69
- data/docs/resources/mssql_session.md.erb +60 -60
- data/docs/resources/mysql_conf.md.erb +99 -99
- data/docs/resources/mysql_session.md.erb +74 -74
- data/docs/resources/nginx.md.erb +79 -79
- data/docs/resources/nginx_conf.md.erb +138 -128
- data/docs/resources/npm.md.erb +60 -60
- data/docs/resources/ntp_conf.md.erb +60 -60
- data/docs/resources/oneget.md.erb +53 -53
- data/docs/resources/oracledb_session.md.erb +52 -52
- data/docs/resources/os.md.erb +141 -141
- data/docs/resources/os_env.md.erb +78 -78
- data/docs/resources/package.md.erb +120 -120
- data/docs/resources/packages.md.erb +67 -67
- data/docs/resources/parse_config.md.erb +103 -103
- data/docs/resources/parse_config_file.md.erb +138 -138
- data/docs/resources/passwd.md.erb +141 -141
- data/docs/resources/pip.md.erb +67 -67
- data/docs/resources/port.md.erb +137 -137
- data/docs/resources/postgres_conf.md.erb +79 -79
- data/docs/resources/postgres_hba_conf.md.erb +93 -93
- data/docs/resources/postgres_ident_conf.md.erb +76 -76
- data/docs/resources/postgres_session.md.erb +69 -69
- data/docs/resources/powershell.md.erb +102 -102
- data/docs/resources/processes.md.erb +109 -109
- data/docs/resources/rabbitmq_config.md.erb +41 -41
- data/docs/resources/registry_key.md.erb +158 -158
- data/docs/resources/runit_service.md.erb +57 -57
- data/docs/resources/security_policy.md.erb +47 -47
- data/docs/resources/service.md.erb +121 -121
- data/docs/resources/shadow.md.erb +146 -146
- data/docs/resources/ssh_config.md.erb +73 -80
- data/docs/resources/sshd_config.md.erb +83 -83
- data/docs/resources/ssl.md.erb +119 -119
- data/docs/resources/sys_info.md.erb +42 -42
- data/docs/resources/systemd_service.md.erb +57 -57
- data/docs/resources/sysv_service.md.erb +57 -57
- data/docs/resources/upstart_service.md.erb +57 -57
- data/docs/resources/user.md.erb +140 -140
- data/docs/resources/users.md.erb +127 -127
- data/docs/resources/vbscript.md.erb +55 -55
- data/docs/resources/virtualization.md.erb +57 -57
- data/docs/resources/windows_feature.md.erb +47 -47
- data/docs/resources/windows_hotfix.md.erb +53 -53
- data/docs/resources/windows_task.md.erb +95 -95
- data/docs/resources/wmi.md.erb +81 -81
- data/docs/resources/x509_certificate.md.erb +151 -151
- data/docs/resources/xinetd_conf.md.erb +156 -156
- data/docs/resources/xml.md.erb +85 -85
- data/docs/resources/yaml.md.erb +69 -69
- data/docs/resources/yum.md.erb +98 -98
- data/docs/resources/zfs_dataset.md.erb +53 -53
- data/docs/resources/zfs_pool.md.erb +47 -47
- data/docs/ruby_usage.md +203 -203
- data/docs/shared/matcher_be.md.erb +1 -1
- data/docs/shared/matcher_cmp.md.erb +43 -43
- data/docs/shared/matcher_eq.md.erb +3 -3
- data/docs/shared/matcher_include.md.erb +1 -1
- data/docs/shared/matcher_match.md.erb +1 -1
- data/docs/shell.md +217 -217
- data/examples/README.md +8 -8
- data/examples/inheritance/README.md +65 -65
- data/examples/inheritance/controls/example.rb +14 -14
- data/examples/inheritance/inspec.yml +15 -15
- data/examples/kitchen-ansible/.kitchen.yml +25 -25
- data/examples/kitchen-ansible/Gemfile +19 -19
- data/examples/kitchen-ansible/README.md +53 -53
- data/examples/kitchen-ansible/files/nginx.repo +6 -6
- data/examples/kitchen-ansible/tasks/main.yml +16 -16
- data/examples/kitchen-ansible/test/integration/default/default.yml +5 -5
- data/examples/kitchen-ansible/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-chef/.kitchen.yml +20 -20
- data/examples/kitchen-chef/Berksfile +3 -3
- data/examples/kitchen-chef/Gemfile +19 -19
- data/examples/kitchen-chef/README.md +27 -27
- data/examples/kitchen-chef/metadata.rb +7 -7
- data/examples/kitchen-chef/recipes/default.rb +6 -6
- data/examples/kitchen-chef/recipes/nginx.rb +30 -30
- data/examples/kitchen-chef/test/integration/default/web_spec.rb +28 -28
- data/examples/kitchen-puppet/.kitchen.yml +22 -22
- data/examples/kitchen-puppet/Gemfile +20 -20
- data/examples/kitchen-puppet/Puppetfile +25 -25
- data/examples/kitchen-puppet/README.md +53 -53
- data/examples/kitchen-puppet/manifests/site.pp +33 -33
- data/examples/kitchen-puppet/metadata.json +11 -11
- data/examples/kitchen-puppet/test/integration/default/web_spec.rb +28 -28
- data/examples/meta-profile/README.md +37 -37
- data/examples/meta-profile/controls/example.rb +13 -13
- data/examples/meta-profile/inspec.yml +13 -13
- data/examples/profile-attribute.yml +2 -2
- data/examples/profile-attribute/README.md +14 -14
- data/examples/profile-attribute/controls/example.rb +11 -11
- data/examples/profile-attribute/inspec.yml +8 -8
- data/examples/profile-aws/controls/iam_password_policy_expiration.rb +8 -8
- data/examples/profile-aws/controls/iam_password_policy_max_age.rb +8 -8
- data/examples/profile-aws/controls/iam_root_user_mfa.rb +8 -8
- data/examples/profile-aws/controls/iam_users_access_key_age.rb +8 -8
- data/examples/profile-aws/controls/iam_users_console_users_mfa.rb +8 -8
- data/examples/profile-aws/inspec.yml +11 -11
- data/examples/profile-azure/controls/azure_resource_group_example.rb +24 -24
- data/examples/profile-azure/controls/azure_vm_example.rb +29 -29
- data/examples/profile-azure/inspec.yml +11 -11
- data/examples/profile-sensitive/README.md +29 -29
- data/examples/profile-sensitive/controls/sensitive-failures.rb +9 -9
- data/examples/profile-sensitive/controls/sensitive.rb +9 -9
- data/examples/profile-sensitive/inspec.yml +8 -8
- data/examples/profile/README.md +48 -48
- data/examples/profile/controls/example.rb +23 -23
- data/examples/profile/controls/gordon.rb +36 -36
- data/examples/profile/controls/meta.rb +34 -34
- data/examples/profile/inspec.yml +10 -10
- data/examples/profile/libraries/gordon_config.rb +53 -53
- data/inspec.gemspec +47 -47
- data/lib/bundles/README.md +3 -3
- data/lib/bundles/inspec-artifact.rb +7 -7
- data/lib/bundles/inspec-artifact/README.md +1 -1
- data/lib/bundles/inspec-artifact/cli.rb +277 -277
- data/lib/bundles/inspec-compliance.rb +16 -16
- data/lib/bundles/inspec-compliance/.kitchen.yml +20 -20
- data/lib/bundles/inspec-compliance/README.md +185 -185
- data/lib/bundles/inspec-compliance/api.rb +316 -316
- data/lib/bundles/inspec-compliance/api/login.rb +152 -152
- data/lib/bundles/inspec-compliance/bootstrap.sh +41 -41
- data/lib/bundles/inspec-compliance/cli.rb +254 -254
- data/lib/bundles/inspec-compliance/configuration.rb +103 -103
- data/lib/bundles/inspec-compliance/http.rb +86 -86
- data/lib/bundles/inspec-compliance/support.rb +36 -36
- data/lib/bundles/inspec-compliance/target.rb +98 -98
- data/lib/bundles/inspec-compliance/test/integration/default/cli.rb +93 -93
- data/lib/bundles/inspec-habitat.rb +12 -12
- data/lib/bundles/inspec-habitat/cli.rb +36 -36
- data/lib/bundles/inspec-habitat/log.rb +10 -10
- data/lib/bundles/inspec-habitat/profile.rb +390 -390
- data/lib/bundles/inspec-init.rb +8 -8
- data/lib/bundles/inspec-init/README.md +31 -31
- data/lib/bundles/inspec-init/cli.rb +97 -97
- data/lib/bundles/inspec-init/templates/profile/README.md +3 -3
- data/lib/bundles/inspec-init/templates/profile/controls/example.rb +19 -19
- data/lib/bundles/inspec-init/templates/profile/inspec.yml +8 -8
- data/lib/bundles/inspec-supermarket.rb +13 -13
- data/lib/bundles/inspec-supermarket/README.md +45 -45
- data/lib/bundles/inspec-supermarket/api.rb +84 -84
- data/lib/bundles/inspec-supermarket/cli.rb +73 -73
- data/lib/bundles/inspec-supermarket/target.rb +34 -34
- data/lib/fetchers/git.rb +163 -163
- data/lib/fetchers/local.rb +74 -74
- data/lib/fetchers/mock.rb +35 -35
- data/lib/fetchers/url.rb +204 -204
- data/lib/inspec.rb +24 -24
- data/lib/inspec/archive/tar.rb +29 -29
- data/lib/inspec/archive/zip.rb +19 -19
- data/lib/inspec/backend.rb +93 -93
- data/lib/inspec/base_cli.rb +357 -355
- data/lib/inspec/cached_fetcher.rb +66 -66
- data/lib/inspec/cli.rb +292 -292
- data/lib/inspec/completions/bash.sh.erb +45 -45
- data/lib/inspec/completions/fish.sh.erb +34 -34
- data/lib/inspec/completions/zsh.sh.erb +61 -61
- data/lib/inspec/control_eval_context.rb +179 -179
- data/lib/inspec/dependencies/cache.rb +72 -72
- data/lib/inspec/dependencies/dependency_set.rb +92 -92
- data/lib/inspec/dependencies/lockfile.rb +115 -115
- data/lib/inspec/dependencies/requirement.rb +123 -123
- data/lib/inspec/dependencies/resolver.rb +86 -86
- data/lib/inspec/describe.rb +27 -27
- data/lib/inspec/dsl.rb +66 -66
- data/lib/inspec/dsl_shared.rb +33 -33
- data/lib/inspec/env_printer.rb +157 -157
- data/lib/inspec/errors.rb +13 -13
- data/lib/inspec/exceptions.rb +12 -12
- data/lib/inspec/expect.rb +45 -45
- data/lib/inspec/fetcher.rb +45 -45
- data/lib/inspec/file_provider.rb +275 -275
- data/lib/inspec/formatters.rb +3 -3
- data/lib/inspec/formatters/base.rb +250 -250
- data/lib/inspec/formatters/json_rspec.rb +20 -20
- data/lib/inspec/formatters/show_progress.rb +12 -12
- data/lib/inspec/library_eval_context.rb +58 -58
- data/lib/inspec/log.rb +11 -11
- data/lib/inspec/metadata.rb +247 -247
- data/lib/inspec/method_source.rb +24 -24
- data/lib/inspec/objects.rb +14 -14
- data/lib/inspec/objects/attribute.rb +65 -65
- data/lib/inspec/objects/control.rb +61 -61
- data/lib/inspec/objects/describe.rb +92 -92
- data/lib/inspec/objects/each_loop.rb +36 -36
- data/lib/inspec/objects/list.rb +15 -15
- data/lib/inspec/objects/or_test.rb +40 -40
- data/lib/inspec/objects/ruby_helper.rb +15 -15
- data/lib/inspec/objects/tag.rb +27 -27
- data/lib/inspec/objects/test.rb +87 -87
- data/lib/inspec/objects/value.rb +27 -27
- data/lib/inspec/plugins.rb +60 -60
- data/lib/inspec/plugins/cli.rb +24 -24
- data/lib/inspec/plugins/fetcher.rb +86 -86
- data/lib/inspec/plugins/resource.rb +135 -135
- data/lib/inspec/plugins/secret.rb +15 -15
- data/lib/inspec/plugins/source_reader.rb +40 -40
- data/lib/inspec/polyfill.rb +12 -12
- data/lib/inspec/profile.rb +510 -510
- data/lib/inspec/profile_context.rb +207 -207
- data/lib/inspec/profile_vendor.rb +66 -66
- data/lib/inspec/reporters.rb +54 -54
- data/lib/inspec/reporters/base.rb +24 -24
- data/lib/inspec/reporters/cli.rb +356 -356
- data/lib/inspec/reporters/json.rb +116 -116
- data/lib/inspec/reporters/json_min.rb +48 -48
- data/lib/inspec/reporters/junit.rb +77 -77
- data/lib/inspec/require_loader.rb +33 -33
- data/lib/inspec/resource.rb +186 -186
- data/lib/inspec/rule.rb +266 -266
- data/lib/inspec/runner.rb +345 -345
- data/lib/inspec/runner_mock.rb +41 -41
- data/lib/inspec/runner_rspec.rb +175 -175
- data/lib/inspec/runtime_profile.rb +26 -26
- data/lib/inspec/schema.rb +213 -213
- data/lib/inspec/secrets.rb +19 -19
- data/lib/inspec/secrets/yaml.rb +30 -30
- data/lib/inspec/shell.rb +220 -220
- data/lib/inspec/shell_detector.rb +90 -90
- data/lib/inspec/source_reader.rb +29 -29
- data/lib/inspec/version.rb +8 -8
- data/lib/matchers/matchers.rb +339 -339
- data/lib/resource_support/aws.rb +44 -41
- data/lib/resource_support/aws/aws_backend_base.rb +12 -12
- data/lib/resource_support/aws/aws_backend_factory_mixin.rb +12 -12
- data/lib/resource_support/aws/aws_plural_resource_mixin.rb +21 -21
- data/lib/resource_support/aws/aws_resource_mixin.rb +66 -66
- data/lib/resource_support/aws/aws_singular_resource_mixin.rb +24 -24
- data/lib/resources/aide_conf.rb +151 -159
- data/lib/resources/apache.rb +48 -48
- data/lib/resources/apache_conf.rb +149 -156
- data/lib/resources/apt.rb +149 -149
- data/lib/resources/audit_policy.rb +63 -63
- data/lib/resources/auditd.rb +231 -231
- data/lib/resources/auditd_conf.rb +46 -55
- data/lib/resources/aws/aws_cloudtrail_trail.rb +77 -77
- data/lib/resources/aws/aws_cloudtrail_trails.rb +47 -47
- data/lib/resources/aws/aws_cloudwatch_alarm.rb +62 -62
- data/lib/resources/aws/aws_cloudwatch_log_metric_filter.rb +100 -100
- data/lib/resources/aws/aws_config_recorder.rb +98 -98
- data/lib/resources/aws/aws_ec2_instance.rb +157 -157
- data/lib/resources/aws/aws_iam_access_key.rb +106 -106
- data/lib/resources/aws/aws_iam_access_keys.rb +149 -149
- data/lib/resources/aws/aws_iam_group.rb +56 -56
- data/lib/resources/aws/aws_iam_groups.rb +52 -52
- data/lib/resources/aws/aws_iam_password_policy.rb +116 -116
- data/lib/resources/aws/aws_iam_policies.rb +53 -53
- data/lib/resources/aws/aws_iam_policy.rb +125 -125
- data/lib/resources/aws/aws_iam_role.rb +51 -51
- data/lib/resources/aws/aws_iam_root_user.rb +60 -60
- data/lib/resources/aws/aws_iam_user.rb +111 -111
- data/lib/resources/aws/aws_iam_users.rb +108 -108
- data/lib/resources/aws/aws_kms_keys.rb +53 -53
- data/lib/resources/aws/aws_route_table.rb +61 -61
- data/lib/resources/aws/aws_s3_bucket.rb +115 -115
- data/lib/resources/aws/aws_s3_bucket_object.rb +82 -0
- data/lib/resources/aws/aws_security_group.rb +93 -93
- data/lib/resources/aws/aws_security_groups.rb +68 -68
- data/lib/resources/aws/aws_sns_subscription.rb +78 -0
- data/lib/resources/aws/aws_sns_topic.rb +53 -53
- data/lib/resources/aws/aws_sns_topics.rb +56 -0
- data/lib/resources/aws/aws_subnet.rb +88 -88
- data/lib/resources/aws/aws_subnets.rb +53 -53
- data/lib/resources/aws/aws_vpc.rb +69 -69
- data/lib/resources/aws/aws_vpcs.rb +45 -45
- data/lib/resources/azure/azure_backend.rb +377 -377
- data/lib/resources/azure/azure_generic_resource.rb +59 -59
- data/lib/resources/azure/azure_resource_group.rb +152 -152
- data/lib/resources/azure/azure_virtual_machine.rb +264 -264
- data/lib/resources/azure/azure_virtual_machine_data_disk.rb +136 -136
- data/lib/resources/bash.rb +35 -35
- data/lib/resources/bond.rb +69 -68
- data/lib/resources/bridge.rb +122 -122
- data/lib/resources/command.rb +73 -73
- data/lib/resources/cpan.rb +58 -58
- data/lib/resources/cran.rb +64 -64
- data/lib/resources/crontab.rb +169 -169
- data/lib/resources/csv.rb +56 -60
- data/lib/resources/dh_params.rb +77 -82
- data/lib/resources/directory.rb +25 -25
- data/lib/resources/docker.rb +236 -236
- data/lib/resources/docker_container.rb +89 -89
- data/lib/resources/docker_image.rb +83 -83
- data/lib/resources/docker_object.rb +57 -57
- data/lib/resources/docker_service.rb +90 -90
- data/lib/resources/elasticsearch.rb +169 -169
- data/lib/resources/etc_fstab.rb +94 -101
- data/lib/resources/etc_group.rb +152 -152
- data/lib/resources/etc_hosts.rb +66 -82
- data/lib/resources/etc_hosts_allow_deny.rb +112 -122
- data/lib/resources/file.rb +298 -298
- data/lib/resources/filesystem.rb +31 -31
- data/lib/resources/firewalld.rb +143 -143
- data/lib/resources/gem.rb +70 -70
- data/lib/resources/groups.rb +215 -215
- data/lib/resources/grub_conf.rb +227 -237
- data/lib/resources/host.rb +306 -306
- data/lib/resources/http.rb +251 -251
- data/lib/resources/iis_app.rb +101 -101
- data/lib/resources/iis_site.rb +148 -148
- data/lib/resources/inetd_conf.rb +54 -62
- data/lib/resources/ini.rb +29 -29
- data/lib/resources/interface.rb +129 -129
- data/lib/resources/iptables.rb +80 -80
- data/lib/resources/json.rb +107 -117
- data/lib/resources/kernel_module.rb +107 -107
- data/lib/resources/kernel_parameter.rb +58 -58
- data/lib/resources/key_rsa.rb +61 -67
- data/lib/resources/limits_conf.rb +46 -55
- data/lib/resources/login_def.rb +57 -66
- data/lib/resources/mount.rb +88 -88
- data/lib/resources/mssql_session.rb +101 -101
- data/lib/resources/mysql.rb +81 -81
- data/lib/resources/mysql_conf.rb +127 -134
- data/lib/resources/mysql_session.rb +85 -85
- data/lib/resources/nginx.rb +96 -96
- data/lib/resources/nginx_conf.rb +226 -227
- data/lib/resources/npm.rb +48 -48
- data/lib/resources/ntp_conf.rb +51 -58
- data/lib/resources/oneget.rb +71 -71
- data/lib/resources/oracledb_session.rb +139 -139
- data/lib/resources/os.rb +36 -36
- data/lib/resources/os_env.rb +76 -76
- data/lib/resources/package.rb +370 -370
- data/lib/resources/packages.rb +111 -111
- data/lib/resources/parse_config.rb +112 -116
- data/lib/resources/passwd.rb +76 -74
- data/lib/resources/pip.rb +89 -89
- data/lib/resources/platform.rb +109 -109
- data/lib/resources/port.rb +771 -771
- data/lib/resources/postgres.rb +130 -130
- data/lib/resources/postgres_conf.rb +114 -121
- data/lib/resources/postgres_hba_conf.rb +90 -99
- data/lib/resources/postgres_ident_conf.rb +79 -76
- data/lib/resources/postgres_session.rb +71 -71
- data/lib/resources/powershell.rb +53 -53
- data/lib/resources/processes.rb +204 -204
- data/lib/resources/rabbitmq_conf.rb +51 -52
- data/lib/resources/registry_key.rb +296 -296
- data/lib/resources/security_policy.rb +180 -180
- data/lib/resources/service.rb +790 -789
- data/lib/resources/shadow.rb +149 -146
- data/lib/resources/ssh_conf.rb +97 -102
- data/lib/resources/ssl.rb +99 -99
- data/lib/resources/sys_info.rb +28 -28
- data/lib/resources/toml.rb +32 -32
- data/lib/resources/users.rb +654 -654
- data/lib/resources/vbscript.rb +68 -68
- data/lib/resources/virtualization.rb +247 -247
- data/lib/resources/windows_feature.rb +84 -84
- data/lib/resources/windows_hotfix.rb +35 -35
- data/lib/resources/windows_task.rb +102 -102
- data/lib/resources/wmi.rb +110 -110
- data/lib/resources/x509_certificate.rb +137 -143
- data/lib/resources/xinetd.rb +106 -111
- data/lib/resources/xml.rb +46 -46
- data/lib/resources/yaml.rb +43 -47
- data/lib/resources/yum.rb +180 -180
- data/lib/resources/zfs_dataset.rb +60 -60
- data/lib/resources/zfs_pool.rb +49 -49
- data/lib/source_readers/flat.rb +39 -39
- data/lib/source_readers/inspec.rb +75 -75
- data/lib/utils/command_wrapper.rb +27 -27
- data/lib/utils/convert.rb +12 -12
- data/lib/utils/database_helpers.rb +77 -77
- data/lib/utils/erlang_parser.rb +192 -192
- data/lib/utils/file_reader.rb +25 -0
- data/lib/utils/filter.rb +272 -272
- data/lib/utils/filter_array.rb +27 -27
- data/lib/utils/find_files.rb +44 -44
- data/lib/utils/hash.rb +41 -41
- data/lib/utils/json_log.rb +18 -18
- data/lib/utils/latest_version.rb +22 -22
- data/lib/utils/modulator.rb +12 -12
- data/lib/utils/nginx_parser.rb +85 -85
- data/lib/utils/object_traversal.rb +49 -49
- data/lib/utils/parser.rb +274 -274
- data/lib/utils/plugin_registry.rb +93 -93
- data/lib/utils/simpleconfig.rb +120 -120
- data/lib/utils/spdx.rb +13 -13
- data/lib/utils/spdx.txt +343 -343
- metadata +12 -5
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# author: Matthew Dromazos
|
|
2
|
+
class AwsS3BucketObject < Inspec.resource(1)
|
|
3
|
+
name 'aws_s3_bucket_object'
|
|
4
|
+
desc 'Verifies settings for a s3 bucket object'
|
|
5
|
+
example "
|
|
6
|
+
describe aws_s3_bucket_object(bucket_name: 'bucket_name', key: 'file_name') do
|
|
7
|
+
it { should exist }
|
|
8
|
+
it { should_not be_public }
|
|
9
|
+
end
|
|
10
|
+
"
|
|
11
|
+
supports platform: 'aws'
|
|
12
|
+
|
|
13
|
+
include AwsSingularResourceMixin
|
|
14
|
+
attr_reader :bucket_name, :key
|
|
15
|
+
|
|
16
|
+
def to_s
|
|
17
|
+
# keep the format that aws uses.
|
|
18
|
+
"s3://#{@bucket_name}/#{@key}"
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def object_acl
|
|
22
|
+
return @object_acl if defined? @object_acl
|
|
23
|
+
catch_aws_errors do
|
|
24
|
+
@object_acl = BackendFactory.create(inspec_runner).get_object_acl(bucket: bucket_name, key: key).grants
|
|
25
|
+
end
|
|
26
|
+
@object_acl
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# RSpec will alias this to be_public
|
|
30
|
+
def public?
|
|
31
|
+
# first line just for formatting
|
|
32
|
+
false || \
|
|
33
|
+
object_acl.any? { |g| g.grantee.type == 'Group' && g.grantee.uri =~ /AllUsers/ } || \
|
|
34
|
+
object_acl.any? { |g| g.grantee.type == 'Group' && g.grantee.uri =~ /AuthenticatedUsers/ }
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
private
|
|
38
|
+
|
|
39
|
+
def validate_params(raw_params)
|
|
40
|
+
validated_params = check_resource_param_names(
|
|
41
|
+
raw_params: raw_params,
|
|
42
|
+
allowed_params: [:bucket_name, :key, :id],
|
|
43
|
+
)
|
|
44
|
+
if validated_params.empty? or !validated_params.key?(:bucket_name) or !validated_params.key?(:key)
|
|
45
|
+
raise ArgumentError, 'You must provide a bucket_name and key to aws_s3_bucket_object.'
|
|
46
|
+
end
|
|
47
|
+
validated_params
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def fetch_from_api
|
|
51
|
+
backend = BackendFactory.create(inspec_runner)
|
|
52
|
+
catch_aws_errors do
|
|
53
|
+
begin
|
|
54
|
+
# Just use get_object to detect if the bucket exists
|
|
55
|
+
backend.get_object(bucket: bucket_name, key: key)
|
|
56
|
+
rescue Aws::S3::Errors::NoSuchBucket
|
|
57
|
+
@exists = false
|
|
58
|
+
return
|
|
59
|
+
rescue Aws::S3::Errors::NoSuchKey
|
|
60
|
+
@exists = false
|
|
61
|
+
return
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
@exists = true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
class Backend
|
|
68
|
+
class AwsClientApi < AwsBackendBase
|
|
69
|
+
BackendFactory.set_default_backend(self)
|
|
70
|
+
self.aws_client_class = Aws::S3::Client
|
|
71
|
+
|
|
72
|
+
# Used to detect if object exists
|
|
73
|
+
def get_object(query)
|
|
74
|
+
aws_service_client.get_object(query)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def get_object_acl(query)
|
|
78
|
+
aws_service_client.get_object_acl(query)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
@@ -1,93 +1,93 @@
|
|
|
1
|
-
class AwsSecurityGroup < Inspec.resource(1)
|
|
2
|
-
name 'aws_security_group'
|
|
3
|
-
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
|
-
'
|
|
9
|
-
supports platform: 'aws'
|
|
10
|
-
|
|
11
|
-
include AwsSingularResourceMixin
|
|
12
|
-
attr_reader :description, :group_id, :group_name, :vpc_id
|
|
13
|
-
|
|
14
|
-
def to_s
|
|
15
|
-
"EC2 Security Group #{@group_id}"
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
private
|
|
19
|
-
|
|
20
|
-
def validate_params(raw_params)
|
|
21
|
-
recognized_params = check_resource_param_names(
|
|
22
|
-
raw_params: raw_params,
|
|
23
|
-
allowed_params: [:id, :group_id, :group_name, :vpc_id],
|
|
24
|
-
allowed_scalar_name: :group_id,
|
|
25
|
-
allowed_scalar_type: String,
|
|
26
|
-
)
|
|
27
|
-
|
|
28
|
-
# id is an alias for group_id
|
|
29
|
-
recognized_params[:group_id] = recognized_params.delete(:id) if recognized_params.key?(:id)
|
|
30
|
-
|
|
31
|
-
if recognized_params.key?(:group_id) && recognized_params[:group_id] !~ /^sg\-[0-9a-f]{8}/
|
|
32
|
-
raise ArgumentError, 'aws_security_group security group ID must be in the format "sg-" followed by 8 hexadecimal characters.'
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
if recognized_params.key?(:vpc_id) && recognized_params[:vpc_id] !~ /^vpc\-[0-9a-f]{8}/
|
|
36
|
-
raise ArgumentError, 'aws_security_group VPC ID must be in the format "vpc-" followed by 8 hexadecimal characters.'
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
validated_params = recognized_params
|
|
40
|
-
|
|
41
|
-
if validated_params.empty?
|
|
42
|
-
raise ArgumentError, 'You must provide parameters to aws_security_group, such as group_name, group_id, or vpc_id.g_group.'
|
|
43
|
-
end
|
|
44
|
-
validated_params
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def fetch_from_api
|
|
48
|
-
backend = BackendFactory.create(inspec_runner)
|
|
49
|
-
|
|
50
|
-
# Transform into filter format expected by AWS
|
|
51
|
-
filters = []
|
|
52
|
-
[
|
|
53
|
-
:description,
|
|
54
|
-
:group_id,
|
|
55
|
-
:group_name,
|
|
56
|
-
:vpc_id,
|
|
57
|
-
].each do |criterion_name|
|
|
58
|
-
instance_var = "@#{criterion_name}".to_sym
|
|
59
|
-
next unless instance_variable_defined?(instance_var)
|
|
60
|
-
val = instance_variable_get(instance_var)
|
|
61
|
-
next if val.nil?
|
|
62
|
-
filters.push(
|
|
63
|
-
{
|
|
64
|
-
name: criterion_name.to_s.tr('_', '-'),
|
|
65
|
-
values: [val],
|
|
66
|
-
},
|
|
67
|
-
)
|
|
68
|
-
end
|
|
69
|
-
dsg_response = backend.describe_security_groups(filters: filters)
|
|
70
|
-
|
|
71
|
-
if dsg_response.security_groups.empty?
|
|
72
|
-
@exists = false
|
|
73
|
-
return
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
@exists = true
|
|
77
|
-
@description = dsg_response.security_groups[0].description
|
|
78
|
-
@group_id = dsg_response.security_groups[0].group_id
|
|
79
|
-
@group_name = dsg_response.security_groups[0].group_name
|
|
80
|
-
@vpc_id = dsg_response.security_groups[0].vpc_id
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
class Backend
|
|
84
|
-
class AwsClientApi < AwsBackendBase
|
|
85
|
-
BackendFactory.set_default_backend self
|
|
86
|
-
self.aws_client_class = Aws::EC2::Client
|
|
87
|
-
|
|
88
|
-
def describe_security_groups(query)
|
|
89
|
-
aws_service_client.describe_security_groups(query)
|
|
90
|
-
end
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
end
|
|
1
|
+
class AwsSecurityGroup < Inspec.resource(1)
|
|
2
|
+
name 'aws_security_group'
|
|
3
|
+
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
|
+
'
|
|
9
|
+
supports platform: 'aws'
|
|
10
|
+
|
|
11
|
+
include AwsSingularResourceMixin
|
|
12
|
+
attr_reader :description, :group_id, :group_name, :vpc_id
|
|
13
|
+
|
|
14
|
+
def to_s
|
|
15
|
+
"EC2 Security Group #{@group_id}"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def validate_params(raw_params)
|
|
21
|
+
recognized_params = check_resource_param_names(
|
|
22
|
+
raw_params: raw_params,
|
|
23
|
+
allowed_params: [:id, :group_id, :group_name, :vpc_id],
|
|
24
|
+
allowed_scalar_name: :group_id,
|
|
25
|
+
allowed_scalar_type: String,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
# id is an alias for group_id
|
|
29
|
+
recognized_params[:group_id] = recognized_params.delete(:id) if recognized_params.key?(:id)
|
|
30
|
+
|
|
31
|
+
if recognized_params.key?(:group_id) && recognized_params[:group_id] !~ /^sg\-[0-9a-f]{8}/
|
|
32
|
+
raise ArgumentError, 'aws_security_group security group ID must be in the format "sg-" followed by 8 hexadecimal characters.'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
if recognized_params.key?(:vpc_id) && recognized_params[:vpc_id] !~ /^vpc\-[0-9a-f]{8}/
|
|
36
|
+
raise ArgumentError, 'aws_security_group VPC ID must be in the format "vpc-" followed by 8 hexadecimal characters.'
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
validated_params = recognized_params
|
|
40
|
+
|
|
41
|
+
if validated_params.empty?
|
|
42
|
+
raise ArgumentError, 'You must provide parameters to aws_security_group, such as group_name, group_id, or vpc_id.g_group.'
|
|
43
|
+
end
|
|
44
|
+
validated_params
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def fetch_from_api
|
|
48
|
+
backend = BackendFactory.create(inspec_runner)
|
|
49
|
+
|
|
50
|
+
# Transform into filter format expected by AWS
|
|
51
|
+
filters = []
|
|
52
|
+
[
|
|
53
|
+
:description,
|
|
54
|
+
:group_id,
|
|
55
|
+
:group_name,
|
|
56
|
+
:vpc_id,
|
|
57
|
+
].each do |criterion_name|
|
|
58
|
+
instance_var = "@#{criterion_name}".to_sym
|
|
59
|
+
next unless instance_variable_defined?(instance_var)
|
|
60
|
+
val = instance_variable_get(instance_var)
|
|
61
|
+
next if val.nil?
|
|
62
|
+
filters.push(
|
|
63
|
+
{
|
|
64
|
+
name: criterion_name.to_s.tr('_', '-'),
|
|
65
|
+
values: [val],
|
|
66
|
+
},
|
|
67
|
+
)
|
|
68
|
+
end
|
|
69
|
+
dsg_response = backend.describe_security_groups(filters: filters)
|
|
70
|
+
|
|
71
|
+
if dsg_response.security_groups.empty?
|
|
72
|
+
@exists = false
|
|
73
|
+
return
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
@exists = true
|
|
77
|
+
@description = dsg_response.security_groups[0].description
|
|
78
|
+
@group_id = dsg_response.security_groups[0].group_id
|
|
79
|
+
@group_name = dsg_response.security_groups[0].group_name
|
|
80
|
+
@vpc_id = dsg_response.security_groups[0].vpc_id
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
class Backend
|
|
84
|
+
class AwsClientApi < AwsBackendBase
|
|
85
|
+
BackendFactory.set_default_backend self
|
|
86
|
+
self.aws_client_class = Aws::EC2::Client
|
|
87
|
+
|
|
88
|
+
def describe_security_groups(query)
|
|
89
|
+
aws_service_client.describe_security_groups(query)
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
class AwsSecurityGroups < Inspec.resource(1)
|
|
2
|
-
name 'aws_security_groups'
|
|
3
|
-
desc 'Verifies settings for AWS Security Groups in bulk'
|
|
4
|
-
example <<-EOX
|
|
5
|
-
# Verify that you have security groups defined
|
|
6
|
-
describe aws_security_groups do
|
|
7
|
-
it { should exist }
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
# Verify you have more than the default security group
|
|
11
|
-
describe aws_security_groups do
|
|
12
|
-
its('entries.count') { should be > 1 }
|
|
13
|
-
end
|
|
14
|
-
EOX
|
|
15
|
-
supports platform: 'aws'
|
|
16
|
-
|
|
17
|
-
include AwsPluralResourceMixin
|
|
18
|
-
|
|
19
|
-
# Underlying FilterTable implementation.
|
|
20
|
-
filter = FilterTable.create
|
|
21
|
-
filter.add_accessor(:where)
|
|
22
|
-
.add_accessor(:entries)
|
|
23
|
-
.add(:exists?) { |x| !x.entries.empty? }
|
|
24
|
-
.add(:group_ids, field: :group_id)
|
|
25
|
-
filter.connect(self, :table)
|
|
26
|
-
|
|
27
|
-
def to_s
|
|
28
|
-
'EC2 Security Groups'
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
private
|
|
32
|
-
|
|
33
|
-
def validate_params(raw_criteria)
|
|
34
|
-
unless raw_criteria.is_a? Hash
|
|
35
|
-
raise 'Unrecognized criteria for fetching Security Groups. ' \
|
|
36
|
-
"Use 'criteria: value' format."
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
# No criteria yet
|
|
40
|
-
unless raw_criteria.empty?
|
|
41
|
-
raise ArgumentError, 'aws_ec2_security_groups does not currently accept resource parameters.'
|
|
42
|
-
end
|
|
43
|
-
raw_criteria
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
def fetch_from_api
|
|
47
|
-
@table = []
|
|
48
|
-
backend = BackendFactory.create(inspec_runner)
|
|
49
|
-
backend.describe_security_groups({}).security_groups.each do |sg_info|
|
|
50
|
-
@table.push({
|
|
51
|
-
group_id: sg_info.group_id,
|
|
52
|
-
group_name: sg_info.group_name,
|
|
53
|
-
vpc_id: sg_info.vpc_id,
|
|
54
|
-
})
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
class Backend
|
|
59
|
-
class AwsClientApi < AwsBackendBase
|
|
60
|
-
BackendFactory.set_default_backend self
|
|
61
|
-
self.aws_client_class = Aws::EC2::Client
|
|
62
|
-
|
|
63
|
-
def describe_security_groups(query)
|
|
64
|
-
aws_service_client.describe_security_groups(query)
|
|
65
|
-
end
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
1
|
+
class AwsSecurityGroups < Inspec.resource(1)
|
|
2
|
+
name 'aws_security_groups'
|
|
3
|
+
desc 'Verifies settings for AWS Security Groups in bulk'
|
|
4
|
+
example <<-EOX
|
|
5
|
+
# Verify that you have security groups defined
|
|
6
|
+
describe aws_security_groups do
|
|
7
|
+
it { should exist }
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Verify you have more than the default security group
|
|
11
|
+
describe aws_security_groups do
|
|
12
|
+
its('entries.count') { should be > 1 }
|
|
13
|
+
end
|
|
14
|
+
EOX
|
|
15
|
+
supports platform: 'aws'
|
|
16
|
+
|
|
17
|
+
include AwsPluralResourceMixin
|
|
18
|
+
|
|
19
|
+
# Underlying FilterTable implementation.
|
|
20
|
+
filter = FilterTable.create
|
|
21
|
+
filter.add_accessor(:where)
|
|
22
|
+
.add_accessor(:entries)
|
|
23
|
+
.add(:exists?) { |x| !x.entries.empty? }
|
|
24
|
+
.add(:group_ids, field: :group_id)
|
|
25
|
+
filter.connect(self, :table)
|
|
26
|
+
|
|
27
|
+
def to_s
|
|
28
|
+
'EC2 Security Groups'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
private
|
|
32
|
+
|
|
33
|
+
def validate_params(raw_criteria)
|
|
34
|
+
unless raw_criteria.is_a? Hash
|
|
35
|
+
raise 'Unrecognized criteria for fetching Security Groups. ' \
|
|
36
|
+
"Use 'criteria: value' format."
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# No criteria yet
|
|
40
|
+
unless raw_criteria.empty?
|
|
41
|
+
raise ArgumentError, 'aws_ec2_security_groups does not currently accept resource parameters.'
|
|
42
|
+
end
|
|
43
|
+
raw_criteria
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def fetch_from_api
|
|
47
|
+
@table = []
|
|
48
|
+
backend = BackendFactory.create(inspec_runner)
|
|
49
|
+
backend.describe_security_groups({}).security_groups.each do |sg_info|
|
|
50
|
+
@table.push({
|
|
51
|
+
group_id: sg_info.group_id,
|
|
52
|
+
group_name: sg_info.group_name,
|
|
53
|
+
vpc_id: sg_info.vpc_id,
|
|
54
|
+
})
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class Backend
|
|
59
|
+
class AwsClientApi < AwsBackendBase
|
|
60
|
+
BackendFactory.set_default_backend self
|
|
61
|
+
self.aws_client_class = Aws::EC2::Client
|
|
62
|
+
|
|
63
|
+
def describe_security_groups(query)
|
|
64
|
+
aws_service_client.describe_security_groups(query)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
class AwsSnsSubscription < Inspec.resource(1)
|
|
2
|
+
name 'aws_sns_subscription'
|
|
3
|
+
desc 'Verifies settings for an SNS Subscription'
|
|
4
|
+
example "
|
|
5
|
+
describe aws_sns_subscription('arn:aws:sns:us-east-1::test-topic-01:b214aff5-a2c7-438f-a753-8494493f2ff6') do
|
|
6
|
+
it { should_not have_raw_message_delivery }
|
|
7
|
+
it { should be_confirmation_authenticated }
|
|
8
|
+
its('owner') { should cmp '12345678' }
|
|
9
|
+
its('topic_arn') { should cmp 'arn:aws:sns:us-east-1::test-topic-01' }
|
|
10
|
+
its('endpoint') { should cmp 'arn:aws:sqs:us-east-1::test-queue-01' }
|
|
11
|
+
its('protocol') { should cmp 'sqs' }
|
|
12
|
+
end
|
|
13
|
+
"
|
|
14
|
+
|
|
15
|
+
supports platform: 'aws'
|
|
16
|
+
|
|
17
|
+
include AwsSingularResourceMixin
|
|
18
|
+
attr_reader :arn, :owner, :raw_message_delivery, :topic_arn, :endpoint, :protocol,
|
|
19
|
+
:confirmation_was_authenticated, :aws_response
|
|
20
|
+
|
|
21
|
+
alias confirmation_authenticated? confirmation_was_authenticated
|
|
22
|
+
alias raw_message_delivery? raw_message_delivery
|
|
23
|
+
|
|
24
|
+
def has_raw_message_delivery?
|
|
25
|
+
raw_message_delivery
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def to_s
|
|
29
|
+
"SNS Subscription #{@arn}"
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
private
|
|
33
|
+
|
|
34
|
+
def validate_params(raw_params)
|
|
35
|
+
validated_params = check_resource_param_names(
|
|
36
|
+
raw_params: raw_params,
|
|
37
|
+
allowed_params: [:subscription_arn],
|
|
38
|
+
allowed_scalar_name: :subscription_arn,
|
|
39
|
+
allowed_scalar_type: String,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
if validated_params.empty?
|
|
43
|
+
raise ArgumentError, 'You must provide a subscription_arn to aws_sns_subscription.'
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
validated_params
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def fetch_from_api
|
|
50
|
+
backend = BackendFactory.create(inspec_runner)
|
|
51
|
+
catch_aws_errors do
|
|
52
|
+
begin
|
|
53
|
+
aws_response = backend.get_subscription_attributes(subscription_arn: @subscription_arn).attributes
|
|
54
|
+
@exists = true
|
|
55
|
+
@owner = aws_response['Owner']
|
|
56
|
+
@raw_message_delivery = aws_response['RawMessageDelivery'].eql?('true')
|
|
57
|
+
@topic_arn = aws_response['TopicArn']
|
|
58
|
+
@endpoint = aws_response['Endpoint']
|
|
59
|
+
@protocol = aws_response['Protocol']
|
|
60
|
+
@confirmation_was_authenticated = aws_response['ConfirmationWasAuthenticated'].eql?('true')
|
|
61
|
+
rescue Aws::SNS::Errors::NotFound
|
|
62
|
+
@exists = false
|
|
63
|
+
return
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
class Backend
|
|
69
|
+
class AwsClientApi < AwsBackendBase
|
|
70
|
+
BackendFactory.set_default_backend self
|
|
71
|
+
self.aws_client_class = Aws::SNS::Client
|
|
72
|
+
|
|
73
|
+
def get_subscription_attributes(criteria)
|
|
74
|
+
aws_service_client.get_subscription_attributes(criteria)
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
end
|