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

如何在CDK中为IAM用户授予DynamoDB CfnGlobalTable全量访问权限?

给CfnGlobalTable的IAM用户加全量访问权限的办法

因为CfnGlobalTable是CloudFormation的L1原生资源,不像高层的Table类封装好了grantFullAccess这种现成方法,所以得手动写IAM策略并绑定到用户身上。

具体操作步骤

  • 先写全局表的全量访问策略文档
    全局表的ARN格式一般是arn:aws:dynamodb:${region}:${account-id}:table/${table-name},要是想覆盖所有区域的副本,区域部分可以用通配符。拿AWS CDK的代码举例子:

    const fullAccessPolicyDoc = new iam.PolicyDocument({
      statements: [
        new iam.PolicyStatement({
          actions: ["dynamodb:*"],
          resources: [
            yourCfnGlobalTable.attrArn, // 替换成你的CfnGlobalTable实例ARN
            `${yourCfnGlobalTable.attrArn}/*` // 包含表的索引等子资源,不然有些操作会失败
          ],
          principals: [new iam.ArnPrincipal(targetUser.userArn)] // 指定要授权的IAM用户
        })
      ]
    });
    
  • 把策略绑定到IAM用户
    你可以把上面的策略做成托管策略再挂到用户身上,也直接加内联策略:

    // 方式1:创建托管策略并关联用户
    const globalTableFullAccessPolicy = new iam.Policy(this, 'DynamoDBGlobalTableFullAccess', {
      document: fullAccessPolicyDoc,
      users: [targetUser]
    });
    
    // 方式2:直接给用户加内联策略(更简单)
    targetUser.addToPolicy(new iam.PolicyStatement({
      actions: ["dynamodb:*"],
      resources: [yourCfnGlobalTable.attrArn, `${yourCfnGlobalTable.attrArn}/*`]
    }));
    

要注意的点

  • 资源一定要包含表本身和所有子资源(比如/*后缀),不然像操作索引这类行为会被权限拦截。
  • 如果全局表跨多个区域,要么用arn:aws:dynamodb:*:${account-id}:table/${table-name}匹配所有区域的副本,要么把每个区域的ARN都列进去。
  • 能不用全量dynamodb:*就别用,尽量列具体需要的操作,减少权限风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:02:19