使用boto3从主帐户中列出子帐户的资源?

时间:2019-06-24 21:50:35

标签: python amazon-web-services boto3 aws-organizations

我正在使用python和boto3列出组织拥有的资源。我从主帐户中列出资源没有问题,但是我也需要从子帐户中列出资源。我可以获取子帐户ID,但仅此而已。

有帮助吗?

1 个答案:

答案 0 :(得分:0)

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

来自Accessing and Administering the Member Accounts in Your Organization - 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')

请参阅:How to choose an AWS profile when using boto3 to connect to CloudFront