aws-sdk-iam 1.0.0.rc1
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 +7 -0
- data/lib/aws-sdk-iam.rb +69 -0
- data/lib/aws-sdk-iam/access_key.rb +179 -0
- data/lib/aws-sdk-iam/access_key_pair.rb +190 -0
- data/lib/aws-sdk-iam/account_password_policy.rb +216 -0
- data/lib/aws-sdk-iam/account_summary.rb +76 -0
- data/lib/aws-sdk-iam/assume_role_policy.rb +122 -0
- data/lib/aws-sdk-iam/client.rb +6894 -0
- data/lib/aws-sdk-iam/client_api.rb +2868 -0
- data/lib/aws-sdk-iam/current_user.rb +269 -0
- data/lib/aws-sdk-iam/customizations.rb +2 -0
- data/lib/aws-sdk-iam/customizations/resource.rb +19 -0
- data/lib/aws-sdk-iam/errors.rb +23 -0
- data/lib/aws-sdk-iam/group.rb +459 -0
- data/lib/aws-sdk-iam/group_policy.rb +178 -0
- data/lib/aws-sdk-iam/instance_profile.rb +264 -0
- data/lib/aws-sdk-iam/login_profile.rb +196 -0
- data/lib/aws-sdk-iam/mfa_device.rb +191 -0
- data/lib/aws-sdk-iam/policy.rb +554 -0
- data/lib/aws-sdk-iam/policy_version.rb +176 -0
- data/lib/aws-sdk-iam/resource.rb +1037 -0
- data/lib/aws-sdk-iam/role.rb +310 -0
- data/lib/aws-sdk-iam/role_policy.rb +178 -0
- data/lib/aws-sdk-iam/saml_provider.rb +144 -0
- data/lib/aws-sdk-iam/server_certificate.rb +167 -0
- data/lib/aws-sdk-iam/signing_certificate.rb +185 -0
- data/lib/aws-sdk-iam/types.rb +7486 -0
- data/lib/aws-sdk-iam/user.rb +744 -0
- data/lib/aws-sdk-iam/user_policy.rb +178 -0
- data/lib/aws-sdk-iam/virtual_mfa_device.rb +142 -0
- data/lib/aws-sdk-iam/waiters.rb +98 -0
- metadata +103 -0
@@ -0,0 +1,178 @@
|
|
1
|
+
# WARNING ABOUT GENERATED CODE
|
2
|
+
#
|
3
|
+
# This file is generated. See the contributing for info on making contributions:
|
4
|
+
# https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
|
5
|
+
#
|
6
|
+
# WARNING ABOUT GENERATED CODE
|
7
|
+
|
8
|
+
module Aws
|
9
|
+
module IAM
|
10
|
+
class UserPolicy
|
11
|
+
|
12
|
+
extend Aws::Deprecations
|
13
|
+
|
14
|
+
# @overload def initialize(user_name, name, options = {})
|
15
|
+
# @param [String] user_name
|
16
|
+
# @param [String] name
|
17
|
+
# @option options [Client] :client
|
18
|
+
# @overload def initialize(options = {})
|
19
|
+
# @option options [required, String] :user_name
|
20
|
+
# @option options [required, String] :name
|
21
|
+
# @option options [Client] :client
|
22
|
+
def initialize(*args)
|
23
|
+
options = Hash === args.last ? args.pop.dup : {}
|
24
|
+
@user_name = extract_user_name(args, options)
|
25
|
+
@name = extract_name(args, options)
|
26
|
+
@data = options.delete(:data)
|
27
|
+
@client = options.delete(:client) || Client.new(options)
|
28
|
+
end
|
29
|
+
|
30
|
+
# @!group Read-Only Attributes
|
31
|
+
|
32
|
+
# @return [String]
|
33
|
+
def user_name
|
34
|
+
@user_name
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [String]
|
38
|
+
def name
|
39
|
+
@name
|
40
|
+
end
|
41
|
+
alias :policy_name :name
|
42
|
+
|
43
|
+
# The policy document.
|
44
|
+
# @return [String]
|
45
|
+
def policy_document
|
46
|
+
data.policy_document
|
47
|
+
end
|
48
|
+
|
49
|
+
# @!endgroup
|
50
|
+
|
51
|
+
# @return [Client]
|
52
|
+
def client
|
53
|
+
@client
|
54
|
+
end
|
55
|
+
|
56
|
+
# Loads, or reloads {#data} for the current {UserPolicy}.
|
57
|
+
# Returns `self` making it possible to chain methods.
|
58
|
+
#
|
59
|
+
# user_policy.reload.data
|
60
|
+
#
|
61
|
+
# @return [self]
|
62
|
+
def load
|
63
|
+
resp = @client.get_user_policy(
|
64
|
+
user_name: @user_name,
|
65
|
+
policy_name: @name
|
66
|
+
)
|
67
|
+
@data = resp.data
|
68
|
+
self
|
69
|
+
end
|
70
|
+
alias :reload :load
|
71
|
+
|
72
|
+
# @return [Types::GetUserPolicyResponse]
|
73
|
+
# Returns the data for this {UserPolicy}. Calls
|
74
|
+
# {Client#get_user_policy} if {#data_loaded?} is `false`.
|
75
|
+
def data
|
76
|
+
load unless @data
|
77
|
+
@data
|
78
|
+
end
|
79
|
+
|
80
|
+
# @return [Boolean]
|
81
|
+
# Returns `true` if this resource is loaded. Accessing attributes or
|
82
|
+
# {#data} on an unloaded resource will trigger a call to {#load}.
|
83
|
+
def data_loaded?
|
84
|
+
!!@data
|
85
|
+
end
|
86
|
+
|
87
|
+
# @!group Actions
|
88
|
+
|
89
|
+
# @example Request syntax with placeholder values
|
90
|
+
#
|
91
|
+
# user_policy.delete()
|
92
|
+
# @param [Hash] options ({})
|
93
|
+
# @return [EmptyStructure]
|
94
|
+
def delete(options = {})
|
95
|
+
options = options.merge(
|
96
|
+
user_name: @user_name,
|
97
|
+
policy_name: @name
|
98
|
+
)
|
99
|
+
resp = @client.delete_user_policy(options)
|
100
|
+
resp.data
|
101
|
+
end
|
102
|
+
|
103
|
+
# @example Request syntax with placeholder values
|
104
|
+
#
|
105
|
+
# user_policy.put({
|
106
|
+
# policy_document: "policyDocumentType", # required
|
107
|
+
# })
|
108
|
+
# @param [Hash] options ({})
|
109
|
+
# @option options [required, String] :policy_document
|
110
|
+
# The policy document.
|
111
|
+
#
|
112
|
+
# The [regex pattern][1] for this parameter is a string of characters
|
113
|
+
# consisting of any printable ASCII character ranging from the space
|
114
|
+
# character (\\u0020) through end of the ASCII character range
|
115
|
+
# (\\u00FF). It also includes the special characters tab (\\u0009), line
|
116
|
+
# feed (\\u000A), and carriage return (\\u000D).
|
117
|
+
#
|
118
|
+
#
|
119
|
+
#
|
120
|
+
# [1]: http://wikipedia.org/wiki/regex
|
121
|
+
# @return [EmptyStructure]
|
122
|
+
def put(options = {})
|
123
|
+
options = options.merge(
|
124
|
+
user_name: @user_name,
|
125
|
+
policy_name: @name
|
126
|
+
)
|
127
|
+
resp = @client.put_user_policy(options)
|
128
|
+
resp.data
|
129
|
+
end
|
130
|
+
|
131
|
+
# @!group Associations
|
132
|
+
|
133
|
+
# @return [User]
|
134
|
+
def user
|
135
|
+
User.new(
|
136
|
+
name: @user_name,
|
137
|
+
client: @client
|
138
|
+
)
|
139
|
+
end
|
140
|
+
|
141
|
+
# @deprecated
|
142
|
+
# @api private
|
143
|
+
def identifiers
|
144
|
+
{
|
145
|
+
user_name: @user_name,
|
146
|
+
name: @name
|
147
|
+
}
|
148
|
+
end
|
149
|
+
deprecated(:identifiers)
|
150
|
+
|
151
|
+
private
|
152
|
+
|
153
|
+
def extract_user_name(args, options)
|
154
|
+
value = args[0] || options.delete(:user_name)
|
155
|
+
case value
|
156
|
+
when String then value
|
157
|
+
when nil then raise ArgumentError, "missing required option :user_name"
|
158
|
+
else
|
159
|
+
msg = "expected :user_name to be a String, got #{value.class}"
|
160
|
+
raise ArgumentError, msg
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
def extract_name(args, options)
|
165
|
+
value = args[1] || options.delete(:name)
|
166
|
+
case value
|
167
|
+
when String then value
|
168
|
+
when nil then raise ArgumentError, "missing required option :name"
|
169
|
+
else
|
170
|
+
msg = "expected :name to be a String, got #{value.class}"
|
171
|
+
raise ArgumentError, msg
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
class Collection < Aws::Resources::Collection; end
|
176
|
+
end
|
177
|
+
end
|
178
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
# WARNING ABOUT GENERATED CODE
|
2
|
+
#
|
3
|
+
# This file is generated. See the contributing for info on making contributions:
|
4
|
+
# https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
|
5
|
+
#
|
6
|
+
# WARNING ABOUT GENERATED CODE
|
7
|
+
|
8
|
+
module Aws
|
9
|
+
module IAM
|
10
|
+
class VirtualMfaDevice
|
11
|
+
|
12
|
+
extend Aws::Deprecations
|
13
|
+
|
14
|
+
# @overload def initialize(serial_number, options = {})
|
15
|
+
# @param [String] serial_number
|
16
|
+
# @option options [Client] :client
|
17
|
+
# @overload def initialize(options = {})
|
18
|
+
# @option options [required, String] :serial_number
|
19
|
+
# @option options [Client] :client
|
20
|
+
def initialize(*args)
|
21
|
+
options = Hash === args.last ? args.pop.dup : {}
|
22
|
+
@serial_number = extract_serial_number(args, options)
|
23
|
+
@data = options.delete(:data)
|
24
|
+
@client = options.delete(:client) || Client.new(options)
|
25
|
+
end
|
26
|
+
|
27
|
+
# @!group Read-Only Attributes
|
28
|
+
|
29
|
+
# @return [String]
|
30
|
+
def serial_number
|
31
|
+
@serial_number
|
32
|
+
end
|
33
|
+
|
34
|
+
# The Base32 seed defined as specified in [RFC3548][1]. The
|
35
|
+
# `Base32StringSeed` is Base64-encoded.
|
36
|
+
#
|
37
|
+
#
|
38
|
+
#
|
39
|
+
# [1]: http://www.ietf.org/rfc/rfc3548.txt
|
40
|
+
# @return [String]
|
41
|
+
def base_32_string_seed
|
42
|
+
data.base_32_string_seed
|
43
|
+
end
|
44
|
+
|
45
|
+
# A QR code PNG image that encodes
|
46
|
+
# `otpauth://totp/$virtualMFADeviceName@$AccountName?secret=$Base32String`
|
47
|
+
# where `$virtualMFADeviceName` is one of the create call arguments,
|
48
|
+
# `AccountName` is the user name if set (otherwise, the account ID
|
49
|
+
# otherwise), and `Base32String` is the seed in Base32 format. The
|
50
|
+
# `Base32String` value is Base64-encoded.
|
51
|
+
# @return [String]
|
52
|
+
def qr_code_png
|
53
|
+
data.qr_code_png
|
54
|
+
end
|
55
|
+
|
56
|
+
# The date and time on which the virtual MFA device was enabled.
|
57
|
+
# @return [Time]
|
58
|
+
def enable_date
|
59
|
+
data.enable_date
|
60
|
+
end
|
61
|
+
|
62
|
+
# @!endgroup
|
63
|
+
|
64
|
+
# @return [Client]
|
65
|
+
def client
|
66
|
+
@client
|
67
|
+
end
|
68
|
+
|
69
|
+
# @raise [Errors::ResourceNotLoadable]
|
70
|
+
# @api private
|
71
|
+
def load
|
72
|
+
msg = "#load is not implemented, data only available via enumeration"
|
73
|
+
raise Errors::ResourceNotLoadable, msg
|
74
|
+
end
|
75
|
+
alias :reload :load
|
76
|
+
|
77
|
+
# @raise [Errors::ResourceNotLoadableError] Raises when {#data_loaded?} is `false`.
|
78
|
+
# @return [Types::VirtualMFADevice]
|
79
|
+
# Returns the data for this {VirtualMfaDevice}.
|
80
|
+
def data
|
81
|
+
load unless @data
|
82
|
+
@data
|
83
|
+
end
|
84
|
+
|
85
|
+
# @return [Boolean]
|
86
|
+
# Returns `true` if this resource is loaded. Accessing attributes or
|
87
|
+
# {#data} on an unloaded resource will trigger a call to {#load}.
|
88
|
+
def data_loaded?
|
89
|
+
!!@data
|
90
|
+
end
|
91
|
+
|
92
|
+
# @!group Actions
|
93
|
+
|
94
|
+
# @example Request syntax with placeholder values
|
95
|
+
#
|
96
|
+
# virtual_mfa_device.delete()
|
97
|
+
# @param [Hash] options ({})
|
98
|
+
# @return [EmptyStructure]
|
99
|
+
def delete(options = {})
|
100
|
+
options = options.merge(serial_number: @serial_number)
|
101
|
+
resp = @client.delete_virtual_mfa_device(options)
|
102
|
+
resp.data
|
103
|
+
end
|
104
|
+
|
105
|
+
# @!group Associations
|
106
|
+
|
107
|
+
# @return [User, nil]
|
108
|
+
def user
|
109
|
+
if data.user.user_name
|
110
|
+
User.new(
|
111
|
+
name: data.user.user_name,
|
112
|
+
client: @client
|
113
|
+
)
|
114
|
+
else
|
115
|
+
nil
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# @deprecated
|
120
|
+
# @api private
|
121
|
+
def identifiers
|
122
|
+
{ serial_number: @serial_number }
|
123
|
+
end
|
124
|
+
deprecated(:identifiers)
|
125
|
+
|
126
|
+
private
|
127
|
+
|
128
|
+
def extract_serial_number(args, options)
|
129
|
+
value = args[0] || options.delete(:serial_number)
|
130
|
+
case value
|
131
|
+
when String then value
|
132
|
+
when nil then raise ArgumentError, "missing required option :serial_number"
|
133
|
+
else
|
134
|
+
msg = "expected :serial_number to be a String, got #{value.class}"
|
135
|
+
raise ArgumentError, msg
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
class Collection < Aws::Resources::Collection; end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# WARNING ABOUT GENERATED CODE
|
2
|
+
#
|
3
|
+
# This file is generated. See the contributing for info on making contributions:
|
4
|
+
# https://github.com/aws/aws-sdk-ruby/blob/master/CONTRIBUTING.md
|
5
|
+
#
|
6
|
+
# WARNING ABOUT GENERATED CODE
|
7
|
+
|
8
|
+
require 'aws-sdk-core/waiters'
|
9
|
+
|
10
|
+
module Aws
|
11
|
+
module IAM
|
12
|
+
module Waiters
|
13
|
+
class InstanceProfileExists
|
14
|
+
|
15
|
+
# @param [Hash] options
|
16
|
+
# @option options [required, Client] :client
|
17
|
+
# @option options [Integer] :max_attempts (40)
|
18
|
+
# @option options [Integer] :delay (1)
|
19
|
+
# @option options [Proc] :before_attempt
|
20
|
+
# @option options [Proc] :before_wait
|
21
|
+
def initialize(options)
|
22
|
+
@client = options.fetch(:client)
|
23
|
+
@waiter = Aws::Waiters::Waiter.new({
|
24
|
+
max_attempts: 40,
|
25
|
+
delay: 1,
|
26
|
+
poller: Aws::Waiters::Poller.new(
|
27
|
+
operation_name: :get_instance_profile,
|
28
|
+
acceptors: [
|
29
|
+
{
|
30
|
+
"expected" => 200,
|
31
|
+
"matcher" => "status",
|
32
|
+
"state" => "success"
|
33
|
+
},
|
34
|
+
{
|
35
|
+
"state" => "retry",
|
36
|
+
"matcher" => "status",
|
37
|
+
"expected" => 404
|
38
|
+
}
|
39
|
+
]
|
40
|
+
)
|
41
|
+
}.merge(options))
|
42
|
+
end
|
43
|
+
|
44
|
+
# @option (see Client#get_instance_profile)
|
45
|
+
# @return (see Client#get_instance_profile)
|
46
|
+
def wait(params = {})
|
47
|
+
@waiter.wait(client: @client, params: params)
|
48
|
+
end
|
49
|
+
|
50
|
+
# @api private
|
51
|
+
attr_reader :waiter
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
class UserExists
|
56
|
+
|
57
|
+
# @param [Hash] options
|
58
|
+
# @option options [required, Client] :client
|
59
|
+
# @option options [Integer] :max_attempts (20)
|
60
|
+
# @option options [Integer] :delay (1)
|
61
|
+
# @option options [Proc] :before_attempt
|
62
|
+
# @option options [Proc] :before_wait
|
63
|
+
def initialize(options)
|
64
|
+
@client = options.fetch(:client)
|
65
|
+
@waiter = Aws::Waiters::Waiter.new({
|
66
|
+
max_attempts: 20,
|
67
|
+
delay: 1,
|
68
|
+
poller: Aws::Waiters::Poller.new(
|
69
|
+
operation_name: :get_user,
|
70
|
+
acceptors: [
|
71
|
+
{
|
72
|
+
"state" => "success",
|
73
|
+
"matcher" => "status",
|
74
|
+
"expected" => 200
|
75
|
+
},
|
76
|
+
{
|
77
|
+
"state" => "retry",
|
78
|
+
"matcher" => "error",
|
79
|
+
"expected" => "NoSuchEntity"
|
80
|
+
}
|
81
|
+
]
|
82
|
+
)
|
83
|
+
}.merge(options))
|
84
|
+
end
|
85
|
+
|
86
|
+
# @option (see Client#get_user)
|
87
|
+
# @return (see Client#get_user)
|
88
|
+
def wait(params = {})
|
89
|
+
@waiter.wait(client: @client, params: params)
|
90
|
+
end
|
91
|
+
|
92
|
+
# @api private
|
93
|
+
attr_reader :waiter
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: aws-sdk-iam
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0.rc1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Amazon Web Services
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-12-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: aws-sdk-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.0.0.rc1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.0.0.rc1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aws-sigv4
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
description: Official AWS Ruby gem for AWS Identity and Access Management (IAM). This
|
42
|
+
gem is part of the AWS SDK for Ruby.
|
43
|
+
email:
|
44
|
+
- trevrowe@amazon.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- lib/aws-sdk-iam.rb
|
50
|
+
- lib/aws-sdk-iam/access_key.rb
|
51
|
+
- lib/aws-sdk-iam/access_key_pair.rb
|
52
|
+
- lib/aws-sdk-iam/account_password_policy.rb
|
53
|
+
- lib/aws-sdk-iam/account_summary.rb
|
54
|
+
- lib/aws-sdk-iam/assume_role_policy.rb
|
55
|
+
- lib/aws-sdk-iam/client.rb
|
56
|
+
- lib/aws-sdk-iam/client_api.rb
|
57
|
+
- lib/aws-sdk-iam/current_user.rb
|
58
|
+
- lib/aws-sdk-iam/customizations.rb
|
59
|
+
- lib/aws-sdk-iam/customizations/resource.rb
|
60
|
+
- lib/aws-sdk-iam/errors.rb
|
61
|
+
- lib/aws-sdk-iam/group.rb
|
62
|
+
- lib/aws-sdk-iam/group_policy.rb
|
63
|
+
- lib/aws-sdk-iam/instance_profile.rb
|
64
|
+
- lib/aws-sdk-iam/login_profile.rb
|
65
|
+
- lib/aws-sdk-iam/mfa_device.rb
|
66
|
+
- lib/aws-sdk-iam/policy.rb
|
67
|
+
- lib/aws-sdk-iam/policy_version.rb
|
68
|
+
- lib/aws-sdk-iam/resource.rb
|
69
|
+
- lib/aws-sdk-iam/role.rb
|
70
|
+
- lib/aws-sdk-iam/role_policy.rb
|
71
|
+
- lib/aws-sdk-iam/saml_provider.rb
|
72
|
+
- lib/aws-sdk-iam/server_certificate.rb
|
73
|
+
- lib/aws-sdk-iam/signing_certificate.rb
|
74
|
+
- lib/aws-sdk-iam/types.rb
|
75
|
+
- lib/aws-sdk-iam/user.rb
|
76
|
+
- lib/aws-sdk-iam/user_policy.rb
|
77
|
+
- lib/aws-sdk-iam/virtual_mfa_device.rb
|
78
|
+
- lib/aws-sdk-iam/waiters.rb
|
79
|
+
homepage: http://github.com/aws/aws-sdk-ruby
|
80
|
+
licenses:
|
81
|
+
- Apache-2.0
|
82
|
+
metadata: {}
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.3.1
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 2.5.1
|
100
|
+
signing_key:
|
101
|
+
specification_version: 4
|
102
|
+
summary: AWS SDK for Ruby - IAM
|
103
|
+
test_files: []
|