如何通过AWS JS SDK检查IAM access key是否处于活跃状态
通过AWS JS SDK检查IAM Access Key活跃状态的实现方法
你可以直接调用IAM服务的官方接口获取Access Key状态,返回结果和AWS Management Console展示的状态完全一致。
前置准备
- 安装对应SDK依赖:官方推荐使用模块化的v3版本,安装
@aws-sdk/client-iam包;如果使用维护期的旧v2版本,安装aws-sdk包即可 - 确保运行SDK的身份(本地配置的AWS凭证、EC2实例角色、Lambda执行角色等)拥有
iam:ListAccessKeys的IAM操作权限 - IAM是全局服务,初始化客户端时区域固定填
us-east-1即可,不需要填其他区域
实现代码
AWS SDK for JavaScript v3(推荐版本)
// 引入IAM客户端及对应命令 import { IAMClient, ListAccessKeysCommand } from "@aws-sdk/client-iam"; // 初始化客户端,SDK会自动从环境变量、本地凭证文件、实例角色等位置加载身份凭证 const iamClient = new IAMClient({ region: "us-east-1" }); /** * 获取指定IAM用户下所有Access Key的状态 * @param {string} userName 目标IAM用户名 * @returns {Promise<Array<{accessKeyId: string, status: 'Active'|'Inactive', createDate: Date}>>} */ async function getAllAccessKeyStatus(userName) { const command = new ListAccessKeysCommand({ UserName: userName }); const resp = await iamClient.send(command); // Status字段直接对应密钥状态:Active为活跃,Inactive为已禁用 return resp.AccessKeyMetadata.map(keyItem => ({ accessKeyId: keyItem.AccessKeyId, status: keyItem.Status, createDate: keyItem.CreateDate })); } // 调用示例:查询指定用户下的密钥状态 getAllAccessKeyStatus("你的目标IAM用户名") .then(keyList => { keyList.forEach(key => { console.log(`密钥ID:${key.accessKeyId},状态:${key.status === 'Active' ? '*活跃*' : '*已禁用*'},创建时间:${key.createDate}`); }); }) .catch(err => { console.error("查询失败:", err.message); });
如果需要查询单个指定Access Key的状态,在拿到返回的密钥列表后,直接过滤匹配目标Access Key ID的条目即可。
AWS SDK for JavaScript v2(旧版本)
const AWS = require('aws-sdk'); const iamClient = new AWS.IAM({ region: 'us-east-1' }); async function getAllAccessKeyStatus(userName) { const resp = await iamClient.listAccessKeys({ UserName: userName }).promise(); return resp.AccessKeyMetadata.map(keyItem => ({ accessKeyId: keyItem.AccessKeyId, status: keyItem.Status, createDate: keyItem.CreateDate })); } // 调用逻辑和v3版本完全一致
注意事项
- 默认单次接口调用最多返回100条密钥记录,如果返回结果中
IsTruncated字段为true,需要传入上一次请求返回的Marker参数翻页,才能拉取到该用户下的所有密钥 - 该接口仅能返回密钥的启用/禁用状态,如果需要查询密钥最后一次的实际使用时间,需要额外调用
getAccessKeyLastUsed接口获取 - 禁止在代码中硬编码IAM凭证,优先使用IAM角色、环境变量、本地AWS凭证文件的方式加载身份信息,避免凭证泄露
内容的提问来源于stack exchange,提问作者Dovid Gefen
相关产品推荐
相关产品推荐

