opensearch-aws-sigv4 1.1.0 → 1.2.0
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
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +8 -2
- data/README.md +9 -92
- data/USER_GUIDE.md +59 -0
- data/lib/opensearch-aws-sigv4/version.rb +1 -1
- data/lib/opensearch-aws-sigv4.rb +30 -1
- data.tar.gz.sig +0 -0
- metadata +3 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8afd49d01221929f86b5bf1792d12a963cb969b5edc6a9abb242241c31170221
|
4
|
+
data.tar.gz: 278f930240341ab20ed9fe5f8182c1344b1825f7af7232001d096a320c90d9f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cf3e31f4899441290c6ea65c452d52a1a21b5c36debc1c3bb1c0545d963526b86321ccaf0b136c75dd0dda5851bfe91a869154a08a3b01db2368ebe45c56955d
|
7
|
+
data.tar.gz: 2f5d79ef941d038d2c2f04a39266a8919c1c09626492da0946476b73b57c34565d8fcc05863c084e98f46e75f5d9e9f42416f5048a9674cd179ce1fbcf62c2c5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -3,12 +3,18 @@ Inspired from [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
|
3
3
|
|
4
4
|
## [Unreleased]
|
5
5
|
### Added
|
6
|
-
-
|
7
|
-
|
6
|
+
- Ability to printout Sigv4 Signature for debugging ([#149](https://github.com/opensearch-project/opensearch-ruby/issues/149))
|
8
7
|
### Changed
|
9
8
|
### Deprecated
|
10
9
|
### Removed
|
11
10
|
### Fixed
|
11
|
+
|
12
|
+
### Security
|
13
|
+
|
14
|
+
## [1.1.0]
|
15
|
+
### Added
|
16
|
+
- Added support for Amazon OpenSearch Serverless ([#131](https://github.com/opensearch-project/opensearch-ruby/issues/131))
|
17
|
+
### Fixed
|
12
18
|
- Sign validation requests when using AWS Sigv4 ([#134](https://github.com/opensearch-project/opensearch-ruby/pull/134))
|
13
19
|
|
14
20
|
### Security
|
data/README.md
CHANGED
@@ -1,101 +1,18 @@
|
|
1
|
-
|
1
|
+
- [OpenSearch AWS Sigv4 Client](#opensearch-aws-sigv4-client)
|
2
|
+
- [Compatibility](#compatibility)
|
3
|
+
- [User Guide](#user-guide)
|
4
|
+
- [License](#license)
|
5
|
+
# OpenSearch AWS Sigv4 Client
|
2
6
|
|
3
|
-
The `opensearch-aws-sigv4` library provides an AWS Sigv4 client for [OpenSearch](
|
7
|
+
The `opensearch-aws-sigv4` library provides an AWS Sigv4 client for connecting to [Amazon OpenSearch Service](https://docs.aws.amazon.com/opensearch-service/index.html).
|
4
8
|
|
5
9
|
## Compatibility
|
6
10
|
|
7
|
-
|
11
|
+
See [COMPATIBILITY](../COMPATIBILITY.md).
|
8
12
|
|
9
|
-
|
13
|
+
## User Guide
|
10
14
|
|
11
|
-
See [
|
12
|
-
|
13
|
-
## Installation
|
14
|
-
|
15
|
-
Install the package from [Rubygems](https://rubygems.org):
|
16
|
-
|
17
|
-
gem install opensearch-aws-sigv4
|
18
|
-
|
19
|
-
To use an unreleased version, either add it to your `Gemfile` for [Bundler](http://gembundler.com):
|
20
|
-
|
21
|
-
gem 'opensearch-aws-sigv4', git: 'git://github.com/opensearch-project/opensearch-ruby.git'
|
22
|
-
|
23
|
-
or install it from a source code checkout:
|
24
|
-
|
25
|
-
git clone https://github.com/opensearch-project/opensearch-ruby
|
26
|
-
cd opensearch-ruby/opensearch-aws-sigv4
|
27
|
-
bundle install
|
28
|
-
rake install
|
29
|
-
|
30
|
-
## Usage
|
31
|
-
|
32
|
-
This library is an AWS Sigv4 wrapper for
|
33
|
-
[`opensearch-ruby`](https://github.com/opensearch-project/opensearch-ruby/tree/main/opensearch-ruby),
|
34
|
-
which is a Ruby client for OpenSearch. The `OpenSearch::Aws::Sigv4Client` is, therefore, has all features of `OpenSearch::Client`.
|
35
|
-
And since `opensearch-ruby` is a dependency of `opensearch-aws-sigv4`, you only need to install `opensearch-aws-sigv4`.
|
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
|
-
|
40
|
-
```ruby
|
41
|
-
require 'opensearch-aws-sigv4'
|
42
|
-
require 'aws-sigv4'
|
43
|
-
|
44
|
-
signer = Aws::Sigv4::Signer.new(service: 'es',
|
45
|
-
region: 'us-west-2',
|
46
|
-
access_key_id: 'key_id',
|
47
|
-
secret_access_key: 'secret')
|
48
|
-
|
49
|
-
client = OpenSearch::Aws::Sigv4Client.new(
|
50
|
-
{ host: 'https://your.amz-managed-opensearch.domain',
|
51
|
-
log: true },
|
52
|
-
signer)
|
53
|
-
|
54
|
-
client.cluster.health
|
55
|
-
|
56
|
-
client.transport.reload_connections!
|
57
|
-
|
58
|
-
client.search q: 'test'
|
59
|
-
```
|
60
|
-
|
61
|
-
Please refer to [opensearch-ruby](https://github.com/opensearch-project/opensearch-ruby/blob/main/opensearch-ruby/README.md) documentation for further details.
|
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
|
-
|
96
|
-
## Development
|
97
|
-
|
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.
|
15
|
+
See [USER_GUIDE](USER_GUIDE.md).
|
99
16
|
|
100
17
|
## License
|
101
18
|
|
data/USER_GUIDE.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
- [User Guide](#user-guide)
|
2
|
+
- [Setup](#setup)
|
3
|
+
- [Usage](#usage)
|
4
|
+
- [Amazon OpenSearch Service](#amazon-opensearch-service)
|
5
|
+
# User Guide
|
6
|
+
## Setup
|
7
|
+
|
8
|
+
To add the gem to your project, install it using [RubyGems](https://rubygems.org/):
|
9
|
+
|
10
|
+
```
|
11
|
+
gem install opensearch-aws-sigv4
|
12
|
+
```
|
13
|
+
|
14
|
+
or add it to your Gemfile:
|
15
|
+
```
|
16
|
+
gem opensearch-aws-sigv4
|
17
|
+
```
|
18
|
+
and run:
|
19
|
+
```
|
20
|
+
bundle install
|
21
|
+
```
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
This library is an AWS Sigv4 wrapper for [`opensearch-ruby`](https://github.com/opensearch-project/opensearch-ruby/tree/main/opensearch-ruby), which is a Ruby client for OpenSearch. The `OpenSearch::Aws::Sigv4Client`, therefore, has all features of `OpenSearch::Client`.
|
26
|
+
|
27
|
+
### Amazon OpenSearch Service
|
28
|
+
To sign requests for the Amazon OpenSearch Service:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
require 'opensearch-aws-sigv4'
|
32
|
+
require 'aws-sigv4'
|
33
|
+
|
34
|
+
signer = Aws::Sigv4::Signer.new(service: 'es', # signing service name, use "aoss" for OpenSearch Serverless
|
35
|
+
region: 'us-west-2', # signing service region
|
36
|
+
access_key_id: 'key_id',
|
37
|
+
secret_access_key: 'secret')
|
38
|
+
|
39
|
+
client = OpenSearch::Aws::Sigv4Client.new({
|
40
|
+
host: 'https://your.amz-managed-opensearch.domain', # serverless endpoint for OpenSearch Serverless
|
41
|
+
log: true
|
42
|
+
}, signer)
|
43
|
+
|
44
|
+
# create an index and document
|
45
|
+
index = 'prime'
|
46
|
+
client.indices.create(index: index)
|
47
|
+
client.index(index: index, id: '1', body: { name: 'Amazon Echo',
|
48
|
+
msrp: '5999',
|
49
|
+
year: 2011 })
|
50
|
+
|
51
|
+
# search for the document
|
52
|
+
client.search(body: { query: { match: { name: 'Echo' } } })
|
53
|
+
|
54
|
+
# delete the document
|
55
|
+
client.delete(index: index, id: '1')
|
56
|
+
|
57
|
+
# delete the index
|
58
|
+
client.indices.delete(index: index)
|
59
|
+
```
|
data/lib/opensearch-aws-sigv4.rb
CHANGED
@@ -39,12 +39,16 @@ module OpenSearch
|
|
39
39
|
# @param [Hash] transport_args arguments for OpenSearch::Transport::Client.
|
40
40
|
# @param [&block] block code block to be passed to OpenSearch::Transport::Client.
|
41
41
|
# @param [Aws::Sigv4::Signer] sigv4_signer an instance of AWS Sigv4 Signer.
|
42
|
-
|
42
|
+
# @param [Hash] options
|
43
|
+
# @option options [Boolean] :sigv4_debug whether to log debug info for Sigv4 Signing
|
44
|
+
def initialize(transport_args = {}, sigv4_signer, options: {}, &block)
|
43
45
|
unless sigv4_signer.is_a?(::Aws::Sigv4::Signer)
|
44
46
|
raise ArgumentError, "Please pass a Aws::Sigv4::Signer. A #{sigv4_signer.class} was given."
|
45
47
|
end
|
46
48
|
|
47
49
|
@sigv4_signer = sigv4_signer
|
50
|
+
@sigv4_debug = options[:sigv4_debug]
|
51
|
+
@logger = nil
|
48
52
|
super(transport_args, &block)
|
49
53
|
end
|
50
54
|
|
@@ -57,6 +61,8 @@ module OpenSearch
|
|
57
61
|
headers: headers,
|
58
62
|
body: signature_body)
|
59
63
|
headers = (headers || {}).merge(signature.headers)
|
64
|
+
|
65
|
+
log_signature_info(signature)
|
60
66
|
super(method, path, params, body, headers)
|
61
67
|
end
|
62
68
|
|
@@ -72,6 +78,29 @@ module OpenSearch
|
|
72
78
|
query_string = params.empty? ? '' : "#{Faraday::Utils::ParamsHash[params].to_query}"
|
73
79
|
URI::HTTP.build(host: host, path: path, query: query_string)
|
74
80
|
end
|
81
|
+
|
82
|
+
# @param [Aws::Sigv4::Signature] signature
|
83
|
+
def log_signature_info(signature)
|
84
|
+
return unless @sigv4_debug
|
85
|
+
|
86
|
+
log('string to sign', signature.string_to_sign)
|
87
|
+
log('canonical request', signature.canonical_request)
|
88
|
+
log('signature headers', signature.headers)
|
89
|
+
end
|
90
|
+
|
91
|
+
def log(title, message)
|
92
|
+
logger.debug("#{title.upcase}:\n\e[36m#{message}\e[0m")
|
93
|
+
end
|
94
|
+
|
95
|
+
def logger
|
96
|
+
return @logger if @logger
|
97
|
+
|
98
|
+
require 'logger'
|
99
|
+
@logger = Logger.new(
|
100
|
+
STDOUT,
|
101
|
+
progname: 'Sigv4',
|
102
|
+
formatter: proc { |_severity, datetime, progname, msg| "\e[34m(#{datetime}) #{progname} - #{msg}\e[0m\n\n" })
|
103
|
+
end
|
75
104
|
end
|
76
105
|
end
|
77
106
|
end
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opensearch-aws-sigv4
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Theo Truong
|
@@ -31,7 +31,7 @@ cert_chain:
|
|
31
31
|
r+j7FLyKuk5DzIxiCp8QN5dU71BbGUmsHf/C5UV76WLPOFX/szeaHhPwpjR3sK7r
|
32
32
|
5zLgCV1KP7cgDdCYMlmZGeSViU8NV+Yy8/ghrzGpqVw=
|
33
33
|
-----END CERTIFICATE-----
|
34
|
-
date: 2023-
|
34
|
+
date: 2023-02-28 00:00:00.000000000 Z
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: aws-sigv4
|
@@ -220,6 +220,7 @@ files:
|
|
220
220
|
- LICENSE
|
221
221
|
- README.md
|
222
222
|
- Rakefile
|
223
|
+
- USER_GUIDE.md
|
223
224
|
- bin/opensearch_sigv4_console
|
224
225
|
- lib/opensearch-aws-sigv4.rb
|
225
226
|
- lib/opensearch-aws-sigv4/version.rb
|
metadata.gz.sig
CHANGED
Binary file
|