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

AWS CDK v2创建IAM信任角色报条件需带厂商前缀错误咨询

问题现象

使用AWS CDK v2创建IAM角色时,抛出如下错误:

'Conditions must be prefaced by a vendor. (Service: AmazonIdentityManagement; Status Code: 400; Error Code: MalformedPolicyDocument; Request ID: 1c40e6e5-0dbf-41bc-a807-22a848955822; Proxy: null)'

涉及的实现代码如下:

// Create cdkTrustRole
    const role = new iam.Role(this, 'cdkTrustRole-AWSAccount-Role', {
      roleName: 'cdkTrustRole-AWSAccount-Role',
      description: 'cdkTrustRole role for Accessing billing,Usage and cost managment',
      assumedBy: new iam.PrincipalWithConditions(
        new iam.ArnPrincipal('arn:aws:iam::***********:root'),
        {
          StringEquals: {
            'sts.ExternalId': 'SJSDHJHSKJDHAShjfdsfsf'
          }
        }
      ),
      managedPolicies: [
        iam.ManagedPolicy.fromManagedPolicyName(this, 'cdkTrustRoleROPolicy', 'cdkTrustRoleROPolicy'),
        iam.ManagedPolicy.fromManagedPolicyName(this, 'cdkTrustRoleBucketPolicy', 'cdkTrustRoleBucketPolicy'),
      ]
      
    });
问题根因

IAM策略的条件键格式要求为<服务前缀>:<条件键名>,前缀和键名之间必须用冒号分隔,IAM会把冒号前的内容识别为条件所属的服务(即报错信息里提到的vendor)。
代码中条件键写为sts.ExternalId,错误使用点代替了冒号,IAM解析时无法识别到该条件的服务前缀,因此抛出策略格式错误。

修复方法

将条件键里的点替换为冒号,即把sts.ExternalId改为sts:ExternalId即可,修正后的条件配置片段如下:

{
  StringEquals: {
    'sts:ExternalId': 'SJSDHJHSKJDHAShjfdsfsf'
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 03:01:08