require "resource_support/aws/aws_singular_resource_mixin" require "resource_support/aws/aws_backend_base" require "aws-sdk-sns" class AwsSnsSubscription < Inspec.resource(1) name "aws_sns_subscription" desc "Verifies settings for an SNS Subscription" example <<~EXAMPLE describe aws_sns_subscription('arn:aws:sns:us-east-1::test-topic-01:b214aff5-a2c7-438f-a753-8494493f2ff6') do it { should_not have_raw_message_delivery } it { should be_confirmation_authenticated } its('owner') { should cmp '12345678' } its('topic_arn') { should cmp 'arn:aws:sns:us-east-1::test-topic-01' } its('endpoint') { should cmp 'arn:aws:sqs:us-east-1::test-queue-01' } its('protocol') { should cmp 'sqs' } end EXAMPLE supports platform: "aws" include AwsSingularResourceMixin attr_reader :arn, :owner, :raw_message_delivery, :topic_arn, :endpoint, :protocol, :confirmation_was_authenticated, :aws_response alias confirmation_authenticated? confirmation_was_authenticated alias raw_message_delivery? raw_message_delivery def has_raw_message_delivery? raw_message_delivery end def to_s "SNS Subscription #{@arn}" end private def validate_params(raw_params) validated_params = check_resource_param_names( raw_params: raw_params, allowed_params: [:subscription_arn], allowed_scalar_name: :subscription_arn, allowed_scalar_type: String ) if validated_params.empty? raise ArgumentError, "You must provide a subscription_arn to aws_sns_subscription." end validated_params end def fetch_from_api backend = BackendFactory.create(inspec_runner) catch_aws_errors do begin aws_response = backend.get_subscription_attributes(subscription_arn: @subscription_arn).attributes @exists = true @owner = aws_response["Owner"] @raw_message_delivery = aws_response["RawMessageDelivery"].eql?("true") @topic_arn = aws_response["TopicArn"] @endpoint = aws_response["Endpoint"] @protocol = aws_response["Protocol"] @confirmation_was_authenticated = aws_response["ConfirmationWasAuthenticated"].eql?("true") rescue Aws::SNS::Errors::NotFound @exists = false return end end end class Backend class AwsClientApi < AwsBackendBase BackendFactory.set_default_backend self self.aws_client_class = Aws::SNS::Client def get_subscription_attributes(criteria) aws_service_client.get_subscription_attributes(criteria) end end end end