我遇到了一个小问题,我真的很难理解它是如何工作的。我有一个我正在编写的工具,它基本上执行一个描述组织来收集我们 AWS 组织中的所有帐户。根据 此处 的文档,它说它会以帐户的 json 响应,在我的情况下,这将是成百上千个帐户。所以我写了一些非常简单的代码来将角色切换到我们的主帐户并进行调用:
import boto3
import uuid
import pprint
iam_client = boto3.client('iam')
sts_client = boto3.client('sts')
org_client = boto3.client('organizations')
print("Starting in account: %s" % sts_client.get_caller_identity().get('Account'))
assumedRoleObject = sts_client.assume_role(
RoleArn="arn:aws:iam::123456xxx:role/MsCrossAccountAccessRole",
RoleSessionName="MasterPayer"
)
credentials = assumedRoleObject['Credentials']
org_client = boto3.client(
'organizations',
aws_access_key_id = credentials['AccessKeyId'],
aws_secret_access_key = credentials['SecretAccessKey'],
aws_session_token = credentials['SessionToken'],
)
getListAccounts = org_client.list_accounts(
NextToken='string'
)
但是当我执行代码时,出现以下错误:
“botocore.errorfactory.InvalidInputException:调用 ListAccounts 操作时发生错误 (InvalidInputException):您为 nextToken 指定了无效值。您必须从对先前 API 调用的响应中获取该值。”
我真的不知道那是什么意思。我看到了 NextToken,我可以在 AWS 文档中找到很多对它的引用,但我不知道如何实际使用它。比如,我需要用它做什么?
原文由 Geoff Sweet 发布,翻译遵循 CC BY-SA 4.0 许可协议
不要从字面上理解 boto3 示例(它们不是实际示例)。这是它的工作原理:
1)你第一次打电话给
list_accounts
你会在没有NextToken
的情况下做到这一点,所以很简单getListAccounts
变量中的内容):请注意,
NextToken
仅在您的帐户多于一个时返回list_accounts
调用可以返回,通常这是100
(文档没有说明bo03–默认很多)。如果一次调用返回所有帐户,则响应中没有NextToken
!NextToken
才能执行此操作:NextToken
(然后你检索了所有帐户)。这就是 AWS 开发工具包在许多情况下处理分页的方式。您还将在其他服务客户端中看到
NextToken
的用法。