CDKv2升级后trustAccountIdentities属性不存在及部署权限问题
CDK v1 升级 v2 问题解决方案
问题1:TS2345 错误(trustAccountIdentities 属性不存在)
CDK v2 已移除 kms.KeyProps 中的 trustAccountIdentities 参数,这是 v1 到 v2 的破坏性变更。原参数作用是让当前 AWS 账号下所有 IAM 身份默认获得该 KMS 密钥的访问权限,v2 中需通过显式授权实现相同效果:
替换原代码里的 trustAccountIdentities: true,改用以下方式:
const MyKmsKey = new kms.Key(this, (mykey).toLowerCase(), { enableKeyRotation: true, enabled: true, removalPolicy: cdk.RemovalPolicy.DESTROY }); // 授予当前账号管理员级 KMS 访问权限,等价于原 trustAccountIdentities: true 的效果 MyKmsKey.grantAdministratorAccess(new iam.AccountPrincipal(this.account)); MyKmsKey.addAlias(mykey);
如果需要更精细的权限控制,可手动添加密钥策略:
MyKmsKey.addToResourcePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, principals: [new iam.AccountPrincipal(this.account)], actions: [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], resources: ["*"] }));
问题2:部署时 iam:PassRole 权限拒绝
注释 trustAccountIdentities 后编译通过,但部署角色缺少 iam:PassRole 权限且存在显式拒绝,需从两方面处理:
- 补充部署角色权限:给部署角色添加允许
iam:PassRole的策略,指定需要传递的角色 ARN(建议缩小资源范围,避免通配符):{ "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::YOUR_ACCOUNT_ID:role/目标角色名称" } - 排查显式拒绝规则:检查组织级 SCP、IAM 身份策略或权限边界中是否存在限制
iam:PassRole的Deny语句,如有需调整策略,允许部署角色对目标角色执行该操作。
另外,也需确保问题1中 KMS 密钥的权限配置完整,避免因密钥访问权限不足触发额外的角色传递需求。
内容的提问来源于stack exchange,提问作者KJ21
相关产品推荐
相关产品推荐

