aws-sdk-core 3.186.0 → 3.240.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 +695 -0
- data/VERSION +1 -1
- 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 +21 -13
- data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +16 -9
- 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 +39 -55
- data/lib/aws-sdk-core/credential_provider.rb +5 -1
- data/lib/aws-sdk-core/credential_provider_chain.rb +101 -25
- 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 +92 -24
- data/lib/aws-sdk-core/endpoints/endpoint.rb +3 -1
- data/lib/aws-sdk-core/endpoints/matchers.rb +8 -10
- 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 +16 -4
- data/lib/aws-sdk-core/event_emitter.rb +1 -17
- data/lib/aws-sdk-core/instance_profile_credentials.rb +148 -157
- 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 +32 -2
- 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/login_credentials.rb +229 -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 +7 -2
- data/lib/aws-sdk-core/plugins/bearer_authorization.rb +2 -0
- data/lib/aws-sdk-core/plugins/checksum_algorithm.rb +347 -168
- 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 +103 -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 +20 -17
- 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 +23 -11
- 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 +109 -22
- data/lib/aws-sdk-core/shared_credentials.rb +1 -7
- data/lib/aws-sdk-core/sso_credentials.rb +5 -2
- 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.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 +86 -107
- data/lib/aws-sdk-signin/client.rb +604 -0
- data/lib/aws-sdk-signin/client_api.rb +119 -0
- data/lib/aws-sdk-signin/customizations.rb +1 -0
- data/lib/aws-sdk-signin/endpoint_parameters.rb +69 -0
- data/lib/aws-sdk-signin/endpoint_provider.rb +59 -0
- data/lib/aws-sdk-signin/endpoints.rb +20 -0
- data/lib/aws-sdk-signin/errors.rb +122 -0
- data/lib/aws-sdk-signin/plugins/endpoints.rb +77 -0
- data/lib/aws-sdk-signin/resource.rb +26 -0
- data/lib/aws-sdk-signin/types.rb +299 -0
- data/lib/aws-sdk-signin.rb +63 -0
- 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 +13 -10
- data/lib/aws-sdk-sso/endpoint_provider.rb +16 -20
- 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 +13 -10
- data/lib/aws-sdk-ssooidc/endpoint_provider.rb +16 -20
- 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 +537 -156
- data/lib/aws-sdk-sts/client_api.rb +108 -8
- data/lib/aws-sdk-sts/customizations.rb +5 -2
- data/lib/aws-sdk-sts/endpoint_parameters.rb +15 -14
- 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 +79 -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 +361 -35
- 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 +19 -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/request_context.rb +9 -2
- data/lib/seahorse/client/response.rb +2 -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 +117 -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
|
@@ -11,7 +11,7 @@ module Aws
|
|
|
11
11
|
def resolve
|
|
12
12
|
providers.each do |method_name, options|
|
|
13
13
|
provider = send(method_name, options.merge(config: @config))
|
|
14
|
-
return provider if provider
|
|
14
|
+
return provider if provider&.set?
|
|
15
15
|
end
|
|
16
16
|
nil
|
|
17
17
|
end
|
|
@@ -25,12 +25,14 @@ module Aws
|
|
|
25
25
|
[:static_profile_sso_credentials, {}],
|
|
26
26
|
[:static_profile_assume_role_credentials, {}],
|
|
27
27
|
[:static_profile_credentials, {}],
|
|
28
|
+
[:static_profile_login_credentials, {}],
|
|
28
29
|
[:static_profile_process_credentials, {}],
|
|
29
30
|
[:env_credentials, {}],
|
|
30
31
|
[:assume_role_web_identity_credentials, {}],
|
|
31
32
|
[:sso_credentials, {}],
|
|
32
33
|
[:assume_role_credentials, {}],
|
|
33
34
|
[:shared_credentials, {}],
|
|
35
|
+
[:login_credentials, {}],
|
|
34
36
|
[:process_credentials, {}],
|
|
35
37
|
[:instance_profile_credentials, {
|
|
36
38
|
retries: @config ? @config.instance_profile_credentials_retries : 0,
|
|
@@ -42,50 +44,92 @@ module Aws
|
|
|
42
44
|
|
|
43
45
|
def static_credentials(options)
|
|
44
46
|
if options[:config]
|
|
45
|
-
Credentials.new(
|
|
47
|
+
creds = Credentials.new(
|
|
46
48
|
options[:config].access_key_id,
|
|
47
49
|
options[:config].secret_access_key,
|
|
48
|
-
options[:config].session_token
|
|
50
|
+
options[:config].session_token,
|
|
51
|
+
account_id: options[:config].account_id
|
|
49
52
|
)
|
|
53
|
+
creds.metrics = ['CREDENTIALS_PROFILE']
|
|
54
|
+
creds
|
|
50
55
|
end
|
|
51
56
|
end
|
|
52
57
|
|
|
53
58
|
def static_profile_assume_role_web_identity_credentials(options)
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
return unless Aws.shared_config.config_enabled? && options[:config]&.profile
|
|
60
|
+
|
|
61
|
+
with_metrics('CREDENTIALS_CODE') do
|
|
62
|
+
creds = Aws.shared_config.assume_role_web_identity_credentials_from_config(
|
|
56
63
|
profile: options[:config].profile,
|
|
57
64
|
region: options[:config].region
|
|
58
65
|
)
|
|
66
|
+
return unless creds
|
|
67
|
+
|
|
68
|
+
creds.metrics << 'CREDENTIALS_CODE'
|
|
69
|
+
creds
|
|
59
70
|
end
|
|
60
71
|
end
|
|
61
72
|
|
|
62
73
|
def static_profile_sso_credentials(options)
|
|
63
|
-
|
|
64
|
-
|
|
74
|
+
return unless Aws.shared_config.config_enabled? && options[:config]&.profile
|
|
75
|
+
|
|
76
|
+
with_metrics('CREDENTIALS_CODE') do
|
|
77
|
+
creds = Aws.shared_config.sso_credentials_from_config(
|
|
65
78
|
profile: options[:config].profile
|
|
66
79
|
)
|
|
80
|
+
return unless creds
|
|
81
|
+
|
|
82
|
+
creds.metrics << 'CREDENTIALS_CODE'
|
|
83
|
+
creds
|
|
67
84
|
end
|
|
68
85
|
end
|
|
69
86
|
|
|
70
87
|
def static_profile_assume_role_credentials(options)
|
|
71
|
-
|
|
72
|
-
|
|
88
|
+
return unless Aws.shared_config.config_enabled? && options[:config]&.profile
|
|
89
|
+
|
|
90
|
+
with_metrics('CREDENTIALS_CODE') do
|
|
91
|
+
creds = assume_role_with_profile(options, options[:config].profile)
|
|
92
|
+
return unless creds
|
|
93
|
+
|
|
94
|
+
creds.metrics << 'CREDENTIALS_CODE'
|
|
95
|
+
creds
|
|
73
96
|
end
|
|
74
97
|
end
|
|
75
98
|
|
|
76
99
|
def static_profile_credentials(options)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
100
|
+
return unless options[:config]&.profile
|
|
101
|
+
|
|
102
|
+
creds = SharedCredentials.new(profile_name: options[:config].profile)
|
|
103
|
+
creds.metrics << 'CREDENTIALS_PROFILE'
|
|
104
|
+
creds
|
|
80
105
|
rescue Errors::NoSuchProfileError
|
|
81
106
|
nil
|
|
82
107
|
end
|
|
83
108
|
|
|
84
|
-
def
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
109
|
+
def static_profile_login_credentials(options)
|
|
110
|
+
return unless Aws.shared_config.config_enabled? && options[:config]&.profile
|
|
111
|
+
|
|
112
|
+
with_metrics('CREDENTIALS_CODE') do
|
|
113
|
+
creds = Aws.shared_config.login_credentials_from_config(
|
|
114
|
+
profile: options[:config].profile,
|
|
115
|
+
region: options[:config].region
|
|
116
|
+
)
|
|
117
|
+
return unless creds
|
|
118
|
+
|
|
119
|
+
creds.metrics << 'CREDENTIALS_CODE'
|
|
120
|
+
creds
|
|
88
121
|
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def static_profile_process_credentials(options)
|
|
125
|
+
return unless Aws.shared_config.config_enabled? && options[:config]&.profile
|
|
126
|
+
|
|
127
|
+
process_provider = Aws.shared_config.credential_process(profile: options[:config].profile)
|
|
128
|
+
return unless process_provider
|
|
129
|
+
|
|
130
|
+
creds = ProcessCredentials.new([process_provider])
|
|
131
|
+
creds.metrics.concat(%w[CREDENTIALS_PROFILE_PROCESS CREDENTIALS_CODE])
|
|
132
|
+
creds
|
|
89
133
|
rescue Errors::NoSuchProfileError
|
|
90
134
|
nil
|
|
91
135
|
end
|
|
@@ -94,7 +138,15 @@ module Aws
|
|
|
94
138
|
key = %w[AWS_ACCESS_KEY_ID AMAZON_ACCESS_KEY_ID AWS_ACCESS_KEY]
|
|
95
139
|
secret = %w[AWS_SECRET_ACCESS_KEY AMAZON_SECRET_ACCESS_KEY AWS_SECRET_KEY]
|
|
96
140
|
token = %w[AWS_SESSION_TOKEN AMAZON_SESSION_TOKEN]
|
|
97
|
-
|
|
141
|
+
account_id = %w[AWS_ACCOUNT_ID]
|
|
142
|
+
creds = Credentials.new(
|
|
143
|
+
envar(key),
|
|
144
|
+
envar(secret),
|
|
145
|
+
envar(token),
|
|
146
|
+
account_id: envar(account_id)
|
|
147
|
+
)
|
|
148
|
+
creds.metrics = ['CREDENTIALS_ENV_VARS']
|
|
149
|
+
creds
|
|
98
150
|
end
|
|
99
151
|
|
|
100
152
|
def envar(keys)
|
|
@@ -105,21 +157,37 @@ module Aws
|
|
|
105
157
|
end
|
|
106
158
|
|
|
107
159
|
def determine_profile_name(options)
|
|
108
|
-
(options[:config]
|
|
160
|
+
(options[:config]&.profile) || ENV['AWS_PROFILE'] || ENV['AWS_DEFAULT_PROFILE'] || 'default'
|
|
109
161
|
end
|
|
110
162
|
|
|
111
163
|
def shared_credentials(options)
|
|
112
164
|
profile_name = determine_profile_name(options)
|
|
113
|
-
SharedCredentials.new(profile_name: profile_name)
|
|
165
|
+
creds = SharedCredentials.new(profile_name: profile_name)
|
|
166
|
+
creds.metrics = ['CREDENTIALS_PROFILE']
|
|
167
|
+
creds
|
|
168
|
+
rescue Errors::NoSuchProfileError
|
|
169
|
+
nil
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def login_credentials(options)
|
|
173
|
+
return unless Aws.shared_config.config_enabled?
|
|
174
|
+
|
|
175
|
+
profile_name = determine_profile_name(options)
|
|
176
|
+
region = options[:config].region if options[:config]
|
|
177
|
+
Aws.shared_config.login_credentials_from_config(profile: profile_name, region: region)
|
|
114
178
|
rescue Errors::NoSuchProfileError
|
|
115
179
|
nil
|
|
116
180
|
end
|
|
117
181
|
|
|
118
182
|
def process_credentials(options)
|
|
119
183
|
profile_name = determine_profile_name(options)
|
|
120
|
-
if Aws.shared_config.config_enabled?
|
|
121
|
-
|
|
122
|
-
|
|
184
|
+
if Aws.shared_config.config_enabled?
|
|
185
|
+
process_provider = Aws.shared_config.credential_process(profile: profile_name)
|
|
186
|
+
if process_provider
|
|
187
|
+
creds = ProcessCredentials.new([process_provider])
|
|
188
|
+
creds.metrics << 'CREDENTIALS_PROFILE_PROCESS'
|
|
189
|
+
creds
|
|
190
|
+
end
|
|
123
191
|
end
|
|
124
192
|
rescue Errors::NoSuchProfileError
|
|
125
193
|
nil
|
|
@@ -149,7 +217,11 @@ module Aws
|
|
|
149
217
|
role_session_name: ENV['AWS_ROLE_SESSION_NAME']
|
|
150
218
|
}
|
|
151
219
|
cfg[:region] = region if region
|
|
152
|
-
|
|
220
|
+
Aws::Plugins::UserAgent.metric('CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN') do
|
|
221
|
+
creds = AssumeRoleWebIdentityCredentials.new(cfg)
|
|
222
|
+
creds.metrics << 'CREDENTIALS_ENV_VARS_STS_WEB_ID_TOKEN'
|
|
223
|
+
creds
|
|
224
|
+
end
|
|
153
225
|
elsif Aws.shared_config.config_enabled?
|
|
154
226
|
profile = options[:config].profile if options[:config]
|
|
155
227
|
Aws.shared_config.assume_role_web_identity_credentials_from_config(
|
|
@@ -164,7 +236,7 @@ module Aws
|
|
|
164
236
|
if ENV['AWS_CONTAINER_CREDENTIALS_RELATIVE_URI'] ||
|
|
165
237
|
ENV['AWS_CONTAINER_CREDENTIALS_FULL_URI']
|
|
166
238
|
ECSCredentials.new(options)
|
|
167
|
-
|
|
239
|
+
elsif !(ENV.fetch('AWS_EC2_METADATA_DISABLED', 'false').downcase == 'true')
|
|
168
240
|
InstanceProfileCredentials.new(options.merge(profile: profile_name))
|
|
169
241
|
end
|
|
170
242
|
end
|
|
@@ -174,10 +246,14 @@ module Aws
|
|
|
174
246
|
profile: profile_name,
|
|
175
247
|
chain_config: @config
|
|
176
248
|
}
|
|
177
|
-
if options[:config]
|
|
249
|
+
if options[:config]&.region
|
|
178
250
|
assume_opts[:region] = options[:config].region
|
|
179
251
|
end
|
|
180
252
|
Aws.shared_config.assume_role_credentials_from_config(assume_opts)
|
|
181
253
|
end
|
|
254
|
+
|
|
255
|
+
def with_metrics(metrics, &block)
|
|
256
|
+
Aws::Plugins::UserAgent.metric(*metrics, &block)
|
|
257
|
+
end
|
|
182
258
|
end
|
|
183
259
|
end
|
|
@@ -6,21 +6,34 @@ module Aws
|
|
|
6
6
|
# @param [String] access_key_id
|
|
7
7
|
# @param [String] secret_access_key
|
|
8
8
|
# @param [String] session_token (nil)
|
|
9
|
-
|
|
9
|
+
# @param [Hash] kwargs
|
|
10
|
+
# @option kwargs [String] :credential_scope (nil)
|
|
11
|
+
def initialize(access_key_id, secret_access_key, session_token = nil,
|
|
12
|
+
**kwargs)
|
|
10
13
|
@access_key_id = access_key_id
|
|
11
14
|
@secret_access_key = secret_access_key
|
|
12
15
|
@session_token = session_token
|
|
16
|
+
@account_id = kwargs[:account_id]
|
|
17
|
+
@metrics = ['CREDENTIALS_CODE']
|
|
13
18
|
end
|
|
14
19
|
|
|
15
|
-
# @return [String
|
|
20
|
+
# @return [String]
|
|
16
21
|
attr_reader :access_key_id
|
|
17
22
|
|
|
18
|
-
# @return [String
|
|
23
|
+
# @return [String]
|
|
19
24
|
attr_reader :secret_access_key
|
|
20
25
|
|
|
21
26
|
# @return [String, nil]
|
|
22
27
|
attr_reader :session_token
|
|
23
28
|
|
|
29
|
+
# @return [String, nil]
|
|
30
|
+
attr_reader :account_id
|
|
31
|
+
|
|
32
|
+
# @api private
|
|
33
|
+
# Returns the credentials source. Used for tracking credentials
|
|
34
|
+
# related UserAgent metrics.
|
|
35
|
+
attr_accessor :metrics
|
|
36
|
+
|
|
24
37
|
# @return [Credentials]
|
|
25
38
|
def credentials
|
|
26
39
|
self
|
|
@@ -30,9 +43,9 @@ module Aws
|
|
|
30
43
|
# access key are both set.
|
|
31
44
|
def set?
|
|
32
45
|
!access_key_id.nil? &&
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
46
|
+
!access_key_id.empty? &&
|
|
47
|
+
!secret_access_key.nil? &&
|
|
48
|
+
!secret_access_key.empty?
|
|
36
49
|
end
|
|
37
50
|
|
|
38
51
|
# Removing the secret access key from the default inspect string.
|
|
@@ -183,7 +183,7 @@ module Aws
|
|
|
183
183
|
|
|
184
184
|
def open_connection
|
|
185
185
|
uri = URI.parse(@endpoint)
|
|
186
|
-
http = Net::HTTP.new(uri.hostname || @endpoint,
|
|
186
|
+
http = Net::HTTP.new(uri.hostname || @endpoint, uri.port || @port)
|
|
187
187
|
http.open_timeout = @http_open_timeout
|
|
188
188
|
http.read_timeout = @http_read_timeout
|
|
189
189
|
http.set_debug_output(@http_debug_output) if @http_debug_output
|
|
@@ -6,7 +6,7 @@ require 'resolv'
|
|
|
6
6
|
|
|
7
7
|
module Aws
|
|
8
8
|
# An auto-refreshing credential provider that loads credentials from
|
|
9
|
-
# instances running in
|
|
9
|
+
# instances running in containers.
|
|
10
10
|
#
|
|
11
11
|
# ecs_credentials = Aws::ECSCredentials.new(retries: 3)
|
|
12
12
|
# ec2 = Aws::EC2::Client.new(credentials: ecs_credentials)
|
|
@@ -17,6 +17,12 @@ module Aws
|
|
|
17
17
|
# @api private
|
|
18
18
|
class Non200Response < RuntimeError; end
|
|
19
19
|
|
|
20
|
+
# Raised when the token file cannot be read.
|
|
21
|
+
class TokenFileReadError < RuntimeError; end
|
|
22
|
+
|
|
23
|
+
# Raised when the token file is invalid.
|
|
24
|
+
class InvalidTokenError < RuntimeError; end
|
|
25
|
+
|
|
20
26
|
# These are the errors we trap when attempting to talk to the
|
|
21
27
|
# instance metadata service. Any of these imply the service
|
|
22
28
|
# is not present, no responding or some other non-recoverable
|
|
@@ -36,26 +42,26 @@ module Aws
|
|
|
36
42
|
# @option options [Integer] :retries (5) Number of times to retry
|
|
37
43
|
# when retrieving credentials.
|
|
38
44
|
# @option options [String] :ip_address ('169.254.170.2') This value is
|
|
39
|
-
# ignored if
|
|
40
|
-
# @option options [Integer] :port (80) This value is ignored if
|
|
41
|
-
# is set and
|
|
45
|
+
# ignored if `:endpoint` is set and `:credential_path` is not set.
|
|
46
|
+
# @option options [Integer] :port (80) This value is ignored if `:endpoint`
|
|
47
|
+
# is set and `:credential_path` is not set.
|
|
42
48
|
# @option options [String] :credential_path By default, the value of the
|
|
43
|
-
# AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variable.
|
|
44
|
-
# @option options [String] :endpoint The
|
|
45
|
-
# By default, this is the value of the AWS_CONTAINER_CREDENTIALS_FULL_URI
|
|
46
|
-
# environment variable. This value is ignored if
|
|
47
|
-
# ENV['AWS_CONTAINER_CREDENTIALS_RELATIVE_URI'] is set.
|
|
49
|
+
# `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI` environment variable.
|
|
50
|
+
# @option options [String] :endpoint The container credential endpoint.
|
|
51
|
+
# By default, this is the value of the `AWS_CONTAINER_CREDENTIALS_FULL_URI`
|
|
52
|
+
# environment variable. This value is ignored if `:credential_path` or
|
|
53
|
+
# `ENV['AWS_CONTAINER_CREDENTIALS_RELATIVE_URI']` is set.
|
|
48
54
|
# @option options [Float] :http_open_timeout (5)
|
|
49
55
|
# @option options [Float] :http_read_timeout (5)
|
|
50
|
-
# @option options [
|
|
56
|
+
# @option options [IO] :http_debug_output (nil) HTTP wire
|
|
57
|
+
# traces are sent to this object. You can specify something
|
|
58
|
+
# like `$stdout`.
|
|
59
|
+
# @option options [Numeric, Proc] :backoff By default, failures are retried
|
|
51
60
|
# with exponential back-off, i.e. `sleep(1.2 ** num_failures)`. You can
|
|
52
61
|
# pass a number of seconds to sleep between failed attempts, or
|
|
53
62
|
# a Proc that accepts the number of failures.
|
|
54
|
-
# @option options [
|
|
55
|
-
#
|
|
56
|
-
# like $stdout.
|
|
57
|
-
# @option options [Callable] before_refresh Proc called before
|
|
58
|
-
# credentials are refreshed. `before_refresh` is called
|
|
63
|
+
# @option options [Proc] :before_refresh A Proc called before
|
|
64
|
+
# credentials are refreshed. `:before_refresh` is called
|
|
59
65
|
# with an instance of this object when
|
|
60
66
|
# AWS credentials are required and need to be refreshed.
|
|
61
67
|
def initialize(options = {})
|
|
@@ -64,7 +70,6 @@ module Aws
|
|
|
64
70
|
endpoint = options[:endpoint] ||
|
|
65
71
|
ENV['AWS_CONTAINER_CREDENTIALS_FULL_URI']
|
|
66
72
|
initialize_uri(options, credential_path, endpoint)
|
|
67
|
-
@authorization_token = ENV['AWS_CONTAINER_AUTHORIZATION_TOKEN']
|
|
68
73
|
|
|
69
74
|
@retries = options[:retries] || 5
|
|
70
75
|
@http_open_timeout = options[:http_open_timeout] || 5
|
|
@@ -72,6 +77,7 @@ module Aws
|
|
|
72
77
|
@http_debug_output = options[:http_debug_output]
|
|
73
78
|
@backoff = backoff(options[:backoff])
|
|
74
79
|
@async_refresh = false
|
|
80
|
+
@metrics = ['CREDENTIALS_HTTP']
|
|
75
81
|
super
|
|
76
82
|
end
|
|
77
83
|
|
|
@@ -103,11 +109,18 @@ module Aws
|
|
|
103
109
|
|
|
104
110
|
def initialize_full_uri(endpoint)
|
|
105
111
|
uri = URI.parse(endpoint)
|
|
112
|
+
validate_full_uri_scheme!(uri)
|
|
106
113
|
validate_full_uri!(uri)
|
|
107
|
-
@host = uri.
|
|
114
|
+
@host = uri.hostname
|
|
108
115
|
@port = uri.port
|
|
109
116
|
@scheme = uri.scheme
|
|
110
|
-
@credential_path = uri.
|
|
117
|
+
@credential_path = uri.request_uri
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def validate_full_uri_scheme!(full_uri)
|
|
121
|
+
return if full_uri.is_a?(URI::HTTP) || full_uri.is_a?(URI::HTTPS)
|
|
122
|
+
|
|
123
|
+
raise ArgumentError, "'#{full_uri}' must be a valid HTTP or HTTPS URI"
|
|
111
124
|
end
|
|
112
125
|
|
|
113
126
|
# Validate that the full URI is using a loopback address if scheme is http.
|
|
@@ -115,19 +128,24 @@ module Aws
|
|
|
115
128
|
return unless full_uri.scheme == 'http'
|
|
116
129
|
|
|
117
130
|
begin
|
|
118
|
-
return if
|
|
131
|
+
return if valid_ip_address?(IPAddr.new(full_uri.host))
|
|
119
132
|
rescue IPAddr::InvalidAddressError
|
|
120
133
|
addresses = Resolv.getaddresses(full_uri.host)
|
|
121
|
-
return if addresses.all? { |addr|
|
|
134
|
+
return if addresses.all? { |addr| valid_ip_address?(IPAddr.new(addr)) }
|
|
122
135
|
end
|
|
123
136
|
|
|
124
137
|
raise ArgumentError,
|
|
125
|
-
'AWS_CONTAINER_CREDENTIALS_FULL_URI must use a loopback '\
|
|
126
|
-
'address when using the http scheme.'
|
|
138
|
+
'AWS_CONTAINER_CREDENTIALS_FULL_URI must use a local loopback '\
|
|
139
|
+
'or an ECS or EKS link-local address when using the http scheme.'
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def valid_ip_address?(ip_address)
|
|
143
|
+
ip_loopback?(ip_address) || ecs_or_eks_ip?(ip_address)
|
|
127
144
|
end
|
|
128
145
|
|
|
129
146
|
# loopback? method is available in Ruby 2.5+
|
|
130
147
|
# Replicate the logic here.
|
|
148
|
+
# loopback (IPv4 127.0.0.0/8, IPv6 ::1/128)
|
|
131
149
|
def ip_loopback?(ip_address)
|
|
132
150
|
case ip_address.family
|
|
133
151
|
when Socket::AF_INET
|
|
@@ -139,6 +157,20 @@ module Aws
|
|
|
139
157
|
end
|
|
140
158
|
end
|
|
141
159
|
|
|
160
|
+
# Verify that the IP address is a link-local address from ECS or EKS.
|
|
161
|
+
# ECS container host (IPv4 `169.254.170.2`)
|
|
162
|
+
# EKS container host (IPv4 `169.254.170.23`, IPv6 `fd00:ec2::23`)
|
|
163
|
+
def ecs_or_eks_ip?(ip_address)
|
|
164
|
+
case ip_address.family
|
|
165
|
+
when Socket::AF_INET
|
|
166
|
+
[0xa9feaa02, 0xa9feaa17].include?(ip_address)
|
|
167
|
+
when Socket::AF_INET6
|
|
168
|
+
ip_address == 0xfd00_0ec2_0000_0000_0000_0000_0000_0023
|
|
169
|
+
else
|
|
170
|
+
false
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
|
|
142
174
|
def backoff(backoff)
|
|
143
175
|
case backoff
|
|
144
176
|
when Proc then backoff
|
|
@@ -174,10 +206,37 @@ module Aws
|
|
|
174
206
|
http_get(conn, @credential_path)
|
|
175
207
|
end
|
|
176
208
|
end
|
|
177
|
-
rescue
|
|
209
|
+
rescue TokenFileReadError, InvalidTokenError
|
|
210
|
+
raise
|
|
211
|
+
rescue StandardError => e
|
|
212
|
+
warn("Error retrieving ECS Credentials: #{e.message}")
|
|
178
213
|
'{}'
|
|
179
214
|
end
|
|
180
215
|
|
|
216
|
+
def fetch_authorization_token
|
|
217
|
+
if (path = ENV['AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE'])
|
|
218
|
+
fetch_authorization_token_file(path)
|
|
219
|
+
elsif (token = ENV['AWS_CONTAINER_AUTHORIZATION_TOKEN'])
|
|
220
|
+
token
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
def fetch_authorization_token_file(path)
|
|
225
|
+
File.read(path).strip
|
|
226
|
+
rescue Errno::ENOENT
|
|
227
|
+
raise TokenFileReadError,
|
|
228
|
+
'AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE is set '\
|
|
229
|
+
"but the file doesn't exist: #{path}"
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
def validate_authorization_token!(token)
|
|
233
|
+
return unless token.include?("\r\n")
|
|
234
|
+
|
|
235
|
+
raise InvalidTokenError,
|
|
236
|
+
'Invalid Authorization token: token contains '\
|
|
237
|
+
'a newline and carriage return character.'
|
|
238
|
+
end
|
|
239
|
+
|
|
181
240
|
def open_connection
|
|
182
241
|
http = Net::HTTP.new(@host, @port, nil)
|
|
183
242
|
http.open_timeout = @http_open_timeout
|
|
@@ -190,18 +249,27 @@ module Aws
|
|
|
190
249
|
|
|
191
250
|
def http_get(connection, path)
|
|
192
251
|
request = Net::HTTP::Get.new(path)
|
|
193
|
-
request
|
|
252
|
+
set_authorization_token(request)
|
|
194
253
|
response = connection.request(request)
|
|
195
254
|
raise Non200Response unless response.code.to_i == 200
|
|
196
255
|
|
|
197
256
|
response.body
|
|
198
257
|
end
|
|
199
258
|
|
|
259
|
+
def set_authorization_token(request)
|
|
260
|
+
if (authorization_token = fetch_authorization_token)
|
|
261
|
+
validate_authorization_token!(authorization_token)
|
|
262
|
+
request['Authorization'] = authorization_token
|
|
263
|
+
end
|
|
264
|
+
end
|
|
265
|
+
|
|
200
266
|
def retry_errors(error_classes, options = {})
|
|
201
267
|
max_retries = options[:max_retries]
|
|
202
268
|
retries = 0
|
|
203
269
|
begin
|
|
204
270
|
yield
|
|
271
|
+
rescue TokenFileReadError, InvalidTokenError
|
|
272
|
+
raise
|
|
205
273
|
rescue *error_classes => _e
|
|
206
274
|
raise unless retries < max_retries
|
|
207
275
|
|
|
@@ -3,15 +3,17 @@
|
|
|
3
3
|
module Aws
|
|
4
4
|
module Endpoints
|
|
5
5
|
class Endpoint
|
|
6
|
-
def initialize(url:, properties: {}, headers: {})
|
|
6
|
+
def initialize(url:, properties: {}, headers: {}, metadata: {})
|
|
7
7
|
@url = url
|
|
8
8
|
@properties = properties
|
|
9
9
|
@headers = headers
|
|
10
|
+
@metadata = metadata
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
attr_reader :url
|
|
13
14
|
attr_reader :properties
|
|
14
15
|
attr_reader :headers
|
|
16
|
+
attr_reader :metadata
|
|
15
17
|
end
|
|
16
18
|
end
|
|
17
19
|
end
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
3
|
+
require "cgi/escape"
|
|
4
|
+
require "cgi/util" if RUBY_VERSION < "3.5"
|
|
4
5
|
|
|
5
6
|
module Aws
|
|
6
7
|
module Endpoints
|
|
@@ -28,7 +29,11 @@ module Aws
|
|
|
28
29
|
|
|
29
30
|
val = if (index = parts.first[BRACKET_REGEX, 1])
|
|
30
31
|
# remove brackets and index from part before indexing
|
|
31
|
-
|
|
32
|
+
if (base = parts.first.gsub(BRACKET_REGEX, '')) && !base.empty?
|
|
33
|
+
value[base][index.to_i]
|
|
34
|
+
else
|
|
35
|
+
value[index.to_i]
|
|
36
|
+
end
|
|
32
37
|
else
|
|
33
38
|
value[parts.first]
|
|
34
39
|
end
|
|
@@ -90,14 +95,7 @@ module Aws
|
|
|
90
95
|
|
|
91
96
|
# aws.partition(value: string) Option<Partition>
|
|
92
97
|
def self.aws_partition(value)
|
|
93
|
-
partition
|
|
94
|
-
Aws::Partitions.find { |p| p.region?(value) } ||
|
|
95
|
-
Aws::Partitions.find { |p| value.match(p.region_regex) } ||
|
|
96
|
-
Aws::Partitions.find { |p| p.name == 'aws' }
|
|
97
|
-
|
|
98
|
-
return nil unless partition
|
|
99
|
-
|
|
100
|
-
partition.metadata
|
|
98
|
+
Aws::Partitions::Metadata.partition(value)
|
|
101
99
|
end
|
|
102
100
|
|
|
103
101
|
# aws.parseArn(value: string) Option<ARN>
|