[アップデート] AWS CDK のアルファモジュールで AWS IoT Device Defender の DEVICE_CERTIFICATE_AGE_CHECK (デバイス証明書の経過時間チェック)が設定可能になりました

[アップデート] AWS CDK のアルファモジュールで AWS IoT Device Defender の DEVICE_CERTIFICATE_AGE_CHECK (デバイス証明書の経過時間チェック)が設定可能になりました

Clock Icon2025.05.24

こんにちは、製造ビジネステクノロジー部の若槻です。

今年の 2 月に AWS IoT Device Defender の監査機能に、IoT 証明書のライフサイクル管理を強化する新たな監査チェック DEVICE_CERTIFICATE_AGE_CHECK (デバイス証明書の経過時間チェック) が追加されました。

https://aws.amazon.com/jp/about-aws/whats-new/2025/02/aws-iot-device-defender-iot-certificate-lifecycle-management/

DevelopersIO のアップデート紹介ブログはこちらです。

https://dev.classmethod.jp/articles/aws-iot-device-defender-certificate-lifecycle-enhancements/

DEVICE_CERTIFICATE_AGE_CHECK のドキュメントの記載はこちらです。

https://docs.aws.amazon.com/ja_jp/iot-device-defender/latest/devguide/device-certificate-age-check.html

そして AWS CDK の最近のリリースである v2.195.0 でも、アルファモジュール(aws-iot-alpha)で AWS IoT Device Defender のアカウント監査構成が L2 Construct により簡単に作成可能になりました。

Alpha modules (2.195.0-alpha.0)

⚠ BREAKING CHANGES TO EXPERIMENTAL FEATURES

  • iot: By default, deviceDertificateAgeCheck is automatically enabled.

Features

  • iot: device certificate age check audit configuration (#33816) (9ad383d)

試してみた

CDK パッケージのアップデート

AWS CDK モジュールを v2.195.0 以上にアップデートします。

npm i aws-cdk-lib@latest aws-cdk@latest @aws-cdk/aws-iot-alpha@latest

これにより AccountAuditConfiguration コンストラクトの checkConfiguration プロパティに以下のような新しいプロパティが追加されます。

packages/@aws-cdk/aws-iot-alpha/lib/audit-configuration.ts
/**
 * デバイス証明書が指定した日数以上アクティブになっているかチェックします
 *
 * @default true
 */
readonly deviceCertificateAgeCheck?: boolean;

/**
 * デバイス証明書の発行からの経過期間をチェックするための閾値
 *
 * 有効な値は30日(最小)から3652日(10年、最大)までです
 *
 * `deviceCertificateAgeCheck`が`false`に設定されている場合、
 * このチェックに値を指定することはできません
 *
 * @default - 365日
 */
readonly deviceCertificateAgeCheckDuration?: Duration;

プロパティを指定しない場合(デフォルト設定)

まずは AccountAuditConfiguration コンストラクトでプロパティを指定しない場合を試してみます。今回のアップデートは破壊的変更なので DEVICE_CERTIFICATE_AGE_CHECK がデフォルトで有効になる点に注意が必要です。

lib/main-stack.ts
import * as cdk from "aws-cdk-lib";
import * as iot from "@aws-cdk/aws-iot-alpha";
import { Construct } from "constructs";

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // IoT アカウント監査設定
    new iot.AccountAuditConfiguration(this, "AuditConfiguration");
  }
}

上記をデプロイすると、Device certificate age の監査チェックがデフォルトで有効になりました。また「Additional audit configuration」というメニューで Device certificate ageが 365 days に設定されています。

「Additional audit configuration」メニューには似通った2つの設定がありますが、それぞれ以下のように有効期間ベースのチェックと、発行ベースのチェックが行われます。DEVICE_CERTIFICATE_AGE_CHECK は後者となります。

  • Device certificate expiring(デバイス証明書の有効期限):
    • 証明書の有効期限が指定した日数以内に迫っている場合に、その証明書を非準拠としてマークする
    • デフォルト値は30日
    • 30日から3652日(10年)の間で指定可能
  • Device certificate age(デバイス証明書の発行からの経過期間):
    • 証明書が指定した日数以上使用されている場合に、その証明書を非準拠としてマークする
    • デフォルト値は365日
    • 30日から3652日(10年)の間で指定可能

