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

