我正在使用python和boto3列出组织拥有的资源。我从主帐户中列出资源没有问题,但是我也需要从子帐户中列出资源。我可以获取子帐户ID,但仅此而已。
有帮助吗?
答案 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