1

我正在使用 python 和 boto3 列出我的组织拥有的资源。我列出了我的主账户中的资源没有问题,但我还需要列出子账户中的资源。我可以获得儿童帐户 ID,但仅此而已。

有什么帮助吗?

4

1 回答 1

1

您将需要访问一组属于子帐户的凭据。

访问和管理组织中的成员账户 - AWS Organizations

当您使用 AWS Organizations 控制台创建成员账户时,AWS Organizations 会自动在该账户中创建一个 IAM 角色。此角色在成员账户中具有完全管理权限。该角色还配置为授予对组织主账户的访问权限。

要使用此角色访问成员账户,您必须以有权代入该角色的主账户的用户身份登录。

因此,您可以在子账户中担任 IAM 角色,然后提供一组临时凭证,可用于boto3对子账户进行 API 调用。

import boto3

role_info = {
    'RoleArn': 'arn:aws:iam::<AWS_ACCOUNT_NUMBER>:role/<AWS_ROLE_NAME>',
    'RoleSessionName': '<SOME_SESSION_NAME>'
}

client = boto3.client('sts')
credentials = client.assume_role(**role_info)

session = boto3.session.Session(
    aws_access_key_id=credentials['Credentials']['AccessKeyId'],
    aws_secret_access_key=credentials['Credentials']['SecretAccessKey'],
    aws_session_token=credentials['Credentials']['SessionToken']
)

一种更简单的方法是将角色.aws/config作为新配置文件放入文件中。然后,您可以在进行函数调用时指定配置文件:

# In ~/.aws/credentials:
[master]
aws_access_key_id=foo
aws_secret_access_key=bar

# In ~/.aws/config
[profile child1]
role_arn=arn:aws:iam:...
source_profile=master

像这样使用它:

session = boto3.session.Session(profile_name='dev')
s3 = session.client('s3')

请参阅:使用 boto3 连接到 CloudFront 时如何选择 AWS 配置文件

于 2019-06-24T22:51:26.040 回答