使用Athena和boto3切换IAM用户角色

时间:2019-05-06 14:01:43

标签: python amazon-web-services api boto3 amazon-iam

我正在使用boto3编写一个python程序,该程序可以捕获主帐户提出的所有查询,并将其推送到主帐户的所有子帐户中。

从主实例获取查询ID已经完成,但是我很难将它们推到子帐户中。默认情况下,使用我的身份验证信息,AWS将连接到主帐户,但是我无法弄清楚如何使其连接到子帐户。通常,AWS服务通过切换角色来做到这一点,但是Athena对此没有内置的方法。我可以手动创建其他配置文件,但不确定如何在代码执行过程中手动切换它们

这是Amazon的STS切换代码示例,它确实支持承担不同的角色https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-api.html

这是我到目前为止的程序

#!/usr/bin/env python3
import boto3

dev = boto3.session.Session(profile_name='dev')
#Function for executing athena queries
client = dev.client('athena')
s3_input = 's3://dev/test/'
s3_output = 's3://dev/testOutput'
database = 'ex_athena_db'
table = 'test_data'

response = client.list_named_queries(
    MaxResults=50,
    WorkGroup='primary'
)
print response

因此,我具有“开发”配置文件,但是我不确定如何区分此配置文件以向AWS指示我要访问其中一个子账户。只是名称,还是我需要其他一些参数?我认为我无法(或不需要)为此生成单独的身份验证令牌

1 个答案:

答案 0 :(得分:1)

我通过使用新的ARN为子帐户创建新的用户个人资料来解决了此问题

样本配置

[default]
region = us-east-1
[profile ecr-dev]
role_arn = arn:aws:iam::76532435:role/AccountRole
source_profile = default

示例代码

#!/usr/bin/env python3
import boto3

dev = boto3.session.Session(profile_name='name', region_name="us-east-1")
#Function for executing athena queries
client = dev.client('athena')
s3_input = 's3:/test/'
s3_output = 's3:/test'
database = 'ex_athena_db'

response = client.list_named_queries(
    MaxResults=50,
    WorkGroup='primary'
)
print response