class OpenSearch::Aws::Sigv4Client

@attr [Aws::Sigv4::Signer] sigv4_signer Signer used to sign every request
puts client.cat.health
)
signer
{ host: ‘my-os-domain.us-east-1.es.amazonaws.com/’ },
client = OpenSearch::Aws::Sigv4Client.new(
session_token: ‘<session_token>’)
secret_access_key: ‘<secret_access_key>’,
access_key_id: ‘<access_key_id>’,
region: ‘us-east-1’,
signer = Aws::Sigv4::Signer.new(service: ‘es’,
@example
with a Sigv4 Signature with the provided signer.
This client accepts a Sigv4 Signer during initialization, and signs every request
AWS Sigv4 Wrapper for OpenSearch::Client.

def initialize(transport_args, sigv4_signer, options: {}, &block)

Options Hash: (**options)
  • :sigv4_debug (Boolean) -- whether to log debug info for Sigv4 Signing

Parameters:
  • options (Hash) --
  • sigv4_signer (Aws::Sigv4::Signer) -- an instance of AWS Sigv4 Signer.
  • block (&block) -- code block to be passed to OpenSearch::Transport::Client.
  • transport_args (Hash) -- arguments for OpenSearch::Transport::Client.
def initialize(transport_args, sigv4_signer, options: {}, &block)
  unless sigv4_signer.is_a?(::Aws::Sigv4::Signer)
    raise ArgumentError, "Please pass a Aws::Sigv4::Signer. A #{sigv4_signer.class} was given."
  end
  @sigv4_signer = sigv4_signer
  @sigv4_debug = options[:sigv4_debug]
  @logger = nil
  super(transport_args, &block)
end

def log(title, message)

def log(title, message)
  logger.debug("#{title.upcase}:\n\e[36m#{message}\e[0m")
end

def log_signature_info(signature)

Parameters:
  • signature (Aws::Sigv4::Signature) --
def log_signature_info(signature)
  return unless @sigv4_debug
  log('string to sign', signature.string_to_sign)
  log('canonical request', signature.canonical_request)
  log('signature headers', signature.headers)
end

def logger

def logger
  return @logger if @logger
  require 'logger'
  @logger = Logger.new(
    $stdout,
    progname: 'Sigv4',
    formatter: proc { |_severity, datetime, progname, msg| "\e[34m(#{datetime})  #{progname} - #{msg}\e[0m\n\n" }
  )
end

def perform_request(method, path, params = {}, body = nil, headers = nil)

Other tags:
    See: OpenSearch::Transport::Transport::Base::perform_request -
def perform_request(method, path, params = {}, body = nil, headers = nil)
  signature_body = body.is_a?(Hash) ? body.to_json : body.to_s
  signature = sigv4_signer.sign_request(
    http_method: method,
    url: signature_url(path, params),
    headers: headers,
    body: signature_body
  )
  headers = (headers || {}).merge(signature.headers)
  log_signature_info(signature)
  super(method, path, params, signature_body, headers)
end

def signature_url(path, params)

def signature_url(path, params)
  host = @transport.transport.hosts.dig(0, :host)
  path = "/#{path}" unless path.start_with?('/')
  params = params.clone
  params.delete(:ignore)
  params.delete('ignore')
  query_string = params.empty? ? '' : Faraday::Utils::ParamsHash[params].to_query.to_s
  URI::HTTP.build(host: host, path: path, query: query_string)
end

def verify_open_search

def verify_open_search
  @verified = true
end