管理 IAM 访问密钥 - AWS SDK for Java 2.x

管理 IAM 访问密钥

创建访问密钥

要创建 IAM 访问密钥,请使用 CreateAccessKeyRequest 对象调用 IamClient’s createAccessKey 方法。

注意

由于 是一项全局服务,因此,您必须将区域设置为 AWS_GLOBALIamClient 才能使 IAM 调用生效。

导入

import software.amazon.awssdk.services.iam.model.CreateAccessKeyRequest; import software.amazon.awssdk.services.iam.model.CreateAccessKeyResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.iam.IamClient; import software.amazon.awssdk.services.iam.model.IamException;

代码

public static String createIAMAccessKey(IamClient iam,String user) { try { CreateAccessKeyRequest request = CreateAccessKeyRequest.builder() .userName(user).build(); CreateAccessKeyResponse response = iam.createAccessKey(request); String keyId = response.accessKey().accessKeyId(); return keyId; } catch (IamException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } return ""; }

请参阅 GitHub 上的完整示例

列出访问密钥

要列出指定用户的访问密钥,请创建一个 ListAccessKeysRequest 对象,其中包含要为其列出密钥的用户名,并将该对象传递给 IamClient’s listAccessKeys 方法。

注意

如果您未向 listAccessKeys 提供用户名,则它将尝试列出与签署该请求的 AWS 账户相关联的访问密钥。

导入

import software.amazon.awssdk.services.iam.model.AccessKeyMetadata; import software.amazon.awssdk.services.iam.model.IamException; import software.amazon.awssdk.services.iam.model.ListAccessKeysRequest; import software.amazon.awssdk.services.iam.model.ListAccessKeysResponse; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.iam.IamClient;

代码

public static void listKeys( IamClient iam,String userName ){ try { boolean done = false; String newMarker = null; while (!done) { ListAccessKeysResponse response; if(newMarker == null) { ListAccessKeysRequest request = ListAccessKeysRequest.builder() .userName(userName).build(); response = iam.listAccessKeys(request); } else { ListAccessKeysRequest request = ListAccessKeysRequest.builder() .userName(userName) .marker(newMarker).build(); response = iam.listAccessKeys(request); } for (AccessKeyMetadata metadata : response.accessKeyMetadata()) { System.out.format("Retrieved access key %s", metadata.accessKeyId()); } if (!response.isTruncated()) { done = true; } else { newMarker = response.marker(); } } } catch (IamException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

listAccessKeys 的结果分页显示 (默认情况下,每个调用最多返回 100 个记录)。您可以调用返回的 ListAccessKeysResponse 对象中的 isTruncated,以查看该查询返回的结果是否少于可用结果。如果是,则调用 marker 中的 ListAccessKeysResponse 并在创建新请求时使用它。在下次调用 listAccessKeys 时使用该新请求。

请参阅 GitHub 上的完整示例

检索上次使用访问密钥的时间

要获取上次使用访问密钥的时间,请使用访问密钥的 ID(可通过 GetAccessKeyLastUsedRequest 对象传入)调用 IamClient’s getAccessKeyLastUsed 方法。

然后,您可以使用返回的 GetAccessKeyLastUsedResponse 对象检索上次使用密钥的时间。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.iam.IamClient; import software.amazon.awssdk.services.iam.model.GetAccessKeyLastUsedRequest; import software.amazon.awssdk.services.iam.model.GetAccessKeyLastUsedResponse; import software.amazon.awssdk.services.iam.model.IamException;

代码

public static void getAccessKeyLastUsed(IamClient iam, String accessId ){ try { GetAccessKeyLastUsedRequest request = GetAccessKeyLastUsedRequest.builder() .accessKeyId(accessId).build(); GetAccessKeyLastUsedResponse response = iam.getAccessKeyLastUsed(request); System.out.println("Access key was last used at: " + response.accessKeyLastUsed().lastUsedDate()); } catch (IamException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } System.out.println("Done"); }

请参阅 GitHub 上的完整示例

激活或停用访问密钥

您可以激活或停用访问密钥,方式是创建 UpdateAccessKeyRequest 对象,提供访问密钥 ID、用户名(可选)和所需 status,然后将请求对象传递给 IamClient’s updateAccessKey 方法。

导入

import software.amazon.awssdk.services.iam.model.IamException; import software.amazon.awssdk.services.iam.model.StatusType; import software.amazon.awssdk.services.iam.model.UpdateAccessKeyRequest; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.iam.IamClient;

代码

public static void updateKey(IamClient iam, String username, String accessId, String status ) { try { if (status.toLowerCase().equalsIgnoreCase("active")) { statusType = StatusType.ACTIVE; } else if (status.toLowerCase().equalsIgnoreCase("inactive")) { statusType = StatusType.INACTIVE; } else { statusType = StatusType.UNKNOWN_TO_SDK_VERSION; } UpdateAccessKeyRequest request = UpdateAccessKeyRequest.builder() .accessKeyId(accessId) .userName(username) .status(statusType) .build(); iam.updateAccessKey(request); System.out.printf( "Successfully updated the status of access key %s to" + "status %s for user %s", accessId, status, username); } catch (IamException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

请参阅 GitHub 上的完整示例

删除访问密钥

要永久删除访问密钥,请调用 IamClient’s deleteKey 方法,并为该方法提供包含访问密钥 ID 和用户名的 DeleteAccessKeyRequest

注意

密钥在删除后无法再检索或使用。要临时停用密钥,使其可以稍后再次激活,请改用 updateAccessKey 方法。

导入

import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.iam.IamClient; import software.amazon.awssdk.services.iam.model.DeleteAccessKeyRequest; import software.amazon.awssdk.services.iam.model.IamException;

代码

public static void deleteKey(IamClient iam ,String username, String accessKey ) { try { DeleteAccessKeyRequest request = DeleteAccessKeyRequest.builder() .accessKeyId(accessKey) .userName(username) .build(); iam.deleteAccessKey(request); System.out.println("Successfully deleted access key " + accessKey + " from user " + username); } catch (IamException e) { System.err.println(e.awsErrorDetails().errorMessage()); System.exit(1); } }

请参阅 GitHub 上的完整示例

更多信息