Device certificate age の変更

続いて、deviceCertificateAgeCheckDuration プロパティを指定して、デフォルトの 365日 から 10年 に変更してみます。

lib/main-stack.ts
import * as cdk from "aws-cdk-lib";
import * as iot from "@aws-cdk/aws-iot-alpha";
import { Duration } from "aws-cdk-lib";
import { Construct } from "constructs";

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // IoT アカウント監査設定
    new iot.AccountAuditConfiguration(this, "AuditConfiguration", {
      checkConfiguration: {
        deviceCertificateAgeCheckDuration: Duration.days(3650), // デフォルトの 365 日から 10 年に変更
      },
    });
  }
}

上記をデプロイすると、「Device certificate age」が 3650 days に変更されました。

Device certificate age の無効化

続いて、deviceCertificateAgeCheck プロパティを指定して、デフォルトの true から false に変更してみます。

lib/main-stack.ts
import * as cdk from "aws-cdk-lib";
import * as iot from "@aws-cdk/aws-iot-alpha";
import { Construct } from "constructs";

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // IoT アカウント監査設定
    new iot.AccountAuditConfiguration(this, "AuditConfiguration", {
      checkConfiguration: {
        deviceCertificateAgeCheck: false, // デバイス証明書の有効期限チェックを無効化
      },
    });
  }
}

上記をデプロイすると、「Device certificate age」が無効化されました。

注意点

ドキュメント には DEVICE_CERTIFICATE_AGE_CHECK の最大値は 3652 days と記載されています。うるう年を考慮した日数設定のようですね。

そこで CDK で 3652 日を指定してみます。

lib/main-stack.ts
import * as cdk from "aws-cdk-lib";
import * as iot from "@aws-cdk/aws-iot-alpha";
import { Duration } from "aws-cdk-lib";
import { Construct } from "constructs";

export class MainStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props: cdk.StackProps) {
    super(scope, id, props);

    // IoT アカウント監査設定
    new iot.AccountAuditConfiguration(this, "AuditConfiguration", {
      checkConfiguration: {
        deviceCertificateAgeCheckDuration: Duration.days(3652), // デフォルトの 365 日から 10 年に変更
      },
    });
  }
}

しかし上記をデプロイすると、最大値は 3650 日であるというエラーが発生します。

10:51:08 PM | UPDATE_FAILED        | AWS::IoT::AccountAuditConfiguration | AuditConfiguration8C793652
Resource handler returned message: "Certificate age threshold is greater than the maximum supported threshold of 3650 days. (Service: Iot, Status Code: 400, Request ID: 20cddf20-
f5a5-4f4b-8fee-140be1305778) (SDK Attempt Count: 1)" (RequestToken: 931fdbeb-f895-c970-b0a5-5e7a2f9a86be, HandlerErrorCode: InvalidRequest)

ちなみにマネジメントコンソールから同設定を行った場合でも同様のエラーが発生します。

ドキュメントに記載の仕様との乖離となっているので最大値には注意するようにしましょう。

おわりに

AWS CDK のアルファモジュールで AWS IoT Device Defender の「デバイス証明書の発行からの経過期間」のチェックが設定可能になったのでご紹介しました。

IoT デバイスは長期間にわたって使用されることが多く、証明書の有効期限や経過時間のチェックは重要な監査項目となります。特に製造業の現場ではデバイスが生産ラインに組み込まれるなどして物理的なアクセスや更新が困難な場所に設置されている場合も多いでしょう。その場合でも今回紹介した監査チェックを自動化することで、IoT デバイスのセキュリティを強化し、運用負荷を軽減することができます。有効活用していきましょう。

参考

https://dev.classmethod.jp/articles/aws-cdk-alpha-module-aws-iot-device-defender-audit-setup/

以上

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.