opensearch-aws-sigv4 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43ed10e26e1b3308e4a19d3d479269c36d27b2244d4d688852afbf80d7fb16c9
4
- data.tar.gz: 7c53006f740126f7f3a19fbc7b9a83f0096484c0240a514c8ff7c843fd8b5c2b
3
+ metadata.gz: 0c18c127380978f8f6c155763004c09c2f47f8fe510060f78f5e2dd22dfda7d9
4
+ data.tar.gz: 1bf9b1df47af0b02f6e95950aab3bd51aa107e0d1b70dad9b210c894bcc5074f
5
5
  SHA512:
6
- metadata.gz: f93669b3c6e92edad450f72aab6a53cfe1f0dd80bc2e63dfe4da8b2e9f78f7788933a45092d077d1df0926b9e20c53677529853b36ce6f56541781dba14358d0
7
- data.tar.gz: 6951cf5f5f3da63dc30df598b21cb798945670055db39b8312b78bfd296bb33eea0538940b54cbfd255af9dd78ae49be2cbe11f41802d49320eafc14852f1ae1
6
+ metadata.gz: 6425d6f4b4925292cca4d1ab444643b40399ce6728b865715537df1c061c776bcb759b9fbd1f5d891a72e78ebf457ec601f4d3e0bb106e151d274a9aadb0e81c
7
+ data.tar.gz: 0376e3c9a1b67e4885335ecd1a751cd2db67725242f5a09f84cfa905dcbed18b2cbe64043e8ffcbb1b638bc5b71917982be13da6186c6f04cbb9f10f73c18d1f
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md ADDED
@@ -0,0 +1,18 @@
1
+ # CHANGELOG
2
+ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
3
+
4
+ ## [Unreleased]
5
+ ### Added
6
+ - Added support for Amazon OpenSearch Serverless ([#131](https://github.com/opensearch-project/opensearch-ruby/issues/131))
7
+
8
+ ### Changed
9
+ ### Deprecated
10
+ ### Removed
11
+ ### Fixed
12
+ - Sign validation requests when using AWS Sigv4 ([#134](https://github.com/opensearch-project/opensearch-ruby/pull/134))
13
+
14
+ ### Security
15
+
16
+ ## 1.0.0
17
+ ### Added
18
+ - Added `OpenSearch::AWS::Sigv4Client` ([#110](https://github.com/opensearch-project/opensearch-ruby/pull/110))
data/README.md CHANGED
@@ -34,6 +34,9 @@ This library is an AWS Sigv4 wrapper for
34
34
  which is a Ruby client for OpenSearch. The `OpenSearch::Aws::Sigv4Client` is, therefore, has all features of `OpenSearch::Client`.
35
35
  And since `opensearch-ruby` is a dependency of `opensearch-aws-sigv4`, you only need to install `opensearch-aws-sigv4`.
36
36
 
37
+ ### Amazon Managed OpenSearch
38
+ Via the Sigv4 Client, you can interact with an Amazon Managed OpenSearch cluster just like would with a self-managed cluster:
39
+
37
40
  ```ruby
38
41
  require 'opensearch-aws-sigv4'
39
42
  require 'aws-sigv4'
@@ -43,7 +46,10 @@ signer = Aws::Sigv4::Signer.new(service: 'es',
43
46
  access_key_id: 'key_id',
44
47
  secret_access_key: 'secret')
45
48
 
46
- client = OpenSearch::Aws::Sigv4Client.new({ log: true }, signer)
49
+ client = OpenSearch::Aws::Sigv4Client.new(
50
+ { host: 'https://your.amz-managed-opensearch.domain',
51
+ log: true },
52
+ signer)
47
53
 
48
54
  client.cluster.health
49
55
 
@@ -54,6 +60,39 @@ client.search q: 'test'
54
60
 
55
61
  Please refer to [opensearch-ruby](https://github.com/opensearch-project/opensearch-ruby/blob/main/opensearch-ruby/README.md) documentation for further details.
56
62
 
63
+ ### Amazon OpenSearch Serverless
64
+ You can also use this client to connect to Amazon OpenSearch Serverless (AOSS). Remember to change the service for the signer to `aoss`:
65
+
66
+ ```ruby
67
+ require 'opensearch-aws-sigv4'
68
+ require 'aws-sigv4'
69
+
70
+ signer = Aws::Sigv4::Signer.new(service: 'aoss',
71
+ region: 'us-west-2',
72
+ access_key_id: 'key_id',
73
+ secret_access_key: 'secret')
74
+
75
+ client = OpenSearch::Aws::Sigv4Client.new(
76
+ { host: 'https://your.amz-opensearch-serverless.endpoint',
77
+ log: true },
78
+ signer)
79
+
80
+ index = 'prime'
81
+ client.indices.create(index: index)
82
+ client.index(index: index, id: '1', body: { name: 'Amazon Echo',
83
+ msrp: '5999',
84
+ year: 2011 })
85
+ client.search(body: { query: { match: { name: 'Echo' } } })
86
+ client.delete(index: index, id: '1')
87
+ client.indices.delete(index: index)
88
+
89
+ # Most administrative commands like the ones below will result in a 404 error for AOSS
90
+ client.cluster.stats
91
+ client.cat.health
92
+ ```
93
+
94
+ *NOTES:* AOSS does NOT support all API endpoints provided by a standard OpenSearch cluster. Refer to [AOSS Developer's Guide](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-genref.html) for more detail.
95
+
57
96
  ## Development
58
97
 
59
98
  You can run `rake -T` to check the test tasks. Use `COVERAGE=true` before running a test task to check the coverage with Simplecov.
@@ -10,7 +10,7 @@
10
10
  module OpenSearch
11
11
  module Aws
12
12
  module Sigv4
13
- VERSION = '1.0.0'.freeze
13
+ VERSION = '1.1.0'.freeze
14
14
  end
15
15
  end
16
16
  end
@@ -45,12 +45,11 @@ module OpenSearch
45
45
  end
46
46
 
47
47
  @sigv4_signer = sigv4_signer
48
- super transport_args, &block
48
+ super(transport_args, &block)
49
49
  end
50
50
 
51
51
  # @see OpenSearch::Transport::Transport::Base::perform_request
52
52
  def perform_request(method, path, params = {}, body = nil, headers = nil)
53
- verify_open_search unless @verified
54
53
  signature_body = body.is_a?(Hash) ? body.to_json : body.to_s
55
54
  signature = sigv4_signer.sign_request(
56
55
  http_method: method,
@@ -58,11 +57,15 @@ module OpenSearch
58
57
  headers: headers,
59
58
  body: signature_body)
60
59
  headers = (headers || {}).merge(signature.headers)
61
- @transport.perform_request(method, path, params, body, headers)
60
+ super(method, path, params, body, headers)
62
61
  end
63
62
 
64
63
  private
65
64
 
65
+ def verify_open_search
66
+ @verified = true
67
+ end
68
+
66
69
  def signature_url(path, params)
67
70
  host = @transport.transport.hosts.dig(0, :host)
68
71
  path = '/' + path unless path.start_with?('/')
@@ -16,8 +16,8 @@ signing_key_path = File.expand_path("../gem-private_key.pem")
16
16
  Gem::Specification.new do |s|
17
17
  s.name = 'opensearch-aws-sigv4'
18
18
  s.version = OpenSearch::Aws::Sigv4::VERSION
19
- s.authors = ['Theo Truong']
20
- s.email = ['theo.nam.truong@gmail.com']
19
+ s.authors = ['Theo Truong', 'Robin Roestenburg']
20
+ s.email = ['theo.nam.truong@gmail.com', 'robin.roestenburg@4me.com']
21
21
  s.summary = 'Ruby AWS Sigv4 Client for OpenSearch'
22
22
  s.homepage = 'https://opensearch.org/docs/latest'
23
23
  s.license = 'Apache-2.0'
@@ -13,7 +13,7 @@ require 'timecop'
13
13
 
14
14
  describe OpenSearch::Aws::Sigv4Client do
15
15
  subject(:client) do
16
- OpenSearch::Aws::Sigv4Client.new(
16
+ described_class.new(
17
17
  { host: 'http://localhost:9200',
18
18
  transport_options: { ssl: { verify: false } } },
19
19
  signer)
@@ -50,17 +50,16 @@ describe OpenSearch::Aws::Sigv4Client do
50
50
  _double
51
51
  end
52
52
  let(:signed_headers) do
53
- { 'authorization' => 'AWS4-HMAC-SHA256 Credential=key_id/20220101/us-west-2/es/aws4_request, '\
53
+ { 'authorization' => 'AWS4-HMAC-SHA256 Credential=key_id/20220101/us-west-2/es/aws4_request, '\
54
54
  'SignedHeaders=host;x-amz-content-sha256;x-amz-date, ' \
55
55
  'Signature=9c4c690110483308f62a91c2ca873857750bca2607ba1aabdae0d2303950310a',
56
- 'host' => 'localhost',
57
- 'x-amz-content-sha256' => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
58
- 'x-amz-date' => '20220101T000000Z' }
56
+ 'host' => 'localhost',
57
+ 'x-amz-content-sha256' => 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
58
+ 'x-amz-date' => '20220101T000000Z' }
59
59
  end
60
-
60
+
61
61
  before(:each) do
62
62
  Timecop.freeze(Time.utc(2022))
63
- allow(client).to receive(:verify_open_search) { true }
64
63
  client.transport = transport_double
65
64
  end
66
65
 
@@ -71,5 +70,10 @@ describe OpenSearch::Aws::Sigv4Client do
71
70
  expect(output).to eq(response)
72
71
  expect(transport_double).to have_received(:perform_request).with('GET', '/', {}, '', signed_headers)
73
72
  end
73
+
74
+ it 'skips the opensearch verification' do
75
+ expect(client).to_not receive(:open_search_validation_request)
76
+ client.perform_request('GET', '/_stats', {}, '', {})
77
+ end
74
78
  end
75
79
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,10 +1,11 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opensearch-aws-sigv4
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Theo Truong
8
+ - Robin Roestenburg
8
9
  autorequire:
9
10
  bindir: bin
10
11
  cert_chain:
@@ -30,7 +31,7 @@ cert_chain:
30
31
  r+j7FLyKuk5DzIxiCp8QN5dU71BbGUmsHf/C5UV76WLPOFX/szeaHhPwpjR3sK7r
31
32
  5zLgCV1KP7cgDdCYMlmZGeSViU8NV+Yy8/ghrzGpqVw=
32
33
  -----END CERTIFICATE-----
33
- date: 2022-11-30 00:00:00.000000000 Z
34
+ date: 2023-01-20 00:00:00.000000000 Z
34
35
  dependencies:
35
36
  - !ruby/object:Gem::Dependency
36
37
  name: aws-sigv4
@@ -205,6 +206,7 @@ description: 'Ruby AWS Sigv4 Client for OpenSearch
205
206
  '
206
207
  email:
207
208
  - theo.nam.truong@gmail.com
209
+ - robin.roestenburg@4me.com
208
210
  executables:
209
211
  - opensearch_sigv4_console
210
212
  extensions: []
@@ -213,6 +215,7 @@ extra_rdoc_files:
213
215
  - LICENSE
214
216
  files:
215
217
  - ".gitignore"
218
+ - CHANGELOG.md
216
219
  - Gemfile
217
220
  - LICENSE
218
221
  - README.md
metadata.gz.sig CHANGED
Binary file