如何编写基于Guard策略的AWS Config自定义规则检查访问密钥年龄?
解决IAM用户访问密钥年龄检查的AWS Config Guard规则
要实现检查IAM用户访问密钥是否超过60天的自定义Config规则,核心问题在于AWS Config的IAM User资源主schema不包含访问密钥的创建时间数据,这些信息需要从supplementaryConfiguration(补充配置)中获取。以下是正确的Guard规则编写方法:
完整Guard规则代码
let MAX_KEY_AGE_DAYS = 60 let MAX_KEY_AGE_MILLIS = MAX_KEY_AGE_DAYS * 24 * 60 * 60 * 1000 rule iam_user_access_keys_not_over_60_days when resourceType == "AWS::IAM::User" { # 存在访问密钥时检查每个密钥的创建时间 supplementaryConfiguration.IamUserAccessKeys exists { # 确保密钥创建时间字段存在且有效 supplementaryConfiguration.IamUserAccessKeys[*].CreateDate is_not_null # 验证创建时间距当前时间不超过60天(转换为毫秒计算) supplementaryConfiguration.IamUserAccessKeys[*].CreateDate > (current_time() - MAX_KEY_AGE_MILLIS) } # 无访问密钥时默认合规(可根据需求调整) else { true } }
关键说明
- 数据来源:IAM用户的访问密钥元数据(包括创建时间)存储在
supplementaryConfiguration.IamUserAccessKeys数组中,而非主configuration字段,这是你之前代码失效的核心原因。 - 时间计算:Guard的
current_time()返回毫秒级时间戳,因此需要将60天转换成毫秒(602460601000),再与密钥的CreateDate(同样是毫秒时间戳)做差值比较。 - 逻辑覆盖:
- 当用户存在访问密钥时,遍历所有密钥确保没有超过60天的;
- 当用户没有访问密钥时,规则返回
true(即合规),如果需要强制用户必须有密钥,可以删除else块并调整逻辑。
验证注意事项
- 确保AWS Config已启用对IAM用户资源的补充配置收集(默认开启,可在Config控制台的资源类型设置中确认);
- 测试时可以创建一个超过60天的访问密钥,验证规则是否正确标记为不合规。
内容的提问来源于stack exchange,提问作者Qadri
相关产品推荐
相关产品推荐

