You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS跨账号IAM角色创建失败排查及正确配置咨询

问题分析与解决方案

原代码的核心问题

  1. 信任策略不支持跨账号:当前角色的assumed_by仅指定了lambda.amazonaws.com服务主体,这意味着只有账号A自身的Lambda函数能扮演该角色,完全未授权账号B的Lambda进行跨账号扮演,这是部署失败的核心原因。
  2. 权限语句包含无效动作:dynamodb:GetRecords并非DynamoDB的API动作(该动作属于Kinesis Data Streams),会导致策略语句无效,进一步触发部署错误。

正确的跨账号IAM角色实现方式

要在账号A创建可被账号B Lambda扮演的角色,需修改信任策略限制仅账号B的Lambda能扮演,同时修正权限语句中的无效动作。

修正后的CDK代码示例

# 替换为账号B的实际AWS账号ID
ACCOUNT_B_ID = "123456789012"

# 创建DynamoDB表(保留原有配置逻辑)
self._ddb_table = ddb.Table(
    self,
    id,
    # 原有表配置参数...
)

# 创建支持跨账号扮演的IAM角色
ddb_lambda_role = iam.Role(
    self, 
    "ddb_lambda_role",
    assumed_by=iam.ServicePrincipal("lambda.amazonaws.com"),
    role_name="ddb_lambda_role",
    # 添加条件,仅允许账号B的Lambda服务扮演该角色
    conditions={
        "StringEquals": {
            "aws:PrincipalAccount": ACCOUNT_B_ID
        }
    }
)

# 修正后的DynamoDB权限策略
ddb_policy_stmt = iam.PolicyStatement(
    effect=iam.Effect.ALLOW,
    actions=[
        'dynamodb:Query',
        'dynamodb:GetItem',
        'dynamodb:PutItem',
        'dynamodb:UpdateItem',
        'dynamodb:BatchGetItem',
    ],
    resources=[self._ddb_table.table_arn]
)

ddb_lambda_role.add_to_policy(ddb_policy_stmt)

补充说明

  • 部署账号A的栈时,仅需提前知晓账号B的ID,无需等待账号B的Lambda栈部署完成。
  • 后续在账号B部署Lambda时,需确保Lambda的执行角色拥有sts:AssumeRole权限,允许其扮演账号A中创建的ddb_lambda_role。

内容的提问来源于stack exchange,提问作者user20358

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 14:55:15