aws-sdk-core 3.57.0 → 3.58.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
  SHA1:
3
- metadata.gz: 5ff5e1546d4fdfee5d72e640a0b5b8acf1fb667d
4
- data.tar.gz: 530f6672fe1880c12d6e54063025ac0c69981111
3
+ metadata.gz: 8b82f63254467071b547826de2acf86e9b8322ae
4
+ data.tar.gz: 162c01adc59d6d67ca4d39e6dc497bb26bd67139
5
5
  SHA512:
6
- metadata.gz: a42d36ff4c5020b1f368becd6d181075069d7dbeb0760ca2b190c86169abf8129c8dc29a9caf51f1ee4ad77552ea4b7ab3fb8b25a49860aff67eb8d364dc19ba
7
- data.tar.gz: 7078284fa33006f4d7874741acf18bf9cbfad1be43f110faa1bdd7d629f2f54fcdc59b686f7eeac55121a1e9cf4c09c8488ac8c8bfb955b2c3e03c93bf35c795
6
+ metadata.gz: 26359f249597293f05b3b02d2bc9bedaff303edf599dd13559d996f68e3ef2f955c1503165940c078c636b4cf1e8496c7817e2e43ff42647d3862c39e08f39c1
7
+ data.tar.gz: 19595dcfe15a41f59bdcd881dc683b23ad41c811dc49d6ee1427c1cd368aa62f9167a96c6401b8b1042d9b29e12d0c16d4d1ae9225e6686a34fd0bf884159120
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.57.0
1
+ 3.58.0
@@ -9,6 +9,7 @@ require_relative 'aws-sdk-core/deprecations'
9
9
  require_relative 'aws-sdk-core/credential_provider'
10
10
  require_relative 'aws-sdk-core/refreshing_credentials'
11
11
  require_relative 'aws-sdk-core/assume_role_credentials'
12
+ require_relative 'aws-sdk-core/assume_role_web_identity_credentials'
12
13
  require_relative 'aws-sdk-core/credentials'
13
14
  require_relative 'aws-sdk-core/credential_provider_chain'
14
15
  require_relative 'aws-sdk-core/ecs_credentials'
