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

使用AWS CDK创建AWS IoT CA证书遇错误:资源未找到及长度超限

问题

使用AWS CDK创建AWS IoT Core CA证书时触发报错,实现代码如下:

return new iot.CfnCACertificate(this.stack, id, {
    autoRegistrationStatus: args.autoRegistration === true ? 'ENABLE' : 'DISABLE',
    caCertificatePem: fs.readFileSync(filePath, 'utf-8'),
    certificateMode: args.accountType === 'Multi' ? 'SNI_ONLY' : 'DEFAULT',
    status: 'ACTIVE',
    tags: [
        {
            key: 'Name',
            value: args.name,
        },
        {
            key: 'Description',
            value: args.description,
        },
    ],
    registrationConfig: {
        templateName: args.provisioningTemplateName,
    },
    verificationCertificatePem: undefined,
});

其中filePath指向的PEM文件可通过AWS控制台正常上传,但执行CDK代码时返回如下错误:

1 validation error detected: Value 'Resource of type 'AWS::IoT::CACertificate' with identifier '-----BEGIN CERTIFICATE-----
[Here is my PEM]
-----END CERTIFICATE-----
' was not found.' at 'statusMessage' failed to satisfy constraint: Member must have length less than or equal to 2048

疑惑点在于:为何AWS会尝试搜索CA证书而非创建?同时不理解PEM内容为何会触发2048长度限制,求解决方法。

解决方案

核心问题解析

该报错并非PEM证书内容本身长度超标,而是CloudFormation处理逻辑异常:显式设置verificationCertificatePem: undefined会导致CFN误将完整的CA证书PEM内容当作资源标识符去查找,生成的错误信息长度超过了statusMessage字段2048字符的限制,最终触发验证失败。

修复步骤

  1. 移除verificationCertificatePem参数:创建无需验证的CA证书时,不要显式传递该参数。显式设置undefined会干扰CFN的资源创建逻辑,引发错误。
  2. 调整CA证书初始状态:未完成验证的CA证书无法直接设为ACTIVE,控制台能直接设置是因为自动完成了验证流程。CDK/CFN需遵循API规范,初始状态设为INACTIVE,验证完成后再更新为ACTIVE。
  3. 优化PEM读取逻辑:读取PEM文件时建议去除多余换行,避免不必要的格式干扰。

修改后的代码示例:

return new iot.CfnCACertificate(this.stack, id, {
    autoRegistrationStatus: args.autoRegistration === true ? 'ENABLE' : 'DISABLE',
    caCertificatePem: fs.readFileSync(filePath, 'utf-8').trim(),
    certificateMode: args.accountType === 'Multi' ? 'SNI_ONLY' : 'DEFAULT',
    status: 'INACTIVE',
    tags: [
        {
            key: 'Name',
            value: args.name,
        },
        {
            key: 'Description',
            value: args.description,
        },
    ],
    registrationConfig: {
        templateName: args.provisioningTemplateName,
    },
    // 移除verificationCertificatePem参数,无需显式设置为undefined
});

可选:将CA证书设为ACTIVE

若需要将CA证书状态改为ACTIVE,需完成以下验证流程:

  • 调用AWS IoT API获取验证证书(创建CA证书时会返回该验证证书PEM)
  • 使用你的CA证书签署该验证证书
  • 调用UpdateCACertificate接口将CA证书状态更新为ACTIVE

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:18:14