无法列出 AWS 秘密管理器中的所有秘密

7ms*_*ven 0 python amazon-web-services aws-lambda aws-secrets-manager

我试图使用 lambda 函数列出 AWS 秘密管理器中可用的所有秘密,以下是 python 代码片段;

region='us-west-2'

session= boto3.sesssion.Session(region_name=region)

client = session.client('secretsmanager')

secrets =  client.list_secrets()

secrets_manager = secrets['SecretList']

for secret in secrets_manager:
  print(secret['Name'])
Run Code Online (Sandbox Code Playgroud)

上面的代码只列出了一些秘密,而不是所有秘密,但运行以下 CLI 命令会返回所有秘密。

aws secretsmanager list-secrets | grep "Name"
Run Code Online (Sandbox Code Playgroud)

我在 python 代码中缺少什么?请指教

syt*_*ech 5

API 是分页的。您需要发送多个请求才能获取所有响应页面。默认情况下,CLI 会为您执行此操作。

最简单的方法是使用 boto3 中的分页器 API ——它将为您正确实现分页(不同的 AWS 服务/API 之间可能略有不同)

client = session.client('secretsmanager')
paginator = client.get_paginator('list_secrets')
page_iterator = paginator.paginate()
for page in page_iterator:
    print(page)
Run Code Online (Sandbox Code Playgroud)

或者您可以“手动”执行此操作以获得相同的效果:

secrets = []

response = client.list_secrets()
secrets.extend(response['SecretList'])
while 'NextToken' in response:
    response = client.list_secrets(NextToken=response['NextToken'])
    secrets.extend(response['SecretList'])
for secret in secrets:
    print(secret['Name'])
Run Code Online (Sandbox Code Playgroud)