aws-sdk-core 3.178.0 → 3.233.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
- data/CHANGELOG.md +709 -0
- data/VERSION +1 -1
- data/lib/aws-defaults/default_configuration.rb +1 -2
- data/lib/aws-defaults.rb +4 -1
- data/lib/aws-sdk-core/arn.rb +1 -3
- data/lib/aws-sdk-core/assume_role_credentials.rb +13 -5
- data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +14 -7
- data/lib/aws-sdk-core/binary/decode_handler.rb +3 -9
- data/lib/aws-sdk-core/binary/encode_handler.rb +1 -1
- data/lib/aws-sdk-core/binary/event_builder.rb +34 -37
- data/lib/aws-sdk-core/binary/event_stream_decoder.rb +1 -0
- data/lib/aws-sdk-core/binary/event_stream_encoder.rb +4 -3
- data/lib/aws-sdk-core/cbor/decoder.rb +308 -0
- data/lib/aws-sdk-core/cbor/encoder.rb +243 -0
- data/lib/aws-sdk-core/cbor.rb +53 -0
- data/lib/aws-sdk-core/client_side_monitoring.rb +9 -0
- data/lib/aws-sdk-core/client_stubs.rb +33 -55
- data/lib/aws-sdk-core/credential_provider.rb +5 -1
- data/lib/aws-sdk-core/credential_provider_chain.rb +38 -11
- data/lib/aws-sdk-core/credentials.rb +19 -6
- data/lib/aws-sdk-core/ec2_metadata.rb +1 -1
- data/lib/aws-sdk-core/ecs_credentials.rb +79 -11
- data/lib/aws-sdk-core/endpoints/endpoint.rb +3 -1
- data/lib/aws-sdk-core/endpoints/matchers.rb +21 -19
- data/lib/aws-sdk-core/endpoints.rb +101 -21
- data/lib/aws-sdk-core/error_handler.rb +46 -0
- data/lib/aws-sdk-core/errors.rb +14 -5
- data/lib/aws-sdk-core/event_emitter.rb +1 -17
- data/lib/aws-sdk-core/ini_parser.rb +8 -1
- data/lib/aws-sdk-core/instance_profile_credentials.rb +168 -155
- data/lib/aws-sdk-core/json/builder.rb +8 -1
- data/lib/aws-sdk-core/json/error_handler.rb +29 -13
- data/lib/aws-sdk-core/json/handler.rb +13 -6
- data/lib/aws-sdk-core/json/json_engine.rb +3 -1
- data/lib/aws-sdk-core/json/oj_engine.rb +7 -1
- data/lib/aws-sdk-core/json/parser.rb +33 -3
- data/lib/aws-sdk-core/json.rb +43 -14
- data/lib/aws-sdk-core/log/param_filter.rb +2 -2
- data/lib/aws-sdk-core/log/param_formatter.rb +7 -3
- data/lib/aws-sdk-core/log.rb +10 -0
- data/lib/aws-sdk-core/lru_cache.rb +75 -0
- data/lib/aws-sdk-core/pageable_response.rb +1 -1
- data/lib/aws-sdk-core/param_validator.rb +9 -4
- data/lib/aws-sdk-core/plugins/bearer_authorization.rb +2 -0
- data/lib/aws-sdk-core/plugins/checksum_algorithm.rb +332 -167
- data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +1 -1
- data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +14 -2
- data/lib/aws-sdk-core/plugins/credentials_configuration.rb +78 -56
- data/lib/aws-sdk-core/plugins/endpoint_pattern.rb +40 -32
- data/lib/aws-sdk-core/plugins/global_configuration.rb +8 -9
- data/lib/aws-sdk-core/plugins/http_checksum.rb +3 -8
- data/lib/aws-sdk-core/plugins/invocation_id.rb +1 -11
- data/lib/aws-sdk-core/plugins/logging.rb +2 -0
- data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +3 -1
- data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -24
- data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +6 -8
- data/lib/aws-sdk-core/plugins/protocols/query.rb +4 -2
- data/lib/aws-sdk-core/plugins/protocols/rest_json.rb +3 -15
- data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +3 -0
- data/lib/aws-sdk-core/plugins/protocols/rpc_v2.rb +17 -0
- data/lib/aws-sdk-core/plugins/regional_endpoint.rb +74 -25
- data/lib/aws-sdk-core/plugins/request_compression.rb +11 -2
- data/lib/aws-sdk-core/plugins/retry_errors.rb +12 -3
- data/lib/aws-sdk-core/plugins/sign.rb +55 -34
- data/lib/aws-sdk-core/plugins/signature_v2.rb +2 -1
- data/lib/aws-sdk-core/plugins/signature_v4.rb +2 -1
- data/lib/aws-sdk-core/plugins/stub_responses.rb +59 -9
- data/lib/aws-sdk-core/plugins/telemetry.rb +75 -0
- data/lib/aws-sdk-core/plugins/transfer_encoding.rb +16 -9
- data/lib/aws-sdk-core/plugins/user_agent.rb +101 -26
- data/lib/aws-sdk-core/plugins.rb +39 -0
- data/lib/aws-sdk-core/process_credentials.rb +48 -29
- data/lib/aws-sdk-core/query/ec2_handler.rb +27 -0
- data/lib/aws-sdk-core/query/ec2_param_builder.rb +5 -7
- data/lib/aws-sdk-core/query/handler.rb +4 -4
- data/lib/aws-sdk-core/query/param_builder.rb +2 -2
- data/lib/aws-sdk-core/query.rb +2 -1
- data/lib/aws-sdk-core/refreshing_credentials.rb +12 -6
- data/lib/aws-sdk-core/resources.rb +8 -0
- data/lib/aws-sdk-core/rest/content_type_handler.rb +60 -0
- data/lib/aws-sdk-core/rest/handler.rb +3 -4
- data/lib/aws-sdk-core/rest/request/body.rb +32 -5
- data/lib/aws-sdk-core/rest/request/endpoint.rb +24 -4
- data/lib/aws-sdk-core/rest/request/headers.rb +15 -7
- data/lib/aws-sdk-core/rest/request/querystring_builder.rb +62 -36
- data/lib/aws-sdk-core/rest/response/body.rb +15 -1
- data/lib/aws-sdk-core/rest/response/header_list_parser.rb +79 -0
- data/lib/aws-sdk-core/rest/response/headers.rb +8 -3
- data/lib/aws-sdk-core/rest.rb +1 -0
- data/lib/aws-sdk-core/rpc_v2/builder.rb +62 -0
- data/lib/aws-sdk-core/rpc_v2/cbor_engine.rb +18 -0
- data/lib/aws-sdk-core/rpc_v2/content_type_handler.rb +47 -0
- data/lib/aws-sdk-core/rpc_v2/error_handler.rb +95 -0
- data/lib/aws-sdk-core/rpc_v2/handler.rb +79 -0
- data/lib/aws-sdk-core/rpc_v2/parser.rb +98 -0
- data/lib/aws-sdk-core/rpc_v2.rb +69 -0
- data/lib/aws-sdk-core/shared_config.rb +113 -41
- data/lib/aws-sdk-core/shared_credentials.rb +1 -7
- data/lib/aws-sdk-core/sso_credentials.rb +4 -1
- data/lib/aws-sdk-core/static_token_provider.rb +1 -2
- data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +12 -11
- data/lib/aws-sdk-core/stubbing/protocols/json.rb +11 -10
- data/lib/aws-sdk-core/stubbing/protocols/query.rb +7 -6
- data/lib/aws-sdk-core/stubbing/protocols/rest.rb +2 -1
- data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +9 -8
- data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +6 -5
- data/lib/aws-sdk-core/stubbing/protocols/rpc_v2.rb +39 -0
- data/lib/aws-sdk-core/stubbing/stub_data.rb +11 -0
- data/lib/aws-sdk-core/stubbing.rb +22 -0
- data/lib/aws-sdk-core/telemetry/base.rb +177 -0
- data/lib/aws-sdk-core/telemetry/no_op.rb +70 -0
- data/lib/aws-sdk-core/telemetry/otel.rb +235 -0
- data/lib/aws-sdk-core/telemetry/span_kind.rb +22 -0
- data/lib/aws-sdk-core/telemetry/span_status.rb +59 -0
- data/lib/aws-sdk-core/telemetry.rb +78 -0
- data/lib/aws-sdk-core/token.rb +3 -3
- data/lib/aws-sdk-core/token_provider.rb +4 -0
- data/lib/aws-sdk-core/token_provider_chain.rb +2 -6
- data/lib/aws-sdk-core/util.rb +41 -1
- data/lib/aws-sdk-core/waiters/poller.rb +10 -5
- data/lib/aws-sdk-core/xml/builder.rb +17 -9
- data/lib/aws-sdk-core/xml/error_handler.rb +35 -43
- data/lib/aws-sdk-core/xml/parser/frame.rb +4 -20
- data/lib/aws-sdk-core/xml/parser/stack.rb +2 -0
- data/lib/aws-sdk-core/xml/parser.rb +2 -6
- data/lib/aws-sdk-core.rb +82 -107
- data/lib/aws-sdk-sso/client.rb +189 -96
- data/lib/aws-sdk-sso/client_api.rb +7 -0
- data/lib/aws-sdk-sso/endpoint_parameters.rb +9 -6
- data/lib/aws-sdk-sso/endpoint_provider.rb +30 -28
- data/lib/aws-sdk-sso/endpoints.rb +2 -54
- data/lib/aws-sdk-sso/plugins/endpoints.rb +23 -22
- data/lib/aws-sdk-sso/types.rb +1 -0
- data/lib/aws-sdk-sso.rb +15 -11
- data/lib/aws-sdk-ssooidc/client.rb +609 -129
- data/lib/aws-sdk-ssooidc/client_api.rb +94 -1
- data/lib/aws-sdk-ssooidc/endpoint_parameters.rb +9 -6
- data/lib/aws-sdk-ssooidc/endpoint_provider.rb +30 -28
- data/lib/aws-sdk-ssooidc/endpoints.rb +2 -40
- data/lib/aws-sdk-ssooidc/errors.rb +62 -0
- data/lib/aws-sdk-ssooidc/plugins/endpoints.rb +23 -20
- data/lib/aws-sdk-ssooidc/types.rb +419 -53
- data/lib/aws-sdk-ssooidc.rb +15 -11
- data/lib/aws-sdk-sts/client.rb +414 -147
- data/lib/aws-sdk-sts/client_api.rb +48 -9
- data/lib/aws-sdk-sts/customizations.rb +5 -2
- data/lib/aws-sdk-sts/endpoint_parameters.rb +10 -9
- data/lib/aws-sdk-sts/endpoint_provider.rb +52 -57
- data/lib/aws-sdk-sts/endpoints.rb +2 -118
- data/lib/aws-sdk-sts/errors.rb +15 -0
- data/lib/aws-sdk-sts/plugins/endpoints.rb +23 -30
- data/lib/aws-sdk-sts/presigner.rb +3 -7
- data/lib/aws-sdk-sts/types.rb +209 -27
- data/lib/aws-sdk-sts.rb +15 -11
- data/lib/seahorse/client/async_base.rb +4 -5
- data/lib/seahorse/client/async_response.rb +19 -0
- data/lib/seahorse/client/base.rb +18 -21
- data/lib/seahorse/client/h2/connection.rb +18 -28
- data/lib/seahorse/client/h2/handler.rb +14 -3
- data/lib/seahorse/client/handler.rb +1 -1
- data/lib/seahorse/client/http/response.rb +1 -1
- data/lib/seahorse/client/net_http/connection_pool.rb +15 -12
- data/lib/seahorse/client/net_http/handler.rb +21 -9
- data/lib/seahorse/client/net_http/patches.rb +1 -4
- data/lib/seahorse/client/networking_error.rb +1 -1
- data/lib/seahorse/client/plugin.rb +9 -0
- data/lib/seahorse/client/plugins/endpoint.rb +0 -1
- data/lib/seahorse/client/plugins/h2.rb +4 -4
- data/lib/seahorse/client/plugins/net_http.rb +57 -16
- data/lib/seahorse/client/plugins/request_callback.rb +31 -0
- data/lib/seahorse/client/request_context.rb +9 -2
- data/lib/seahorse/client/response.rb +8 -0
- data/lib/seahorse/model/shapes.rb +2 -2
- data/lib/seahorse/util.rb +2 -1
- data/sig/aws-sdk-core/async_client_stubs.rbs +21 -0
- data/sig/aws-sdk-core/client_stubs.rbs +10 -0
- data/sig/aws-sdk-core/errors.rbs +22 -0
- data/sig/aws-sdk-core/resources/collection.rbs +21 -0
- data/sig/aws-sdk-core/structure.rbs +4 -0
- data/sig/aws-sdk-core/telemetry/base.rbs +46 -0
- data/sig/aws-sdk-core/telemetry/otel.rbs +22 -0
- data/sig/aws-sdk-core/telemetry/span_kind.rbs +15 -0
- data/sig/aws-sdk-core/telemetry/span_status.rbs +24 -0
- data/sig/aws-sdk-core/waiters/errors.rbs +20 -0
- data/sig/aws-sdk-core.rbs +7 -0
- data/sig/seahorse/client/async_base.rbs +18 -0
- data/sig/seahorse/client/base.rbs +25 -0
- data/sig/seahorse/client/handler_builder.rbs +16 -0
- data/sig/seahorse/client/response.rbs +61 -0
- metadata +105 -23
- /data/lib/aws-sdk-core/xml/parser/{engines/libxml.rb → libxml_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/nokogiri.rb → nokogiri_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/oga.rb → oga_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/ox.rb → ox_engine.rb} +0 -0
- /data/lib/aws-sdk-core/xml/parser/{engines/rexml.rb → rexml_engine.rb} +0 -0
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
module Aws
|
6
|
+
module RpcV2
|
7
|
+
class Parser
|
8
|
+
include Seahorse::Model::Shapes
|
9
|
+
|
10
|
+
# @param [Seahorse::Model::ShapeRef] rules
|
11
|
+
def initialize(rules, query_compatible: false)
|
12
|
+
@rules = rules
|
13
|
+
@query_compatible = query_compatible
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse(cbor, target = nil)
|
17
|
+
return {} if cbor.empty?
|
18
|
+
|
19
|
+
parse_ref(@rules, RpcV2.decode(cbor), target)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def structure(ref, values, target = nil)
|
25
|
+
shape = ref.shape
|
26
|
+
target = ref.shape.struct_class.new if target.nil?
|
27
|
+
values.each do |key, value|
|
28
|
+
member_name, member_ref = shape.member_by_location_name(key)
|
29
|
+
if member_ref
|
30
|
+
target[member_name] = parse_ref(member_ref, value)
|
31
|
+
elsif shape.union && key != '__type'
|
32
|
+
target[:unknown] = { 'name' => key, 'value' => value }
|
33
|
+
end
|
34
|
+
end
|
35
|
+
# In services that were previously Query/XML, members that were
|
36
|
+
# "flattened" defaulted to empty lists. In JSON, these values are nil,
|
37
|
+
# which is backwards incompatible. To preserve backwards compatibility,
|
38
|
+
# we set a default value of [] for these members.
|
39
|
+
if @query_compatible
|
40
|
+
ref.shape.members.each do |member_name, member_target|
|
41
|
+
next unless target[member_name].nil?
|
42
|
+
|
43
|
+
if flattened_list?(member_target.shape)
|
44
|
+
target[member_name] = []
|
45
|
+
elsif flattened_map?(member_target.shape)
|
46
|
+
target[member_name] = {}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
if shape.union
|
52
|
+
# convert to subclass
|
53
|
+
member_subclass = shape.member_subclass(target.member).new
|
54
|
+
member_subclass[target.member] = target.value
|
55
|
+
target = member_subclass
|
56
|
+
end
|
57
|
+
target
|
58
|
+
end
|
59
|
+
|
60
|
+
def list(ref, values, target = nil)
|
61
|
+
target = [] if target.nil?
|
62
|
+
values.each do |value|
|
63
|
+
target << parse_ref(ref.shape.member, value)
|
64
|
+
end
|
65
|
+
target
|
66
|
+
end
|
67
|
+
|
68
|
+
def map(ref, values, target = nil)
|
69
|
+
target = {} if target.nil?
|
70
|
+
values.each do |key, value|
|
71
|
+
target[key] = parse_ref(ref.shape.value, value) unless value.nil?
|
72
|
+
end
|
73
|
+
target
|
74
|
+
end
|
75
|
+
|
76
|
+
def parse_ref(ref, value, target = nil)
|
77
|
+
if value.nil?
|
78
|
+
nil
|
79
|
+
else
|
80
|
+
case ref.shape
|
81
|
+
when StructureShape then structure(ref, value, target)
|
82
|
+
when ListShape then list(ref, value, target)
|
83
|
+
when MapShape then map(ref, value, target)
|
84
|
+
else value
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def flattened_list?(shape)
|
90
|
+
shape.is_a?(ListShape) && shape.flattened
|
91
|
+
end
|
92
|
+
|
93
|
+
def flattened_map?(shape)
|
94
|
+
shape.is_a?(MapShape) && shape.flattened
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'cbor'
|
4
|
+
require_relative 'rpc_v2/builder'
|
5
|
+
require_relative 'rpc_v2/content_type_handler'
|
6
|
+
require_relative 'rpc_v2/error_handler'
|
7
|
+
require_relative 'rpc_v2/handler'
|
8
|
+
require_relative 'rpc_v2/parser'
|
9
|
+
|
10
|
+
module Aws
|
11
|
+
# @api private
|
12
|
+
module RpcV2
|
13
|
+
class << self
|
14
|
+
# @param [Symbol,Class] engine
|
15
|
+
# Must be one of the following values:
|
16
|
+
#
|
17
|
+
# * :cbor
|
18
|
+
#
|
19
|
+
def engine=(engine)
|
20
|
+
@engine = Class === engine ? engine : load_engine(engine)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [Class] Returns the default engine.
|
24
|
+
# One of:
|
25
|
+
#
|
26
|
+
# * {CborEngine}
|
27
|
+
#
|
28
|
+
def engine
|
29
|
+
set_default_engine unless @engine
|
30
|
+
@engine
|
31
|
+
end
|
32
|
+
|
33
|
+
def encode(data)
|
34
|
+
@engine.encode(data)
|
35
|
+
end
|
36
|
+
|
37
|
+
def decode(bytes)
|
38
|
+
bytes.force_encoding(Encoding::BINARY)
|
39
|
+
@engine.decode(bytes)
|
40
|
+
end
|
41
|
+
|
42
|
+
def set_default_engine
|
43
|
+
[:cbor].each do |name|
|
44
|
+
@engine ||= try_load_engine(name)
|
45
|
+
end
|
46
|
+
|
47
|
+
unless @engine
|
48
|
+
raise 'Unable to find a compatible cbor library.'
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
def load_engine(name)
|
55
|
+
require "aws-sdk-core/rpc_v2/#{name}_engine"
|
56
|
+
const_name = name[0].upcase + name[1..-1] + 'Engine'
|
57
|
+
const_get(const_name)
|
58
|
+
end
|
59
|
+
|
60
|
+
def try_load_engine(name)
|
61
|
+
load_engine(name)
|
62
|
+
rescue LoadError
|
63
|
+
false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
set_default_engine
|
68
|
+
end
|
69
|
+
end
|
@@ -138,7 +138,11 @@ module Aws
|
|
138
138
|
role_session_name: entry['role_session_name']
|
139
139
|
}
|
140
140
|
cfg[:region] = opts[:region] if opts[:region]
|
141
|
-
|
141
|
+
with_metrics('CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN') do
|
142
|
+
creds = AssumeRoleWebIdentityCredentials.new(cfg)
|
143
|
+
creds.metrics << 'CREDENTIALS_PROFILE_STS_WEB_ID_TOKEN'
|
144
|
+
creds
|
145
|
+
end
|
142
146
|
end
|
143
147
|
end
|
144
148
|
end
|
@@ -169,9 +173,9 @@ module Aws
|
|
169
173
|
|
170
174
|
# Source a custom configured endpoint from the shared configuration file
|
171
175
|
#
|
172
|
-
# @param [Hash]
|
173
|
-
# @option
|
174
|
-
# @option
|
176
|
+
# @param [Hash] opts
|
177
|
+
# @option opts [String] :profile
|
178
|
+
# @option opts [String] :service_id
|
175
179
|
def configured_endpoint(opts = {})
|
176
180
|
# services section is only allowed in the shared config file (not credentials)
|
177
181
|
profile = opts[:profile] || @profile_name
|
@@ -198,6 +202,9 @@ module Aws
|
|
198
202
|
|
199
203
|
config_reader(
|
200
204
|
:region,
|
205
|
+
:account_id_endpoint_mode,
|
206
|
+
:auth_scheme_preference,
|
207
|
+
:sigv4a_signing_region_set,
|
201
208
|
:ca_bundle,
|
202
209
|
:credential_process,
|
203
210
|
:endpoint_discovery_enabled,
|
@@ -205,10 +212,14 @@ module Aws
|
|
205
212
|
:use_fips_endpoint,
|
206
213
|
:ec2_metadata_service_endpoint,
|
207
214
|
:ec2_metadata_service_endpoint_mode,
|
215
|
+
:ec2_metadata_v1_disabled,
|
216
|
+
:disable_host_prefix_injection,
|
208
217
|
:max_attempts,
|
209
218
|
:retry_mode,
|
210
219
|
:adaptive_retry_wait_to_fill,
|
211
220
|
:correct_clock_skew,
|
221
|
+
:request_checksum_calculation,
|
222
|
+
:response_checksum_validation,
|
212
223
|
:csm_client_id,
|
213
224
|
:csm_enabled,
|
214
225
|
:csm_host,
|
@@ -217,6 +228,7 @@ module Aws
|
|
217
228
|
:s3_use_arn_region,
|
218
229
|
:s3_us_east_1_regional_endpoint,
|
219
230
|
:s3_disable_multiregion_access_points,
|
231
|
+
:s3_disable_express_session_auth,
|
220
232
|
:defaults_mode,
|
221
233
|
:sdk_ua_app_id,
|
222
234
|
:disable_request_compression,
|
@@ -249,8 +261,8 @@ module Aws
|
|
249
261
|
'provide only source_profile or credential_source, not both.'
|
250
262
|
elsif opts[:source_profile]
|
251
263
|
opts[:visited_profiles] ||= Set.new
|
252
|
-
|
253
|
-
if opts[:credentials]
|
264
|
+
provider = resolve_source_profile(opts[:source_profile], opts)
|
265
|
+
if provider && (opts[:credentials] = provider.credentials)
|
254
266
|
opts[:role_session_name] ||= prof_cfg['role_session_name']
|
255
267
|
opts[:role_session_name] ||= 'default_session'
|
256
268
|
opts[:role_arn] ||= prof_cfg['role_arn']
|
@@ -259,17 +271,28 @@ module Aws
|
|
259
271
|
opts[:serial_number] ||= prof_cfg['mfa_serial']
|
260
272
|
opts[:profile] = opts.delete(:source_profile)
|
261
273
|
opts.delete(:visited_profiles)
|
262
|
-
|
274
|
+
|
275
|
+
metrics = provider.metrics
|
276
|
+
if provider.is_a?(AssumeRoleCredentials)
|
277
|
+
opts[:credentials] = provider
|
278
|
+
metrics.delete('CREDENTIALS_STS_ASSUME_ROLE')
|
279
|
+
else
|
280
|
+
metrics << 'CREDENTIALS_PROFILE_SOURCE_PROFILE'
|
281
|
+
end
|
282
|
+
# Set the original credentials metrics to [] to prevent duplicate metrics during sign plugin
|
283
|
+
opts[:credentials].metrics = []
|
284
|
+
with_metrics(metrics) do
|
285
|
+
creds = AssumeRoleCredentials.new(opts)
|
286
|
+
creds.metrics.push(*metrics)
|
287
|
+
creds
|
288
|
+
end
|
263
289
|
else
|
264
290
|
raise Errors::NoSourceProfileError,
|
265
291
|
"Profile #{profile} has a role_arn, and source_profile, but the"\
|
266
292
|
' source_profile does not have credentials.'
|
267
293
|
end
|
268
294
|
elsif credential_source
|
269
|
-
opts[:credentials] = credentials_from_source(
|
270
|
-
credential_source,
|
271
|
-
chain_config
|
272
|
-
)
|
295
|
+
opts[:credentials] = credentials_from_source(credential_source, chain_config)
|
273
296
|
if opts[:credentials]
|
274
297
|
opts[:role_session_name] ||= prof_cfg['role_session_name']
|
275
298
|
opts[:role_session_name] ||= 'default_session'
|
@@ -278,7 +301,16 @@ module Aws
|
|
278
301
|
opts[:external_id] ||= prof_cfg['external_id']
|
279
302
|
opts[:serial_number] ||= prof_cfg['mfa_serial']
|
280
303
|
opts.delete(:source_profile) # Cleanup
|
281
|
-
|
304
|
+
|
305
|
+
metrics = opts[:credentials].metrics
|
306
|
+
metrics << 'CREDENTIALS_PROFILE_NAMED_PROVIDER'
|
307
|
+
# Set the original credentials metrics to [] to prevent duplicate metrics during sign plugin
|
308
|
+
opts[:credentials].metrics = []
|
309
|
+
with_metrics(metrics) do
|
310
|
+
creds = AssumeRoleCredentials.new(opts)
|
311
|
+
creds.metrics.push(*metrics)
|
312
|
+
creds
|
313
|
+
end
|
282
314
|
else
|
283
315
|
raise Errors::NoSourceCredentials,
|
284
316
|
"Profile #{profile} could not get source credentials from"\
|
@@ -306,12 +338,24 @@ module Aws
|
|
306
338
|
elsif profile_config && profile_config['source_profile']
|
307
339
|
opts.delete(:source_profile)
|
308
340
|
assume_role_credentials_from_config(opts.merge(profile: profile))
|
309
|
-
elsif (provider =
|
310
|
-
provider
|
341
|
+
elsif (provider = assume_role_web_identity_credentials_from_config_with_metrics(opts.merge(profile: profile)))
|
342
|
+
provider if provider.credentials.set?
|
311
343
|
elsif (provider = assume_role_process_credentials_from_config(profile))
|
312
|
-
provider
|
313
|
-
elsif (provider =
|
314
|
-
provider
|
344
|
+
provider if provider.credentials.set?
|
345
|
+
elsif (provider = sso_credentials_from_config_with_metrics(profile))
|
346
|
+
provider if provider.credentials.set?
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
def assume_role_web_identity_credentials_from_config_with_metrics(opts)
|
351
|
+
with_metrics('CREDENTIALS_PROFILE_SOURCE_PROFILE') do
|
352
|
+
assume_role_web_identity_credentials_from_config(opts)
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
def sso_credentials_from_config_with_metrics(profile)
|
357
|
+
with_metrics('CREDENTIALS_PROFILE_SOURCE_PROFILE') do
|
358
|
+
sso_credentials_from_config(profile: profile)
|
315
359
|
end
|
316
360
|
end
|
317
361
|
|
@@ -325,6 +369,15 @@ module Aws
|
|
325
369
|
)
|
326
370
|
when 'EcsContainer'
|
327
371
|
ECSCredentials.new
|
372
|
+
when 'Environment'
|
373
|
+
creds = Credentials.new(
|
374
|
+
ENV['AWS_ACCESS_KEY_ID'],
|
375
|
+
ENV['AWS_SECRET_ACCESS_KEY'],
|
376
|
+
ENV['AWS_SESSION_TOKEN'],
|
377
|
+
account_id: ENV['AWS_ACCOUNT_ID']
|
378
|
+
)
|
379
|
+
creds.metrics = ['CREDENTIALS_ENV_VARS']
|
380
|
+
creds
|
328
381
|
else
|
329
382
|
raise Errors::InvalidCredentialSourceError, "Unsupported credential_source: #{credential_source}"
|
330
383
|
end
|
@@ -336,7 +389,11 @@ module Aws
|
|
336
389
|
if @parsed_config
|
337
390
|
credential_process ||= @parsed_config.fetch(profile, {})['credential_process']
|
338
391
|
end
|
339
|
-
|
392
|
+
if credential_process
|
393
|
+
creds = ProcessCredentials.new([credential_process])
|
394
|
+
creds.metrics << 'CREDENTIALS_PROFILE_PROCESS'
|
395
|
+
creds
|
396
|
+
end
|
340
397
|
end
|
341
398
|
|
342
399
|
def credentials_from_shared(profile, _opts)
|
@@ -359,12 +416,8 @@ module Aws
|
|
359
416
|
!(prof_config.keys & SSO_CREDENTIAL_PROFILE_KEYS).empty?
|
360
417
|
|
361
418
|
if sso_session_name = prof_config['sso_session']
|
362
|
-
sso_session = cfg
|
363
|
-
|
364
|
-
raise ArgumentError,
|
365
|
-
"sso-session #{sso_session_name} must be defined in the config file. " \
|
366
|
-
"Referenced by profile #{profile}"
|
367
|
-
end
|
419
|
+
sso_session = sso_session(cfg, profile, sso_session_name)
|
420
|
+
|
368
421
|
sso_region = sso_session['sso_region']
|
369
422
|
sso_start_url = sso_session['sso_start_url']
|
370
423
|
|
@@ -384,13 +437,18 @@ module Aws
|
|
384
437
|
sso_start_url = prof_config['sso_start_url']
|
385
438
|
end
|
386
439
|
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
440
|
+
metric = prof_config['sso_session'] ? 'CREDENTIALS_PROFILE_SSO' : 'CREDENTIALS_PROFILE_SSO_LEGACY'
|
441
|
+
with_metrics(metric) do
|
442
|
+
creds = SSOCredentials.new(
|
443
|
+
sso_account_id: prof_config['sso_account_id'],
|
444
|
+
sso_role_name: prof_config['sso_role_name'],
|
445
|
+
sso_session: prof_config['sso_session'],
|
446
|
+
sso_region: sso_region,
|
447
|
+
sso_start_url: sso_start_url
|
393
448
|
)
|
449
|
+
creds.metrics << metric
|
450
|
+
creds
|
451
|
+
end
|
394
452
|
end
|
395
453
|
end
|
396
454
|
|
@@ -402,16 +460,7 @@ module Aws
|
|
402
460
|
!(prof_config.keys & SSO_TOKEN_PROFILE_KEYS).empty?
|
403
461
|
|
404
462
|
sso_session_name = prof_config['sso_session']
|
405
|
-
sso_session = cfg
|
406
|
-
unless sso_session
|
407
|
-
raise ArgumentError,
|
408
|
-
"sso-session #{sso_session_name} must be defined in the config file." \
|
409
|
-
"Referenced by profile #{profile}"
|
410
|
-
end
|
411
|
-
|
412
|
-
unless sso_session['sso_region']
|
413
|
-
raise ArgumentError, "sso-session #{sso_session_name} missing required parameter: sso_region"
|
414
|
-
end
|
463
|
+
sso_session = sso_session(cfg, profile, sso_session_name)
|
415
464
|
|
416
465
|
SSOTokenProvider.new(
|
417
466
|
sso_session: sso_session_name,
|
@@ -424,8 +473,10 @@ module Aws
|
|
424
473
|
creds = Credentials.new(
|
425
474
|
prof_config['aws_access_key_id'],
|
426
475
|
prof_config['aws_secret_access_key'],
|
427
|
-
prof_config['aws_session_token']
|
476
|
+
prof_config['aws_session_token'],
|
477
|
+
account_id: prof_config['aws_account_id']
|
428
478
|
)
|
479
|
+
creds.metrics = ['CREDENTIALS_PROFILE']
|
429
480
|
creds if creds.set?
|
430
481
|
end
|
431
482
|
|
@@ -469,5 +520,26 @@ module Aws
|
|
469
520
|
ret ||= 'default'
|
470
521
|
ret
|
471
522
|
end
|
523
|
+
|
524
|
+
def sso_session(cfg, profile, sso_session_name)
|
525
|
+
# aws sso-configure may add quotes around sso session names with whitespace
|
526
|
+
sso_session = cfg["sso-session #{sso_session_name}"] || cfg["sso-session '#{sso_session_name}'"]
|
527
|
+
|
528
|
+
unless sso_session
|
529
|
+
raise ArgumentError,
|
530
|
+
"sso-session #{sso_session_name} must be defined in the config file. " \
|
531
|
+
"Referenced by profile #{profile}"
|
532
|
+
end
|
533
|
+
|
534
|
+
unless sso_session['sso_region']
|
535
|
+
raise ArgumentError, "sso-session #{sso_session_name} missing required parameter: sso_region"
|
536
|
+
end
|
537
|
+
|
538
|
+
sso_session
|
539
|
+
end
|
540
|
+
|
541
|
+
def with_metrics(metrics, &block)
|
542
|
+
Aws::Plugins::UserAgent.metric(*metrics, &block)
|
543
|
+
end
|
472
544
|
end
|
473
545
|
end
|
@@ -7,13 +7,6 @@ module Aws
|
|
7
7
|
|
8
8
|
include CredentialProvider
|
9
9
|
|
10
|
-
# @api private
|
11
|
-
KEY_MAP = {
|
12
|
-
'aws_access_key_id' => 'access_key_id',
|
13
|
-
'aws_secret_access_key' => 'secret_access_key',
|
14
|
-
'aws_session_token' => 'session_token',
|
15
|
-
}
|
16
|
-
|
17
10
|
# Constructs a new SharedCredentials object. This will load static
|
18
11
|
# (access_key_id, secret_access_key and session_token) AWS access
|
19
12
|
# credentials from an ini file, which supports profiles. The default
|
@@ -47,6 +40,7 @@ module Aws
|
|
47
40
|
)
|
48
41
|
@credentials = config.credentials(profile: @profile_name)
|
49
42
|
end
|
43
|
+
@metrics = ['CREDENTIALS_CODE']
|
50
44
|
end
|
51
45
|
|
52
46
|
# @return [String]
|
@@ -91,6 +91,7 @@ module Aws
|
|
91
91
|
client_opts[:credentials] = nil
|
92
92
|
@client = Aws::SSO::Client.new(client_opts)
|
93
93
|
end
|
94
|
+
@metrics = ['CREDENTIALS_SSO']
|
94
95
|
else # legacy behavior
|
95
96
|
missing_keys = LEGACY_REQUIRED_OPTS.select { |k| options[k].nil? }
|
96
97
|
unless missing_keys.empty?
|
@@ -111,6 +112,7 @@ module Aws
|
|
111
112
|
client_opts[:credentials] = nil
|
112
113
|
|
113
114
|
@client = options[:client] || Aws::SSO::Client.new(client_opts)
|
115
|
+
@metrics = ['CREDENTIALS_SSO_LEGACY']
|
114
116
|
end
|
115
117
|
|
116
118
|
@async_refresh = true
|
@@ -156,7 +158,8 @@ module Aws
|
|
156
158
|
@credentials = Credentials.new(
|
157
159
|
c.access_key_id,
|
158
160
|
c.secret_access_key,
|
159
|
-
c.session_token
|
161
|
+
c.session_token,
|
162
|
+
account_id: @sso_account_id
|
160
163
|
)
|
161
164
|
@expiration = Time.at(c.expiration / 1000.0)
|
162
165
|
end
|
@@ -2,12 +2,11 @@
|
|
2
2
|
|
3
3
|
module Aws
|
4
4
|
class StaticTokenProvider
|
5
|
-
|
6
5
|
include TokenProvider
|
7
6
|
|
8
7
|
# @param [String] token
|
9
8
|
# @param [Time] expiration
|
10
|
-
def initialize(token, expiration=nil)
|
9
|
+
def initialize(token, expiration = nil)
|
11
10
|
@token = Token.new(token, expiration)
|
12
11
|
end
|
13
12
|
end
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module Aws
|
4
4
|
module Stubbing
|
5
5
|
module Protocols
|
6
|
+
# @api private
|
6
7
|
class EC2
|
7
8
|
|
8
9
|
def stub_data(api, operation, data)
|
@@ -16,17 +17,17 @@ module Aws
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def stub_error(error_code)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
<ErrorResponse>
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
</ErrorResponse>
|
20
|
+
resp = Seahorse::Client::Http::Response.new
|
21
|
+
resp.status_code = 400
|
22
|
+
resp.body = <<~XML.strip
|
23
|
+
<ErrorResponse>
|
24
|
+
<Error>
|
25
|
+
<Code>#{error_code}</Code>
|
26
|
+
<Message>stubbed-response-error-message</Message>
|
27
|
+
</Error>
|
28
|
+
</ErrorResponse>
|
28
29
|
XML
|
29
|
-
|
30
|
+
resp
|
30
31
|
end
|
31
32
|
|
32
33
|
private
|
@@ -37,7 +38,7 @@ module Aws
|
|
37
38
|
xml.shift
|
38
39
|
xml.pop
|
39
40
|
xmlns = "http://ec2.amazonaws.com/doc/#{api.version}/".inspect
|
40
|
-
xml.unshift(
|
41
|
+
xml.unshift(' <requestId>stubbed-request-id</requestId>')
|
41
42
|
xml.unshift("<#{operation.name}Response xmlns=#{xmlns}>\n")
|
42
43
|
xml.push("</#{operation.name}Response>\n")
|
43
44
|
xml.join
|
@@ -3,27 +3,28 @@
|
|
3
3
|
module Aws
|
4
4
|
module Stubbing
|
5
5
|
module Protocols
|
6
|
+
# @api private
|
6
7
|
class Json
|
7
8
|
|
8
9
|
def stub_data(api, operation, data)
|
9
10
|
resp = Seahorse::Client::Http::Response.new
|
10
11
|
resp.status_code = 200
|
11
|
-
resp.headers[
|
12
|
-
resp.headers[
|
12
|
+
resp.headers['Content-Type'] = content_type(api)
|
13
|
+
resp.headers['x-amzn-RequestId'] = 'stubbed-request-id'
|
13
14
|
resp.body = build_body(operation, data)
|
14
15
|
resp
|
15
16
|
end
|
16
17
|
|
17
18
|
def stub_error(error_code)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
{
|
22
|
-
|
23
|
-
|
24
|
-
}
|
19
|
+
resp = Seahorse::Client::Http::Response.new
|
20
|
+
resp.status_code = 400
|
21
|
+
resp.body = <<~JSON.strip
|
22
|
+
{
|
23
|
+
"code": #{error_code.inspect},
|
24
|
+
"message": "stubbed-response-error-message"
|
25
|
+
}
|
25
26
|
JSON
|
26
|
-
|
27
|
+
resp
|
27
28
|
end
|
28
29
|
|
29
30
|
private
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module Aws
|
4
4
|
module Stubbing
|
5
5
|
module Protocols
|
6
|
+
# @api private
|
6
7
|
class Query
|
7
8
|
|
8
9
|
def stub_data(api, operation, data)
|
@@ -13,10 +14,10 @@ module Aws
|
|
13
14
|
end
|
14
15
|
|
15
16
|
def stub_error(error_code)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
17
|
+
resp = Seahorse::Client::Http::Response.new
|
18
|
+
resp.status_code = 400
|
19
|
+
resp.body = XmlError.new(error_code).to_xml
|
20
|
+
resp
|
20
21
|
end
|
21
22
|
|
22
23
|
private
|
@@ -24,9 +25,9 @@ module Aws
|
|
24
25
|
def build_body(api, operation, data)
|
25
26
|
xml = []
|
26
27
|
builder = Aws::Xml::DocBuilder.new(target: xml, indent: ' ')
|
27
|
-
builder.node(operation.name
|
28
|
+
builder.node("#{operation.name}Response", xmlns: xmlns(api)) do
|
28
29
|
if (rules = operation.output)
|
29
|
-
rules.location_name = operation.name
|
30
|
+
rules.location_name = "#{operation.name}Result"
|
30
31
|
Xml::Builder.new(rules, target: xml, pad:' ').to_xml(data)
|
31
32
|
end
|
32
33
|
builder.node('ResponseMetadata') do
|
@@ -5,6 +5,7 @@ require 'aws-eventstream'
|
|
5
5
|
module Aws
|
6
6
|
module Stubbing
|
7
7
|
module Protocols
|
8
|
+
# @api private
|
8
9
|
class Rest
|
9
10
|
|
10
11
|
include Seahorse::Model::Shapes
|
@@ -22,7 +23,7 @@ module Aws
|
|
22
23
|
def new_http_response
|
23
24
|
resp = Seahorse::Client::Http::Response.new
|
24
25
|
resp.status_code = 200
|
25
|
-
resp.headers[
|
26
|
+
resp.headers['x-amzn-RequestId'] = 'stubbed-request-id'
|
26
27
|
resp
|
27
28
|
end
|
28
29
|
|
@@ -3,6 +3,7 @@
|
|
3
3
|
module Aws
|
4
4
|
module Stubbing
|
5
5
|
module Protocols
|
6
|
+
# @api private
|
6
7
|
class RestJson < Rest
|
7
8
|
|
8
9
|
def body_for(_a, _b, rules, data)
|
@@ -14,15 +15,15 @@ module Aws
|
|
14
15
|
end
|
15
16
|
|
16
17
|
def stub_error(error_code)
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
{
|
21
|
-
|
22
|
-
|
23
|
-
}
|
18
|
+
resp = Seahorse::Client::Http::Response.new
|
19
|
+
resp.status_code = 400
|
20
|
+
resp.body = <<~JSON.strip
|
21
|
+
{
|
22
|
+
"code": #{error_code.inspect},
|
23
|
+
"message": "stubbed-response-error-message"
|
24
|
+
}
|
24
25
|
JSON
|
25
|
-
|
26
|
+
resp
|
26
27
|
end
|
27
28
|
|
28
29
|
end
|