@@ -0,0 +1,101 @@
1
+ require 'set'
2
+ require 'securerandom'
3
+ require 'base64'
4
+
5
+ module Aws
6
+
7
+ # An auto-refreshing credential provider that works by assuming
8
+ # a role via {Aws::STS::Client#assume_role_with_web_identity}.
9
+ #
10
+ # role_credentials = Aws::AssumeRoleWebIdentityCredentials.new(
11
+ # client: Aws::STS::Client.new(...),
12
+ # role_arn: "linked::account::arn",
13
+ # web_identity_token_file: "/path/to/token/file",
14
+ # role_session_name: "session-name"
15
+ # ...
16
+ # )
17
+ # For full list of parameters accepted
18
+ # @see Aws::STS::Client#assume_role_with_web_identity
19
+ #
20
+ #
21
+ # If you omit `:client` option, a new {STS::Client} object will be
22
+ # constructed.
23
+ class AssumeRoleWebIdentityCredentials
24
+
25
+ include CredentialProvider
26
+ include RefreshingCredentials
27
+
28
+ # @option options [required, String] :role_arn the IAM role
29
+ # to be assumed
30
+ #
31
+ # @option options [required, String] :web_identity_token_file
32
+ # absolute path to the file on disk containing OIDC token
33
+ #
34
+ # @option options [String] :role_session_name the IAM session
35
+ # name used to distinguish session, when not provided, base64
36
+ # encoded UUID is generated as the session name
37
+ #
38
+ # @option options [STS::Client] :client
39
+ def initialize(options = {})
40
+ client_opts = {}
41
+ @assume_role_web_identity_params = {}
42
+ @token_file = options.delete(:web_identity_token_file)
43
+ options.each_pair do |key, value|
44
+ if self.class.assume_role_web_identity_options.include?(key)
45
+ @assume_role_web_identity_params[key] = value
46
+ else
47
+ client_opts[key] = value
48
+ end
49
+ end
50
+
51
+ unless @assume_role_web_identity_params[:role_session_name]
52
+ # not provided, generate encoded UUID as session name
53
+ @assume_role_web_identity_params[:role_session_name] = _session_name
54
+ end
55
+ @client = client_opts[:client] || STS::Client.new(client_opts)
56
+ super
57
+ end
58
+
59
+ # @return [STS::Client]
60
+ attr_reader :client
61
+
62
+ private
63
+
64
+ def refresh
65
+ # read from token file everytime it refreshes
66
+ @assume_role_web_identity_params[:web_identity_token] = _token_from_file(@token_file)
67
+
68
+ c = @client.assume_role_with_web_identity(
69
+ @assume_role_web_identity_params).credentials
70
+ @credentials = Credentials.new(
71
+ c.access_key_id,
72
+ c.secret_access_key,
73
+ c.session_token
74
+ )
75
+ @expiration = c.expiration
76
+ end
77
+
78
+ def _token_from_file(path)
79
+ unless path && File.exist?(path)
80
+ raise Aws::Errors::MissingWebIdentityTokenFile.new
81
+ end
82
+ File.read(path)
83
+ end
84
+
85
+ def _session_name
86
+ Base64.strict_encode64(SecureRandom.uuid)
87
+ end
88
+
89
+ class << self
90
+
91
+ # @api private
92
+ def assume_role_web_identity_options
93
+ @arwio ||= begin
94
+ input = STS::Client.api.operation(:assume_role_with_web_identity).input
95
+ Set.new(input.shape.member_names)
96
+ end
97
+ end
98
+
99
+ end
100
+ end
101
+ end
@@ -21,6 +21,7 @@ module Aws
21
21
  [
22
22
  [:static_credentials, {}],
23
23
  [:env_credentials, {}],
24
+ [:assume_role_web_identity_credentials, {}],
24
25
  [:assume_role_credentials, {}],
25
26
  [:shared_credentials, {}],
26
27
  [:process_credentials, {}],
@@ -98,6 +99,22 @@ module Aws
98
99
  end
99
100
  end
100
101
 
102
+ def assume_role_web_identity_credentials(options)
103
+ if role_arn = ENV['AWS_ROLE_ARN'] &&
104
+ token_file = ENV['AWS_WEB_IDENTITY_TOKEN_FILE']
105
+ AssumeRoleWebIdentityCredentials.new(
106
+ role_arn: role_arn,
107
+ web_identity_token_file: token_file,
108
+ role_session_name: ENV['AWS_ROLE_SESSION_NAME']
109
+ )
110
+ elsif Aws.shared_config.config_enabled?
111
+ profile = options[:config].profile if options[:config]
112
+ Aws.shared_config.assume_role_web_identity_credentials_from_config(profile)
113
+ else
114
+ nil
115
+ end
116
+ end
117
+
101
118
  def instance_profile_credentials(options)
102
119
  if ENV["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"]
103
120
  ECSCredentials.new(options)
@@ -158,6 +158,18 @@ module Aws
158
158
  end
159
159
  end
160
160
 
161
+ # Raised when :web_identity_token_file parameter is not
162
+ # provided or the file doesn't exist when initializing
163
+ # AssumeRoleWebIdentityCredentials credential provider
164
+ class MissingWebIdentityTokenFile < RuntimeError
165
+ def initialize(*args)
166
+ msg = 'Missing :web_identity_token_file parameter or'\
167
+ ' invalid file path provided for'\
168
+ ' Aws::AssumeRoleWebIdentityCredentials provider'
169
+ super(msg)
170
+ end
171
+ end
172
+
161
173
  # Raised when a credentials provider process returns a JSON
162
174
  # payload with either invalid version number or malformed contents
163
175
  class InvalidProcessCredentialsPayload < RuntimeError; end
@@ -94,6 +94,7 @@ A delay randomiser function used by the default backoff function. Some predefine
94
94
 
95
95
  NETWORKING_ERRORS = Set.new([
96
96
  'RequestTimeout', # s3
97
+ 'IDPCommunicationError', # sts
97
98
  ])
98
99
 
99
100
  def initialize(error, http_status_code)
@@ -121,6 +121,25 @@ module Aws
121
121
  credentials
122
122
  end
123
123
 
124
+ def assume_role_web_identity_credentials_from_config(profile)
125
+ p = profile || @profile_name
126
+ if @config_enabled && @parsed_config
127
+ entry = @parsed_config.fetch(p, {})
128
+ if entry['web_identity_token_file'] &&
129
+ entry['role_arn']
130
+ AssumeRoleWebIdentityCredentials.new(
131
+ role_arn: entry['role_arn'],
132
+ web_identity_token_file: entry['web_identity_token_file'],
133
+ role_session_name: entry['role_session_name']
134
+ )
135
+ else
136
+ nil
137
+ end
138
+ else
139
+ nil
140
+ end
141
+ end
142
+
124
143
  def region(opts = {})
125
144
  p = opts[:profile] || @profile_name
126
145
  if @config_enabled
@@ -40,6 +40,6 @@ require_relative 'aws-sdk-sts/customizations'
40
40
  # @service
41
41
  module Aws::STS
42
42
 
43
- GEM_VERSION = '3.57.0'
43
+ GEM_VERSION = '3.58.0'
44
44
 
45
45
  end
@@ -1734,7 +1734,7 @@ module Aws::STS
1734
1734
  params: params,
1735
1735
  config: config)
1736
1736
  context[:gem_name] = 'aws-sdk-core'
1737
- context[:gem_version] = '3.57.0'
1737
+ context[:gem_version] = '3.58.0'
1738
1738
  Seahorse::Client::Request.new(handlers, context)
1739
1739
  end
1740
1740
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.57.0
4
+ version: 3.58.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-28 00:00:00.000000000 Z
11
+ date: 2019-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jmespath
@@ -83,6 +83,7 @@ files:
83
83
  - ca-bundle.crt
84
84
  - lib/aws-sdk-core.rb
85
85
  - lib/aws-sdk-core/assume_role_credentials.rb
86
+ - lib/aws-sdk-core/assume_role_web_identity_credentials.rb
86
87
  - lib/aws-sdk-core/async_client_stubs.rb
87
88
  - lib/aws-sdk-core/binary.rb
88
89
  - lib/aws-sdk-core/binary/decode_handler.rb