如何批量删除无Key-ID的AWS API Gateway未使用API密钥?
批量删除未使用的AWS API Gateway API密钥
如果你有大量未使用的API密钥,无需逐个在控制台操作,可通过AWS CLI结合命令行工具批量处理,步骤如下:
1. 筛选并导出未使用的API密钥ID
首先需要获取所有未关联到API阶段的密钥ID(这类密钥通常属于未使用状态):
- 导出所有未使用的密钥ID到文件:
aws apigateway get-api-keys --include-values false --query "items[?stageKeys == `[]`].id" --output text > unused-api-keys.txt
参数说明:
--include-values false:仅返回密钥元数据(不返回密钥值),提升查询效率--query:过滤出stageKeys为空数组的密钥(即未关联任何API部署阶段的密钥)--output text:将结果以文本格式输出,方便后续遍历
如果密钥总数超过500(AWS CLI默认分页上限),使用分页器自动处理所有结果:
aws paginator get-api-keys --include-values false --query "items[?stageKeys == `[]`].id" --output text | tr '\t' '\n' > unused-api-keys.txt
2. 批量删除密钥
遍历导出的密钥ID文件,执行删除操作:
- 先执行测试(仅打印要删除的ID,不实际删除):
while read -r key_id; do if [ -n "$key_id" ]; then echo "待删除API密钥ID:$key_id" fi done < unused-api-keys.txt
- 确认无误后,执行实际删除:
while read -r key_id; do if [ -n "$key_id" ]; then aws apigateway delete-api-key --api-key "$key_id" fi done < unused-api-keys.txt
注意事项
- 确保执行命令的IAM实体拥有
apigateway:GetApiKeys和apigateway:DeleteApiKey权限 - 如果需要删除的是曾使用但已废弃的密钥(非未关联状态),需结合CloudWatch日志或API Gateway使用统计筛选目标密钥ID后再执行删除
- 大批量删除时,可适当添加延迟(如在循环内加入
sleep 0.1)避免触发API请求频率限制
内容的提问来源于stack exchange,提问作者user2913139
相关产品推荐
相关产品推荐

