如何在AWS CDK Python中正确为IAM角色添加多账号信任关系?
在AWS CDK Python中为IAM角色添加多账号信任关系的正确方法
错误原因说明
你遇到的TypeError有两个核心原因:
- 调用
add_to_principal_policy时不需要显式传入self——这是实例方法,调用时会自动绑定实例作为第一个参数,额外传入self会导致参数冲突。 add_to_principal_policy的作用是给角色添加权限策略(定义角色能执行的操作),而非修改信任关系(定义谁能扮演这个角色),用它来修改信任关系本身就是方向错误。
正确方法一:创建角色时直接指定多账号信任主体
通过CompositePrincipal组合多个账号主体,在角色初始化时就完成多账号信任配置:
from aws_cdk import aws_iam as iam role = iam.Role( self, "TestRole", # 用CompositePrincipal组合当前账号与目标外部账号 assumed_by=iam.CompositePrincipal( iam.AccountPrincipal(self.account), iam.AccountPrincipal("xxxxxxxxx") # 替换为实际的外部账号ID ), inline_policies={ "Auth": iam.PolicyDocument( statements=[ iam.PolicyStatement( actions=["rds-db:connect"], effect=iam.Effect.ALLOW, resources=[ f"arn:aws:rds-db:{self.region}:{self.account}:dbuser:*/auth" ] ) ] ) }, path="/" )
正确方法二:创建角色后追加信任主体
如果需要在角色创建完成后再添加外部账号信任,可以直接修改角色的assume_role_policy(信任策略文档):
from aws_cdk import aws_iam as iam # 先创建初始角色(仅允许当前账号扮演) role = iam.Role( self, "TestRole", assumed_by=iam.AccountPrincipal(self.account), inline_policies={ "Auth": iam.PolicyDocument( statements=[ iam.PolicyStatement( actions=["rds-db:connect"], effect=iam.Effect.ALLOW, resources=[ f"arn:aws:rds-db:{self.region}:{self.account}:dbuser:*/auth" ] ) ] ) }, path="/" ) # 向信任策略中追加外部账号的允许声明 role.assume_role_policy.add_statements( iam.PolicyStatement( effect=iam.Effect.ALLOW, principals=[iam.AccountPrincipal("xxxxxxxxx")], # 替换为实际的外部账号ID actions=["sts:AssumeRole"] ) )
内容的提问来源于stack exchange,提问作者kravb
相关产品推荐
相关产品推荐

