You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 16:39:14