如何在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
相关产品推荐
相关产品推荐

