我有一个要求,我要列出所有帐户,然后将所有凭据写入我的~/.aws/credentials
文件中。为此,我正在以以下方式使用boto3
import boto3
client = boto3.client('organizations')
response = client.list_accounts(
NextToken='string',
MaxResults=123
)
print(response)
此操作失败,并显示以下错误
botocore.exceptions.ClientError: An error occurred (ExpiredTokenException) when calling the ListAccounts operation: The security token included in the request is expired
问题是,它在看哪个令牌?如果我想获得有关所有帐户的信息,我应该在credentials
文件还是config
文件中使用什么凭据?
答案 0 :(得分:0)
您可以使用boto3 分页器和页面。
使用主帐户中的aws配置配置文件获取组织对象:
session = boto3.session.Session(profile_name=master_acct)
client = session.client('sts')
org = session.client('organizations')
然后使用org对象获取分页器。
paginator = org.get_paginator('list_accounts')
page_iterator = paginator.paginate()
然后遍历每一页帐户。
for page in page_iterator:
for acct in page['Accounts']:
print(acct) # print the account
我不确定您对“获取凭证”的含义。您无法获得他人的凭据。您可以做的是列出用户,如果需要,则列出他们的访问密钥。这就需要您在每个会员帐户中扮演角色。
在上面的部分中,您已经在每个成员帐户的for循环内。您可以执行以下操作:
id = acct['Id']
role_info = {
'RoleArn': f'arn:aws:iam::{id}:role/OrganizationAccountAccessRole',
'RoleSessionName': id
}
credentials = client.assume_role(**role_info)
member_session = boto3.session.Session(
aws_access_key_id=credentials['Credentials']['AccessKeyId'],
aws_secret_access_key=credentials['Credentials']['SecretAccessKey'],
aws_session_token=credentials['Credentials']['SessionToken'],
region_name='us-east-1'
)
但是请注意,OrganizationAccountAccessRole
中指定的角色实际上必须存在于每个帐户中,并且您在主帐户中的用户需要具有担任此角色的特权。
设置了先决条件后,将遍历每个帐户,并在每个帐户中使用member_session
访问该帐户中的boto3资源。