如何通过AWS JS SDK获取IAM access key的创建日期
通过AWS JS SDK查询IAM访问密钥创建日期的方法
直接调用IAM服务的listAccessKeys接口即可,该接口会返回指定用户下所有访问密钥的元数据,包含AccessKeyId(密钥ID)、Status(密钥状态)、CreateDate(创建日期)字段,你只需要在返回结果中匹配目标密钥ID,就能拿到对应的创建日期。
- 前置要求:发起调用的身份需要拥有
iam:ListAccessKeys的IAM权限,否则会抛出权限不足错误 - 接口限制:该接口不支持查询AWS根用户的访问密钥,根用户密钥信息仅能通过控制台查看
AWS SDK for JavaScript v3 实现(当前主流模块化版本)
首先安装依赖:npm install @aws-sdk/client-iam
示例代码:
import { IAMClient, ListAccessKeysCommand } from "@aws-sdk/client-iam"; // IAM是全局服务,区域固定填us-east-1即可正常调用 const iamClient = new IAMClient({ region: "us-east-1" }); /** * 查询指定Access Key的创建日期 * @param {string} targetKeyId 待查询的Access Key ID * @param {string} [iamUserName] 密钥所属IAM用户名,不传则默认查询当前调用身份名下的密钥 * @returns {Date|null} 匹配到的密钥创建日期,未找到返回null */ async function getKeyCreateDate(targetKeyId, iamUserName) { const requestParams = {}; if (iamUserName) requestParams.UserName = iamUserName; let nextMarker; // 处理分页:单次接口调用最多返回100条密钥,存在截断时需要翻页拉取全量数据 do { if (nextMarker) requestParams.Marker = nextMarker; const resp = await iamClient.send(new ListAccessKeysCommand(requestParams)); const targetKey = resp.AccessKeyMetadata.find(item => item.AccessKeyId === targetKeyId); if (targetKey) return targetKey.CreateDate; nextMarker = resp.IsTruncated ? resp.Marker : null; } while (nextMarker); return null; } // 调用示例 getKeyCreateDate("AKIAIOSFODNN7EXAMPLE", "your-iam-username") .then(createTime => { if (createTime) { console.log("目标密钥创建时间(UTC):", createTime.toISOString()); } else { console.log("未查询到匹配的密钥信息"); } }) .catch(err => console.error("查询出错:", err));
AWS SDK for JavaScript v2 实现(旧版本兼容)
如果使用v2版本SDK,先安装依赖:npm install aws-sdk
示例代码:
const AWS = require('aws-sdk'); const iamClient = new AWS.IAM({ region: 'us-east-1' }); async function getKeyCreateDate(targetKeyId, iamUserName) { const requestParams = {}; if (iamUserName) requestParams.UserName = iamUserName; let nextMarker; do { if (nextMarker) requestParams.Marker = nextMarker; const resp = await iamClient.listAccessKeys(requestParams).promise(); const targetKey = resp.AccessKeyMetadata.find(item => item.AccessKeyId === targetKeyId); if (targetKey) return targetKey.CreateDate; nextMarker = resp.IsTruncated ? resp.Marker : null; } while (nextMarker); return null; } // 调用逻辑和v3版本一致 getKeyCreateDate("AKIAIOSFODNN7EXAMPLE", "your-iam-username") .then(createTime => console.log("目标密钥创建时间(UTC):", createTime.toISOString())) .catch(err => console.error("查询出错:", err));
提示:接口返回的
CreateDate是UTC时区的Date对象,你可以根据业务需要自行转换为本地时区格式。如果待查询的密钥不属于当前调用身份,必须传入对应的iamUserName参数,否则只会在当前身份的密钥列表中匹配。
内容的提问来源于stack exchange,提问作者Dovid Gefen
相关产品推荐
相关产品推荐

