Skip to content

Commit 780656b

Browse files
committed
Add disable/delete key/user to aws crate
1 parent ca0e777 commit 780656b

File tree

1 file changed

+114
-7
lines changed

1 file changed

+114
-7
lines changed

aws/src/iam.rs

Lines changed: 114 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::AwsClientConfig;
22
use chrono::{DateTime, Utc};
33
use failure::{err_msg, Error};
44
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};
66
use std::str::FromStr;
77

88
#[derive(Debug, Clone)]
@@ -56,7 +56,7 @@ pub fn list_users(aws_client_config: &AwsClientConfig) -> Result<Vec<User>, Erro
5656

5757
#[derive(Debug, Clone)]
5858
pub struct AccessKeyMetadata {
59-
pub access_key_id: String,
59+
pub key_id: String,
6060
pub create_date: DateTime<Utc>,
6161
pub status: AccessKeyMetadataStatus,
6262
pub user_name: String,
@@ -78,7 +78,7 @@ impl AccessKeyMetadata {
7878
let user_name = value.user_name.ok_or_else(|| err_msg("no user name provided"))?;
7979

8080
Ok(AccessKeyMetadata {
81-
access_key_id,
81+
key_id: access_key_id,
8282
create_date,
8383
status,
8484
user_name,
@@ -159,7 +159,7 @@ impl AccessKeyLastUsed {
159159
Ok(AccessKeyLastUsed {
160160
user_name: access_key.user_name,
161161
user_id: access_key.user_id,
162-
access_key_id: access_key.access_key_id,
162+
access_key_id: access_key.key_id,
163163
status: access_key.status,
164164
last_used_date,
165165
region: value.region,
@@ -172,23 +172,130 @@ pub fn list_access_last_used(
172172
aws_client_config: &AwsClientConfig,
173173
access_key: AccessKeyMetadata
174174
) -> 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);
176176

177177
let credentials_provider = aws_client_config.credentials_provider.clone();
178178
let http_client = aws_client_config.http_client.clone();
179179
let iam = IamClient::new_with(http_client, credentials_provider, aws_client_config.region.clone());
180180

181181
let request = GetAccessKeyLastUsedRequest {
182-
access_key_id: access_key.access_key_id.clone(),
182+
access_key_id: access_key.key_id.clone(),
183183
};
184184

185185
let res = iam.get_access_key_last_used(request).sync();
186186
debug!(
187187
"Finished get access key last used for key '{}'; success={}.",
188-
&access_key.access_key_id,
188+
&access_key.key_id,
189189
res.is_ok()
190190
);
191191
let res = res?.access_key_last_used.ok_or_else(|| err_msg("no result received"))?;
192192

193193
AccessKeyLastUsed::try_from(access_key, res)
194194
}
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

Comments
 (0)