使用Python Lambda无法列出AWS Secrets Manager全部密钥的问题排查
问题原因
AWS Secrets Manager的list_secrets接口采用分页返回结果,单次调用默认最多返回20条密钥。你的Python代码只调用了一次接口,所以只能拿到第一页的数据;而AWS CLI会自动处理分页逻辑,帮你遍历所有页面获取全部密钥。另外你的代码里还有个拼写错误:boto3.sesssion.Session应该是boto3.session.Session(多写了一个s),这个错误会导致代码无法正常运行。
修复后的代码
import boto3 region = 'us-west-2' # 修正拼写错误:sesssion → session session = boto3.session.Session(region_name=region) client = session.client('secretsmanager') all_secrets = [] next_token = None # 循环遍历所有分页结果 while True: # 根据是否有NextToken决定调用参数 if next_token: response = client.list_secrets(NextToken=next_token) else: response = client.list_secrets() # 将当前页的密钥列表合并到总列表 all_secrets.extend(response['SecretList']) # 获取下一页的标记,没有则终止循环 next_token = response.get('NextToken') if not next_token: break # 输出所有密钥名称 for secret in all_secrets: print(secret['Name'])
核心要点
- 利用
NextToken参数实现分页遍历:每次调用接口后检查返回结果中的NextToken,存在则继续请求下一页,直到没有NextToken为止。 - 使用
extend方法合并每页数据,避免覆盖之前的结果。 - 修正会话初始化的拼写错误,确保代码能正常执行。
内容的提问来源于stack exchange,提问作者7msseven
相关产品推荐
相关产品推荐

