@@ -2,7 +2,7 @@ use crate::AwsClientConfig;
2
2
use chrono:: { DateTime , Utc } ;
3
3
use failure:: { err_msg, Error } ;
4
4
use log:: { debug, warn} ;
5
- use rusoto_iam:: { GetAccessKeyLastUsedRequest , Iam , IamClient , ListAccessKeysRequest , ListUsersRequest } ;
5
+ use rusoto_iam:: { GetAccessKeyLastUsedRequest , Iam , IamClient , ListAccessKeysRequest , ListUsersRequest , UpdateAccessKeyRequest , DeleteAccessKeyRequest , DeleteLoginProfileRequest , DeleteUserRequest } ;
6
6
use std:: str:: FromStr ;
7
7
8
8
#[ derive( Debug , Clone ) ]
@@ -56,7 +56,7 @@ pub fn list_users(aws_client_config: &AwsClientConfig) -> Result<Vec<User>, Erro
56
56
57
57
#[ derive( Debug , Clone ) ]
58
58
pub struct AccessKeyMetadata {
59
- pub access_key_id : String ,
59
+ pub key_id : String ,
60
60
pub create_date : DateTime < Utc > ,
61
61
pub status : AccessKeyMetadataStatus ,
62
62
pub user_name : String ,
@@ -78,7 +78,7 @@ impl AccessKeyMetadata {
78
78
let user_name = value. user_name . ok_or_else ( || err_msg ( "no user name provided" ) ) ?;
79
79
80
80
Ok ( AccessKeyMetadata {
81
- access_key_id,
81
+ key_id : access_key_id,
82
82
create_date,
83
83
status,
84
84
user_name,
@@ -159,7 +159,7 @@ impl AccessKeyLastUsed {
159
159
Ok ( AccessKeyLastUsed {
160
160
user_name : access_key. user_name ,
161
161
user_id : access_key. user_id ,
162
- access_key_id : access_key. access_key_id ,
162
+ access_key_id : access_key. key_id ,
163
163
status : access_key. status ,
164
164
last_used_date,
165
165
region : value. region ,
@@ -172,23 +172,130 @@ pub fn list_access_last_used(
172
172
aws_client_config : & AwsClientConfig ,
173
173
access_key : AccessKeyMetadata
174
174
) -> Result < AccessKeyLastUsed , Error > {
175
- debug ! ( "Get access key last used for key '{}'" , & access_key. access_key_id ) ;
175
+ debug ! ( "Get access key last used for key '{}'" , & access_key. key_id ) ;
176
176
177
177
let credentials_provider = aws_client_config. credentials_provider . clone ( ) ;
178
178
let http_client = aws_client_config. http_client . clone ( ) ;
179
179
let iam = IamClient :: new_with ( http_client, credentials_provider, aws_client_config. region . clone ( ) ) ;
180
180
181
181
let request = GetAccessKeyLastUsedRequest {
182
- access_key_id : access_key. access_key_id . clone ( ) ,
182
+ access_key_id : access_key. key_id . clone ( ) ,
183
183
} ;
184
184
185
185
let res = iam. get_access_key_last_used ( request) . sync ( ) ;
186
186
debug ! (
187
187
"Finished get access key last used for key '{}'; success={}." ,
188
- & access_key. access_key_id ,
188
+ & access_key. key_id ,
189
189
res. is_ok( )
190
190
) ;
191
191
let res = res?. access_key_last_used . ok_or_else ( || err_msg ( "no result received" ) ) ?;
192
192
193
193
AccessKeyLastUsed :: try_from ( access_key, res)
194
194
}
195
+
196
+ pub fn disable_access_key (
197
+ aws_client_config : & AwsClientConfig ,
198
+ access_key_id : String ,
199
+ user_name : String ,
200
+ ) -> Result < ( ) , Error > {
201
+ debug ! ( "Disabling access '{}' of user '{}'" , & access_key_id, & user_name) ;
202
+
203
+ let credentials_provider = aws_client_config. credentials_provider . clone ( ) ;
204
+ let http_client = aws_client_config. http_client . clone ( ) ;
205
+ let iam = IamClient :: new_with ( http_client, credentials_provider, aws_client_config. region . clone ( ) ) ;
206
+
207
+ let request = UpdateAccessKeyRequest {
208
+ access_key_id : access_key_id. clone ( ) ,
209
+ status : "Inactive" . to_string ( ) ,
210
+ user_name : Some ( user_name. clone ( ) )
211
+ } ;
212
+
213
+ let res = iam. update_access_key ( request) . sync ( ) ;
214
+ debug ! (
215
+ "Finished disabling of access key '{}' from user '{}'; success={}." ,
216
+ & access_key_id,
217
+ & user_name,
218
+ res. is_ok( )
219
+ ) ;
220
+ let res = res?;
221
+
222
+ Ok ( res)
223
+ }
224
+
225
+ pub fn delete_access_key (
226
+ aws_client_config : & AwsClientConfig ,
227
+ access_key_id : String ,
228
+ user_name : String ,
229
+ ) -> Result < ( ) , Error > {
230
+ debug ! ( "Deleting access '{}' of user '{}'" , & access_key_id, & user_name) ;
231
+
232
+ let credentials_provider = aws_client_config. credentials_provider . clone ( ) ;
233
+ let http_client = aws_client_config. http_client . clone ( ) ;
234
+ let iam = IamClient :: new_with ( http_client, credentials_provider, aws_client_config. region . clone ( ) ) ;
235
+
236
+ let request = DeleteAccessKeyRequest {
237
+ access_key_id : access_key_id. clone ( ) ,
238
+ user_name : Some ( user_name. clone ( ) )
239
+ } ;
240
+
241
+ let res = iam. delete_access_key ( request) . sync ( ) ;
242
+ debug ! (
243
+ "Finished deleting of access key '{}' from user '{}'; success={}." ,
244
+ & access_key_id,
245
+ & user_name,
246
+ res. is_ok( )
247
+ ) ;
248
+ let res = res?;
249
+
250
+ Ok ( res)
251
+ }
252
+
253
+ pub fn disable_user (
254
+ aws_client_config : & AwsClientConfig ,
255
+ user_name : String ,
256
+ ) -> Result < ( ) , Error > {
257
+ debug ! ( "Deleting password of user '{}'" , & user_name) ;
258
+
259
+ let credentials_provider = aws_client_config. credentials_provider . clone ( ) ;
260
+ let http_client = aws_client_config. http_client . clone ( ) ;
261
+ let iam = IamClient :: new_with ( http_client, credentials_provider, aws_client_config. region . clone ( ) ) ;
262
+
263
+ let request = DeleteLoginProfileRequest {
264
+ user_name : user_name. clone ( ) ,
265
+ } ;
266
+
267
+ let res = iam. delete_login_profile ( request) . sync ( ) ;
268
+ debug ! (
269
+ "Finished deleting password of user '{}'; success={}." ,
270
+ & user_name,
271
+ res. is_ok( )
272
+ ) ;
273
+ let res = res?;
274
+
275
+ Ok ( res)
276
+ }
277
+
278
+ pub fn delete_user (
279
+ aws_client_config : & AwsClientConfig ,
280
+ user_name : String ,
281
+ ) -> Result < ( ) , Error > {
282
+ debug ! ( "Deleting user '{}'" , & user_name) ;
283
+
284
+ let credentials_provider = aws_client_config. credentials_provider . clone ( ) ;
285
+ let http_client = aws_client_config. http_client . clone ( ) ;
286
+ let iam = IamClient :: new_with ( http_client, credentials_provider, aws_client_config. region . clone ( ) ) ;
287
+
288
+ let request = DeleteUserRequest {
289
+ user_name : user_name. clone ( ) ,
290
+ } ;
291
+
292
+ let res = iam. delete_user ( request) . sync ( ) ;
293
+ debug ! (
294
+ "Finished deleting user '{}'; success={}." ,
295
+ & user_name,
296
+ res. is_ok( )
297
+ ) ;
298
+ let res = res?;
299
+
300
+ Ok ( res)
301
+ }
0 commit comments