考虑2个AWS帐户A(其他团队(和B(我的(对于我的用例,我必须轮询A的AWS帐户中的队列以获取有效负载,并在B中执行数据库操作。为此,我在B中创建了一个角色,可以访问我的数据库+a的帐户ID作为信任关系。同样,A创建了一个角色,用于授予对A+中队列的访问权限,并将B添加为受信任关系。
执行所有轮询+数据库操作的代码将驻留在我的帐户(B(中的EC2上。现在,我如何从角色的角度使用有效负载和执行操作。我的理解正确吗?
- 担任角色A
- 轮询供应队列,从SQS获取JSON负载
- 担任角色B
- 在Oracle RDS中执行数据库操作
- 担任角色A
- 返回响应SQS
- 再次开始对供应队列SQS进行轮询
仅供参考:我正在使用Python+Boto3 执行上述操作
您可以将跨帐户访问帐户A中队列的权限授予帐户B中的用户/角色,而不是承担角色。
在您的情况下,将其授予EC2实例角色,然后您就可以在实例中执行所有必需的操作,而不需要任何"假定角色"技巧。
您不说您使用的是哪种编程语言或SDK,但实际上您可以创建两个客户端/服务对象,一个利用角色A的凭据,另一个来自角色B。然后只需使用适当的客户端/服务对象进行API调用。
使用boto3,例如:
sqs_accounta = boto3.client(
'sqs',
region_name='us-east-1',
aws_access_key_id=xxx,
aws_secret_access_key=yyy,
aws_session_token=zzz
)
rds_accountb = boto3.client(
'rds',
region_name='us-west-2',
aws_access_key_id=aaa,
aws_secret_access_key=bbb,
aws_session_token=ccc
)
暂时假设一切都发生在您自己的帐户(account-B(中。
您将为您的代码提供一组凭据(IAM用户,或者,如果代码在Amazon EC2实例上运行,您将为该实例分配IAM角色(,它可以用来访问帐户B中的必要资源。因此,没有问题。
唯一的附加要求是您希望访问Account-A中的Amazon SQS。碰巧您可以直接向授予跨帐户访问权限的Amazon SQS队列添加权限。
请参阅:亚马逊SQS IAM策略的基本示例-亚马逊简单队列服务
因此,您实际上不需要承担任何角色。只需使用分配给代码的普通凭据,并向SQS队列添加权限,即可允许特定IAM用户或IAM角色使用该队列。